Google berkomitmen untuk memajukan ekuitas ras untuk komunitas kulit hitam. Lihat bagaimana.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Alat Definisi VNDK

Alat definisi VNDK membantu vendor memigrasi pohon sumber mereka ke lingkungan Android 8.0. Alat ini memindai file biner dalam sistem dan gambar vendor lalu menyelesaikan dependensi. Berdasarkan grafik dependensi modul, alat ini juga dapat mendeteksi pelanggaran terhadap konsep VNDK dan memberikan wawasan / saran untuk memindahkan modul antar partisi. Jika Generic System Image (GSI) ditentukan, alat definisi VNDK dapat membandingkan gambar sistem Anda dengan GSI dan menentukan perpustakaan yang diperluas.

Bagian ini mencakup tiga perintah yang sering digunakan untuk alat definisi VNDK:

  • vndk . Hitung VNDK_SP_LIBRARY, VNDK_SP_EXT_LIBRARY, dan EXTRA_VENDOR_LIBRARY untuk solusi membangun sistem di Android 8.0 dan lebih tinggi.
  • check-dep . Periksa ketergantungan modul yang melanggar dari modul vendor ke pustaka kerangka kerja yang tidak memenuhi syarat.
  • deps . Cetak dependensi antara pustaka bersama dan executable.

Untuk detail lebih lanjut tentang penggunaan perintah lanjutan, lihat file README.md di repositori Alat Definisi VNDK.

vndk

vndk memuat pustaka bersama dan executable dari partisi sistem dan partisi vendor, kemudian menyelesaikan dependensi modul untuk menentukan pustaka yang harus disalin ke /system/lib[64]/vndk-sp-${VER} dan /vendor/lib[64] . Pilihan untuk sub vndk meliputi:

Pilihan Deskripsi
--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 set pustaka VNDK, jalankan vndk sub 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 hubungan, dengan file sebelum titik dua tergantung pada file setelah titik dua. Sebagai contoh:

/system/lib/libart.so: /system/lib/libart-compiler.so

Baris ini membuat alat definisi VNDK tahu bahwa libart.so bergantung pada libart-compiler.so .

Tujuan instalasi

Alat definisi VNDK mencantumkan pustaka dan direktori pemasangan yang sesuai untuk kategori berikut:

Kategori Direktori
vndk_sp Harus menginstal 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 output 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 ditunjuk.

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)),)

cek-dep

check-dep perintah check-dep depkan memindai modul-modul vendor dan memeriksa dependensinya. Jika mendeteksi pelanggaran, itu akan mencetak perpustakaan dependen yang melanggar dan penggunaan simbol:

./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, output sampel berikut menunjukkan ketergantungan yang melanggar 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

Pilihan untuk sub check-dep perintah check-dep meliputi:

Pilihan Deskripsi
--tag-file Harus merujuk ke file tag perpustakaan yang memenuhi syarat (dijelaskan di bawah), yang merupakan spreadsheet yang disediakan Google yang menggambarkan kategori kerangka kerja perpustakaan bersama.
--module-info Poin ke module-info.json dihasilkan oleh sistem build Android. Ini membantu alat definisi VNDK mengaitkan modul biner dengan kode sumber.

File tag perpustakaan yang layak

Google menyediakan spreadsheet VNDK yang memenuhi syarat (mis. eligible-list.csv ) yang memberi tag kerangka kerja pustaka bersama yang dapat digunakan oleh modul vendor:

Menandai Deskripsi
LL-NDK Pustaka bersama dengan ABI / API stabil yang dapat digunakan oleh modul framework dan vendor.
LL-NDK-Pribadi Ketergantungan pribadi perpustakaan LL-NDK. Modul vendor tidak boleh mengakses perpustakaan ini secara langsung.
VNDK-SP Kerangka kerja SP-HAL berbagi dependensi perpustakaan.
VNDK-SP-Privat Ketergantungan VNDK-SP yang tidak dapat diakses langsung ke semua modul vendor.
VNDK Framework shared library yang tersedia untuk modul vendor (kecuali SP-HAL dan SP-HAL-Dep).
VNDK-Pribadi Ketergantungan VNDK yang tidak dapat diakses langsung ke semua modul vendor.
FWK-ONLY Pustaka bersama hanya kerangka kerja yang tidak boleh diakses oleh modul vendor (baik secara langsung maupun tidak langsung).
FWK-ONLY-RS Pustaka bersama hanya kerangka yang tidak boleh diakses oleh modul vendor (kecuali untuk penggunaan RS).

Tabel berikut menjelaskan tag yang digunakan untuk pustaka bersama vendor:

Menandai Deskripsi
SP-HAL Implementasi HAL yang sama dengan proses shared library.
SP-HAL-Dep Vendor SP-HAL berbagi dependensi perpustakaan (alias dependensi SP-HAL tidak termasuk LL-NDK dan VNDK-SP).
HANYA VND Pustaka bersama yang tidak terlihat oleh framework yang tidak boleh diakses oleh modul framework. Pustaka VNDK diperpanjang yang disalin akan ditandai sebagai VND-ONLY juga.

Hubungan antara tag:

Gambar 1. Hubungan antara tag.

deps

Untuk men-debug dependensi perpustakaan, sub perintah deps mencetak dependensi modul:

./vndk_definition_tool.py deps \
    --system ${ANDROID_PRODUCT_OUT}/system \
    --vendor ${ANDROID_PRODUCT_OUT}/vendor

Output terdiri dari beberapa baris. Baris tanpa karakter tab memulai bagian baru. Garis dengan karakter tab tergantung pada bagian sebelumnya. Sebagai contoh:

/system/lib/ld-android.so
/system/lib/libc.so
        /system/lib/libdl.so

Output ini menunjukkan bahwa ld-android.so tidak memiliki dependensi dan libc.so tergantung pada libdl.so .

Saat menentukan opsi --revert , deps subcommand mencetak penggunaan perpustakaan (dependensi terbalik):

./vndk_definition_tool.py deps \
    --revert \
    --system ${ANDROID_PRODUCT_OUT}/system \
    --vendor ${ANDROID_PRODUCT_OUT}/vendor

Sebagai contoh:

/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 tergantung pada ld-android.so . Selain itu, output ini menunjukkan bahwa libdl.so adalah satu-satunya pengguna ld-android.so .

Saat menentukan opsi --symbol , sub perintah deps mencetak simbol yang digunakan:

./vndk_definition_tool.py deps \
    --symbol \
    --system ${ANDROID_PRODUCT_OUT}/system \
    --vendor ${ANDROID_PRODUCT_OUT}/vendor
    

Sebagai contoh:

/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 tergantung pada 6 fungsi yang diekspor dari libdl.so . Jika opsi --symbol dan --revert ditentukan, simbol yang digunakan oleh pengguna akan dicetak.