Alat definisi VNDK membantu vendor memigrasikan pohon sumber mereka ke lingkungan Android 8.0. Alat ini memindai file biner dalam sistem dan gambar vendor kemudian menyelesaikan ketergantungan. Berdasarkan grafik ketergantungan modul, alat ini juga dapat mendeteksi pelanggaran terhadap konsep VNDK dan memberikan wawasan/saran untuk memindahkan modul antar partisi. Jika Citra Sistem Generik (GSI) ditentukan, alat definisi VNDK dapat membandingkan citra sistem Anda dengan GSI dan menentukan pustaka yang diperluas.
Bagian ini mencakup tiga perintah yang sering digunakan untuk alat definisi VNDK:
-
vndk
. Hitung VNDK_SP_LIBRARIES, VNDK_SP_EXT_LIBRARIES, dan EXTRA_VENDOR_LIBRARIES untuk solusi sistem build di Android 8.0 dan lebih tinggi. -
check-dep
. Periksa dependensi modul yang melanggar dari modul vendor ke pustaka bersama kerangka kerja yang tidak memenuhi syarat. -
deps
. Cetak ketergantungan antara perpustakaan bersama dan executable.
Untuk detail selengkapnya tentang penggunaan perintah tingkat lanjut, lihat file README.md di repositori Alat Definisi VNDK.
vndk
Subperintah vndk
memuat pustaka bersama dan executable dari partisi sistem dan partisi vendor, lalu menyelesaikan dependensi modul untuk menentukan pustaka yang harus disalin ke /system/lib[64]/vndk-sp-${VER}
dan /vendor/lib[64]
. Opsi untuk subperintah vndk
meliputi:
Pilihan | Keterangan |
---|---|
--system | Arahkan ke direktori yang berisi file yang akan berada di partisi sistem. |
--vendor | Arahkan ke direktori yang berisi file yang akan berada di partisi vendor. |
--aosp-system | Arahkan ke direktori yang berisi file yang akan berada di Generic System Image (GSI). |
--load-extra-deps | Arahkan ke file yang menjelaskan dependensi implisit, seperti dlopen() . |
Misalnya, untuk menghitung kumpulan perpustakaan VNDK, jalankan subperintah vndk
berikut:
./vndk_definition_tool.py vndk \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor \
--aosp-system ${ANDROID_PRODUCT_OUT}/../generic_arm64_ab/system\
--load-extra-deps dlopen.dep
Tentukan dependensi tambahan dengan format file sederhana. Setiap baris mewakili suatu hubungan, dengan file sebelum titik dua bergantung pada file setelah titik dua. Misalnya:
/system/lib/libart.so: /system/lib/libart-compiler.so
Baris ini memberi tahu alat definisi VNDK bahwa libart.so
bergantung pada libart-compiler.so
.
Tujuan instalasi
Alat definisi VNDK mencantumkan perpustakaan dan direktori instalasi yang sesuai untuk kategori berikut:
Kategori | Direktori |
---|---|
vndk_sp | Harus diinstal ke /system/lib[64]/vndk-sp-${VER} |
vndk_sp_ext | Harus menginstal ke /vendor/lib[64]/vndk-sp |
extra_vendor_libs | Harus menginstal ke /vendor/lib[64] |
Bangun templat sistem
Setelah mengumpulkan keluaran dari alat definisi VNDK, vendor dapat membuat Android.mk
dan mengisi VNDK_SP_LIBRARIES
, VNDK_SP_EXT_LIBRARIES
dan EXTRA_VENDOR_LIBRARIES
untuk mengotomatiskan proses menyalin perpustakaan ke tujuan instalasi yang ditentukan.
ifneq ($(filter $(YOUR_DEVICE_NAME),$(TARGET_DEVICE)),) VNDK_SP_LIBRARIES := ##_VNDK_SP_## VNDK_SP_EXT_LIBRARIES := ##_VNDK_SP_EXT_## EXTRA_VENDOR_LIBRARIES := ##_EXTRA_VENDOR_LIBS_## #------------------------------------------------------------------------------- # VNDK Modules #------------------------------------------------------------------------------- LOCAL_PATH := $(call my-dir) define define-vndk-lib include $$(CLEAR_VARS) LOCAL_MODULE := $1.$2 LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_PREBUILT_MODULE_FILE := $$(TARGET_OUT_INTERMEDIATE_LIBRARIES)/$1.so LOCAL_STRIP_MODULE := false LOCAL_MULTILIB := first LOCAL_MODULE_TAGS := optional LOCAL_INSTALLED_MODULE_STEM := $1.so LOCAL_MODULE_SUFFIX := .so LOCAL_MODULE_RELATIVE_PATH := $3 LOCAL_VENDOR_MODULE := $4 include $$(BUILD_PREBUILT) ifneq ($$(TARGET_2ND_ARCH),) ifneq ($$(TARGET_TRANSLATE_2ND_ARCH),true) include $$(CLEAR_VARS) LOCAL_MODULE := $1.$2 LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_PREBUILT_MODULE_FILE := $$($$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/$1.so LOCAL_STRIP_MODULE := false LOCAL_MULTILIB := 32 LOCAL_MODULE_TAGS := optional LOCAL_INSTALLED_MODULE_STEM := $1.so LOCAL_MODULE_SUFFIX := .so LOCAL_MODULE_RELATIVE_PATH := $3 LOCAL_VENDOR_MODULE := $4 include $$(BUILD_PREBUILT) endif # TARGET_TRANSLATE_2ND_ARCH is not true endif # TARGET_2ND_ARCH is not empty endef $(foreach lib,$(VNDK_SP_LIBRARIES),\ $(eval $(call define-vndk-lib,$(lib),vndk-sp-gen,vndk-sp,))) $(foreach lib,$(VNDK_SP_EXT_LIBRARIES),\ $(eval $(call define-vndk-lib,$(lib),vndk-sp-ext-gen,vndk-sp,true))) $(foreach lib,$(EXTRA_VENDOR_LIBRARIES),\ $(eval $(call define-vndk-lib,$(lib),vndk-ext-gen,,true))) #------------------------------------------------------------------------------- # Phony Package #------------------------------------------------------------------------------- include $(CLEAR_VARS) LOCAL_MODULE := $(YOUR_DEVICE_NAME)-vndk LOCAL_MODULE_TAGS := optional LOCAL_REQUIRED_MODULES := \ $(addsuffix .vndk-sp-gen,$(VNDK_SP_LIBRARIES)) \ $(addsuffix .vndk-sp-ext-gen,$(VNDK_SP_EXT_LIBRARIES)) \ $(addsuffix .vndk-ext-gen,$(EXTRA_VENDOR_LIBRARIES)) include $(BUILD_PHONY_PACKAGE) endif # ifneq ($(filter $(YOUR_DEVICE_NAME),$(TARGET_DEVICE)),)
check-dep
Subperintah check-dep
memindai modul vendor dan memeriksa ketergantungannya. Jika mendeteksi pelanggaran, ia akan mencetak pustaka dependen dan penggunaan simbol yang melanggar:
./vndk_definition_tool.py check-dep \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor \
--tag-file eligible-list.csv \
--module-info ${ANDROID_PRODUCT_OUT}/module-info.json \
1> check_dep.txt \
2> check_dep_err.txt
Misalnya, contoh keluaran berikut menunjukkan pelanggaran ketergantungan dari libRS_internal.so
ke libmediandk.so
:
/system/lib/libRS_internal.so MODULE_PATH: frameworks/rs /system/lib/libmediandk.so AImageReader_acquireNextImage AImageReader_delete AImageReader_getWindow AImageReader_new AImageReader_setImageListener
Opsi untuk subperintah check-dep
meliputi:
Pilihan | Keterangan |
---|---|
--tag-file | Harus mengacu pada file tag perpustakaan yang memenuhi syarat (dijelaskan di bawah), yang merupakan spreadsheet yang disediakan Google yang menjelaskan kategori perpustakaan bersama kerangka kerja. |
--module-info | Mengarah ke module-info.json yang dihasilkan oleh sistem build Android. Ini membantu alat definisi VNDK mengaitkan modul biner dengan kode sumber. |
File tag perpustakaan yang memenuhi syarat
Google menyediakan spreadsheet VNDK yang memenuhi syarat (misalnya, eligible-list.csv
) yang memberi tag pada pustaka bersama kerangka kerja yang dapat digunakan oleh modul vendor:
Menandai | Keterangan |
---|---|
LL-NDK | Pustaka bersama dengan ABI/API stabil yang dapat digunakan oleh modul kerangka kerja dan vendor. |
LL-NDK-Swasta | Ketergantungan pribadi perpustakaan LL-NDK. Modul vendor tidak boleh mengakses perpustakaan ini secara langsung. |
VNDK-SP | Kerangka SP-HAL berbagi ketergantungan perpustakaan. |
VNDK-SP-Swasta | Ketergantungan VNDK-SP yang tidak dapat diakses langsung oleh semua modul vendor. |
VNDK | Pustaka bersama kerangka kerja yang tersedia untuk modul vendor (kecuali SP-HAL dan SP-HAL-Dep). |
VNDK-Swasta | Ketergantungan VNDK yang tidak dapat diakses langsung oleh semua modul vendor. |
HANYA FWK | Pustaka bersama khusus kerangka kerja yang tidak boleh diakses oleh modul vendor (baik secara langsung maupun tidak langsung). |
FWK-HANYA-RS | Pustaka bersama khusus kerangka kerja yang tidak boleh diakses oleh modul vendor (kecuali untuk penggunaan RS). |
Tabel berikut menjelaskan tag yang digunakan untuk pustaka bersama vendor:
Menandai | Keterangan |
---|---|
SP-HAL | Pustaka bersama implementasi HAL dengan proses yang sama. |
SP-HAL-Dep | Dependensi pustaka bersama vendor SP-HAL (alias dependensi SP-HAL tidak termasuk LL-NDK dan VNDK-SP). |
HANYA VND | Pustaka bersama yang tidak terlihat kerangka kerja yang tidak boleh diakses oleh modul kerangka kerja. Pustaka VNDK tambahan yang disalin juga akan diberi tag sebagai VND-ONLY. |
Hubungan antar tag:
![Hubungan antar tag.](https://source.android.google.cn/docs/core/architecture/images/treble_vndk_design.png?authuser=3&hl=id)
deps
Untuk men-debug dependensi perpustakaan, subperintah deps
mencetak dependensi modul:
./vndk_definition_tool.py deps \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Outputnya terdiri dari beberapa baris. Baris tanpa karakter tab memulai bagian baru. Baris dengan karakter tab bergantung pada bagian sebelumnya. Misalnya:
/system/lib/ld-android.so /system/lib/libc.so /system/lib/libdl.so
Output ini menunjukkan bahwa ld-android.so
tidak memiliki ketergantungan dan libc.so
bergantung pada libdl.so
.
Saat menentukan opsi --revert
, subperintah deps
mencetak penggunaan perpustakaan (ketergantungan terbalik):
./vndk_definition_tool.py deps \
--revert \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Misalnya:
/system/lib/ld-android.so /system/lib/libdl.so
Output ini menunjukkan bahwa ld-android.so
digunakan oleh libdl.so
, atau dengan kata lain libdl.so
bergantung pada ld-android.so
. Selain itu, keluaran ini menunjukkan bahwa libdl.so
adalah satu-satunya pengguna ld-android.so
.
Saat menentukan opsi --symbol
, subperintah deps
mencetak simbol yang digunakan:
./vndk_definition_tool.py deps \
--symbol \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Misalnya:
/system/lib/libc.so /system/lib/libdl.so android_get_application_target_sdk_version dl_unwind_find_exidx dlclose dlerror dlopen dlsym
Output ini menunjukkan bahwa libc.so
bergantung pada 6 fungsi yang diekspor dari libdl.so
. Jika opsi --symbol
dan --revert
ditentukan, simbol yang digunakan oleh pengguna akan dicetak.