Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Vendor Native Development Kit (VNDK)

Vendor Native Development Kit (VNDK) adalah sekumpulan pustaka yang secara eksklusif digunakan oleh vendor untuk mengimplementasikan HAL mereka. VNDK dikirimkan dalam system.img dan secara dinamis ditautkan ke kode vendor saat runtime.

Mengapa VNDK?

Android 8.0 dan yang lebih tinggi mengaktifkan update khusus framework di mana partisi sistem dapat diupgrade ke versi terbaru, sementara partisi vendor tidak diubah. Ini menyiratkan bahwa binari yang dibangun pada waktu yang berbeda harus dapat bekerja satu sama lain; VNDK mencakup perubahan API / ABI di seluruh rilis Android.

Pembaruan kerangka kerja saja mencakup tantangan berikut:

  • Ketergantungan antara modul kerangka kerja dan modul vendor . Sebelum Android 8.0, modul dari kedua sisi dapat ditautkan dengan modul dari sisi lain. Namun, dependensi dari modul vendor memberlakukan batasan yang tidak diinginkan untuk pengembangan modul framework.
  • Ekstensi ke perpustakaan AOSP . Android 8.0 dan yang lebih tinggi mengharuskan semua perangkat Android meneruskan CTS saat partisi sistem diganti dengan Generic System Image (GSI) standar. Namun, karena vendor memperluas pustaka AOSP untuk meningkatkan kinerja atau untuk menambahkan fungsionalitas tambahan untuk implementasi HIDL mereka, mem-flash partisi sistem dengan GSI standar dapat merusak implementasi HIDL vendor. (Untuk pedoman tentang mencegah kerusakan seperti itu, lihat ekstensi VNDK .)

Untuk mengatasi tantangan ini, Android 8.0 memperkenalkan beberapa teknik seperti VNDK (dijelaskan di bagian ini), HIDL , hwbinder, device tree overlay , dan sepolicy overlay.

Sumber daya VNDK

Bagian ini mencakup sumber daya VNDK berikut:

  • Konsep VNDK (di bawah) menjelaskan framework shared library, HAL proses yang sama (SP-HAL), dan terminologi VNDK.
  • Ekstensi VNDK mengklasifikasikan perubahan khusus vendor ke dalam kategori. Misalnya, pustaka dengan fungsionalitas tambahan yang diandalkan modul vendor harus disalin ke dalam partisi vendor, tetapi perubahan yang tidak kompatibel dengan ABI dilarang.
  • VNDK Build System Support menjelaskan konfigurasi sistem build dan sintaks definisi modul yang terkait dengan VNDK.
  • Alat Definisi VNDK membantu memigrasi pohon sumber Anda ke Android 8.0 dan yang lebih tinggi.
  • Linker Namespace memberikan kontrol yang sangat baik atas keterkaitan perpustakaan bersama.
  • Direktori, Aturan, dan sepolicy menentukan struktur direktori untuk perangkat yang menjalankan Android 8.0 dan yang lebih tinggi, aturan VNDK, dan sepolicy terkait.
  • Presentasi Desain VNDK mengilustrasikan konsep VDNK dasar yang digunakan di Android 8.0 dan yang lebih tinggi.

Konsep VNDK

Di dunia Android 8.0 dan yang lebih tinggi yang ideal, proses kerangka kerja tidak memuat pustaka bersama vendor, semua proses vendor hanya memuat pustaka bersama vendor (dan sebagian pustaka bersama kerangka kerja), dan komunikasi antara proses kerangka kerja dan proses vendor diatur oleh HIDL dan perangkat keras. bahan pengikat.

Dunia seperti itu mencakup kemungkinan bahwa API publik yang stabil dari pustaka bersama kerangka kerja mungkin tidak cukup untuk pengembang modul vendor (meskipun API dapat berubah di antara rilis Android), yang mengharuskan beberapa bagian pustaka bersama kerangka kerja dapat diakses oleh proses vendor. Selain itu, karena persyaratan kinerja dapat menyebabkan kompromi, beberapa HAL yang kritis terhadap waktu respons harus diperlakukan secara berbeda.

Bagian berikut menjelaskan cara VNDK menangani pustaka bersama kerangka kerja untuk vendor dan Same-Process HALs (SP-HAL).

Perpustakaan bersama kerangka untuk vendor

Bagian ini menjelaskan kriteria untuk mengklasifikasikan pustaka bersama yang dapat diakses oleh proses vendor. Ada dua pendekatan untuk mendukung modul vendor di beberapa rilis Android:

  1. Stabilkan ABI / API dari library bersama framework . Modul kerangka kerja baru dan modul vendor lama dapat menggunakan pustaka bersama yang sama untuk mengurangi jejak memori dan ukuran penyimpanan. Pustaka bersama yang unik juga menghindari beberapa masalah pemuatan ganda. Namun, biaya pengembangan untuk mempertahankan ABI / API yang stabil cukup tinggi dan tidak realistis untuk menstabilkan semua ABI / API yang diekspor oleh setiap library bersama framework.
  2. Salin pustaka bersama kerangka lama . Dilengkapi dengan batasan yang kuat terhadap saluran samping, yang didefinisikan sebagai semua mekanisme untuk berkomunikasi di antara modul kerangka kerja dan modul vendor, termasuk (tetapi tidak terbatas pada) pengikat, soket, pipa, memori bersama, file bersama, dan properti sistem. Tidak boleh ada komunikasi kecuali protokol komunikasi dibekukan dan stabil (misalnya HIDL melalui hwbinder). Pustaka bersama yang memuat ganda dapat menyebabkan masalah juga; misalnya, jika sebuah objek yang dibuat oleh perpustakaan baru diteruskan ke fungsi dari perpustakaan lama, kesalahan mungkin terjadi karena perpustakaan ini mungkin menafsirkan objek secara berbeda.

Pendekatan yang berbeda digunakan tergantung pada karakteristik perpustakaan bersama. Akibatnya, library bersama framework diklasifikasikan menjadi tiga sub-kategori:

  • Library LL-NDK adalah Library Bersama Framework yang dikenal stabil. Pengembang mereka berkomitmen untuk menjaga stabilitas API / ABI mereka.
    • LL-NDK mencakup pustaka berikut: libEGL.so , libGLESv1_CM.so , libGLESv2.so , libGLESv3.so , libandroid_net.so , libc.so , libdl.so , liblog.so , libm.so , libnativewindow.so , libneuralnetworks.so , libsync.so , libvndksupport.so , dan libvulkan.so ,
  • Perpustakaan VNDK yang Memenuhi Syarat (VNDK) adalah Perpustakaan Bersama Kerangka yang aman untuk disalin dua kali. Modul Kerangka Kerja dan Modul Vendor dapat ditautkan dengan salinannya sendiri. Pustaka bersama kerangka kerja bisa menjadi pustaka VNDK yang memenuhi syarat hanya jika memenuhi kriteria berikut:
    • Itu tidak mengirim / menerima IPC ke / dari kerangka.
    • Ini tidak terkait dengan mesin virtual ART.
    • Itu tidak membaca / menulis file / partisi dengan format file yang tidak stabil.
    • Itu tidak memiliki lisensi perangkat lunak khusus yang memerlukan tinjauan hukum.
    • Pemilik kodenya tidak keberatan dengan penggunaan vendor.
  • Library Framework-Only (FWK-ONLY) adalah Library Bersama Framework yang tidak termasuk dalam kategori yang disebutkan di atas. Perpustakaan ini:
    • Dianggap sebagai kerangka detail implementasi internal.
    • Tidak boleh diakses oleh modul vendor.
    • Memiliki ABI / API yang tidak stabil dan tidak ada jaminan kompatibilitas API / ABI.
    • Tidak disalin.

Proses yang Sama HAL (SP-HAL)

Same-Process HAL ( SP-HAL ) adalah sekumpulan HAL yang telah ditentukan diimplementasikan sebagai Vendor Shared Libraries dan dimuat ke Framework Processes . SP-HAL diisolasi oleh namespace linker (mengontrol pustaka dan simbol yang terlihat oleh pustaka bersama). SP-HAL harus bergantung hanya pada LL-NDK dan VNDK-SP .

VNDK-SP adalah subset dari library VNDK yang memenuhi syarat. Pustaka VNDK-SP ditinjau dengan cermat untuk memastikan pustaka VNDK-SP yang memuat ganda ke dalam proses kerangka kerja tidak menimbulkan masalah. Baik SP-HAL dan VNDK-SP ditentukan oleh Google.

Pustaka berikut ini disetujui SP-HAL:

  • libGLESv1_CM_${driver}.so
  • libGLESv2_${driver}.so
  • libGLESv3_${driver}.so
  • libEGL_${driver}.so
  • vulkan.${driver}.so
  • android.hardware.renderscript@1.0-impl.so
  • android.hardware.graphics.mapper@2.0-impl.so

Library VNDK-SP menentukan vndk: { support_system_process: true } dalam file Android.bp mereka. Jika vendor_available: false juga ditentukan, maka library ini disebut VNDK-SP-Private dan tidak terlihat oleh SP-HALS .

Berikut ini adalah pustaka khusus kerangka kerja dengan pengecualian RS (FWK-ONLY-RS) :

  • libft2.so (Renderscript)
  • libmediandk.so (Renderscript)

Terminologi VNDK

  • Modul mengacu pada Perpustakaan Bersama atau Dapat Dieksekusi .
  • Proses adalah tugas sistem operasi yang dihasilkan dari Executables .
  • Kerangka -qualified istilah mengacu pada konsep yang berkaitan dengan partisi sistem.
  • Istilah berkualifikasi vendor mengacu pada konsep yang terkait dengan partisi vendor .

Sebagai contoh:

  • Framework Executable mengacu pada file yang dapat dieksekusi di /system/bin atau /system/xbin .
  • Framework Shared Libraries mengacu pada perpustakaan bersama di bawah /system/lib[64] .
  • Modul Framework mengacu pada Framework Shared Libraries dan Framework Executable .
  • Proses Framework adalah proses yang muncul dari Framework Executables (misalnya /system/bin/app_process ).
  • Vendor Executable merujuk ke file yang dapat dieksekusi di /vendor/bin
  • Perpustakaan Bersama Vendor mengacu pada perpustakaan bersama di bawah /vendor/lib[64] .
  • Modul Vendor mengacu pada Vendor Executable dan Vendor Shared Library .
  • Proses Vendor adalah proses yang dihasilkan dari Vendor Executable (mis
  • /vendor/bin/android.hardware.camera.provider@2.4-service ).

Versi VNDK

Di Android 9, pustaka bersama VNDK memiliki versi:

  • Properti sistem ro.vndk.version ditambahkan secara otomatis ke /vendor/default.prop .
  • Library bersama VNDK diinstal ke /system/lib[64]/vndk-${ro.vndk.version} .
  • Library bersama VNDK-SP diinstal ke /system/lib[64]/vndk-sp-${ro.vndk.version} .
  • File konfigurasi dynamic linker diinstal ke /system/etc/ld.config.${ro.vndk.version}.txt .

Nilai ro.vndk.version dipilih oleh algoritma di bawah ini:

  • Jika BOARD_VNDK_VERSION tidak sama dengan current , gunakan BOARD_VNDK_VERSION .
  • Jika BOARD_VNDK_VERSION sama dengan current :
    • Jika PLATFORM_VERSION_CODENAME adalah REL , gunakan PLATFORM_SDK_VERSION (mis. 28 ).
    • Jika tidak, gunakan PLATFORM_VERSION_CODENAME (misalnya P ).

Meningkatkan perangkat

Jika perangkat Android 8.x menonaktifkan penegakan waktu proses VNDK dengan dibuat tanpa BOARD_VNDK_VERSION , perangkat tersebut dapat menambahkan PRODUCT_USE_VNDK_OVERRIDE := false ke BoardConfig.mk saat meningkatkan ke Android 9.

Jika PRODUCT_USE_VNDK_OVERRIDE false , properti ro.vndk.lite akan otomatis ditambahkan ke /vendor/default.prop dan nilainya akan menjadi true . Akibatnya, dynamic linker akan memuat konfigurasi namespace linker dari /system/etc/ld.config.vndk_lite.txt , yang hanya mengisolasi SP-HAL dan VNDK-SP.

Untuk mengupgrade perangkat Android 7.0 atau yang lebih rendah ke Android 9, tambahkan PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false ke BoardConfig.mk .

Vendor Test Suite (VTS)

Android 9 Vendor Test Suite (VTS) mengamanatkan properti ro.vndk.version kosong. Perangkat yang baru diluncurkan dan perangkat yang ditingkatkan harus menentukan ro.vndk.version . Beberapa kasus pengujian VNDK (misalnya VtsVndkFilesTest dan VtsVndkDependencyTest ) mengandalkan properti ro.vndk.version untuk memuat kumpulan data pustaka VNDK yang sesuai.

Jika properti ro.product.first_api_level lebih besar dari 27, properti ro.vndk.lite tidak boleh ditentukan. VtsTreblePlatformVersionTest akan gagal jika ro.vndk.lite ditentukan di perangkat Android 9 yang baru diluncurkan.

Sejarah dokumen

Bagian ini melacak perubahan pada dokumentasi VNDK.

Android 9 berubah

  • Tambahkan bagian versi VNDK.
  • Tambahkan bagian VTS.
  • Beberapa kategori VNDK telah diganti namanya:
    • LL-NDK-Indirect telah diubah namanya menjadi LL-NDK-Private.
    • VNDK-Indirect telah diubah namanya menjadi VNDK-Private.
    • VNDK-SP-Indirect-Private telah diubah namanya menjadi VNDK-SP-Private.
    • VNDK-SP-Indirect telah dihapus.

Android 8.1 berubah

  • Library SP-NDK telah digabungkan menjadi library LL-NDK.
  • Ganti libui.so dengan libft2.so di bagian namespace RS. Terjadi kesalahan saat menyertakan libui.so .
  • Tambahkan libGLESv3.so dan libandroid_net.so ke libandroid_net.so LL-NDK.
  • Tambahkan libion.so ke pustaka VNDK-SP.
  • Hapus libstdc++.so So dari library LL-NDK. Gunakan libc++.so sebagai gantinya. Beberapa versi toolchain mandiri dapat menambahkan -lstdc++ ke tanda linker default. Untuk menonaktifkan default, tambahkan -nodefaultlibs -lc -lm -ldl ke LDFLAGS .
  • Pindahkan libz.so dari libz.so LL-NDK ke VNDK-SP. Dalam beberapa konfigurasi, libz.so dapat terus menjadi LL-NDK. Namun, seharusnya tidak ada perbedaan yang dapat diamati.