Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Ikhtisar Vendor Native Development Kit (VNDK)

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Vendor Native Development Kit (VNDK) adalah kumpulan pustaka yang digunakan oleh pustaka atau binari lain, di vendor atau partisi produk, saat runtime untuk dlopen.

Mengapa VNDK?

AOSP memungkinkan pembaruan hanya kerangka kerja di mana partisi sistem dapat ditingkatkan ke versi kerangka kerja terbaru sementara partisi vendor dibiarkan tidak berubah. Meskipun dibangun pada waktu yang berbeda, binari di setiap partisi harus dapat bekerja satu sama lain.

Pembaruan hanya kerangka kerja mencakup tantangan berikut:

  • Ketergantungan antara modul kerangka dan modul vendor . Sebelum Android 8.0, modul di vendor dan partisi sistem dapat saling terhubung. Namun, dependensi dari modul vendor memberlakukan batasan yang tidak diinginkan untuk pengembangan modul kerangka kerja.
  • Ekstensi ke perpustakaan AOSP . Android mengharuskan semua perangkat Android untuk lulus CTS saat partisi sistem diganti dengan Generic System Image (GSI) standar. Namun, karena vendor memperluas pustaka AOSP untuk meningkatkan kinerja atau menambahkan fungsionalitas tambahan untuk implementasi HIDL mereka, mem-flash partisi sistem dengan GSI standar dapat merusak implementasi HIDL vendor. Untuk panduan tentang pencegahan kerusakan tersebut, lihat ekstensi VNDK .

Untuk mengatasi tantangan ini, Android berisi beberapa fitur seperti VNDK (dijelaskan di bagian ini), HIDL , hwbinder, overlay pohon perangkat , dan overlay sepolicy.

Istilah khusus VNDK

Dokumen terkait VNDK menggunakan terminologi berikut:
  • Modul merujuk ke pustaka bersama atau yang dapat dieksekusi. Modul membuat dependensi waktu build.
  • Proses adalah tugas sistem operasi yang dihasilkan dari executable. Proses membuat dependensi run-time.
  • Istilah yang memenuhi syarat kerangka kerja terkait dengan partisi system :
    • Kerangka yang dapat dieksekusi merujuk pada yang dapat dieksekusi di /system/bin atau /system/xbin .
    • Pustaka bersama kerangka kerja merujuk ke pustaka bersama di bawah /system/lib[64] .
    • Modul kerangka mengacu pada pustaka bersama kerangka kerja dan kerangka kerja yang dapat dieksekusi.
    • Proses kerangka kerja adalah proses yang muncul dari kerangka kerja yang dapat dieksekusi, seperti /system/bin/app_process .
  • Persyaratan yang memenuhi syarat vendor terkait dengan partisi vendor :
    • Eksekusi vendor merujuk ke executable di /vendor/bin
    • Pustaka bersama vendor merujuk ke pustaka bersama di bawah /vendor/lib[64] .
    • Modul vendor merujuk pada executable vendor dan pustaka bersama vendor.
    • Proses vendor adalah proses yang dihasilkan dari Vendor Executables, seperti /vendor/bin/android.hardware.camera.provider@2.4-service .

Konsep VNDK

Di Android 8.0 dan dunia yang lebih tinggi yang ideal, proses kerangka kerja tidak memuat pustaka bersama vendor, semua proses vendor hanya memuat pustaka bersama vendor (dan sebagian dari 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 (walaupun 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 kritis waktu-tanggapan harus diperlakukan secara berbeda.

Bagian berikut merinci bagaimana VNDK menangani pustaka bersama kerangka kerja untuk vendor dan Same-Process HAL (SP-HAL).

Pustaka bersama kerangka kerja 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 pustaka bersama kerangka kerja . 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 tinggi dan tidak realistis untuk menstabilkan semua ABI/API yang diekspor oleh setiap pustaka bersama kerangka kerja.
  2. Salin pustaka bersama kerangka kerja lama . Hadir dengan pembatasan kuat terhadap saluran samping, yang didefinisikan sebagai semua mekanisme untuk berkomunikasi di antara modul kerangka kerja dan modul vendor, termasuk (namun 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 juga dapat menyebabkan masalah; misalnya, jika objek yang dibuat oleh pustaka baru diteruskan ke fungsi dari pustaka lama, kesalahan mungkin terjadi karena pustaka ini dapat menafsirkan objek secara berbeda.

Pendekatan yang berbeda digunakan tergantung pada karakteristik perpustakaan bersama. Akibatnya, pustaka bersama kerangka kerja diklasifikasikan ke dalam tiga subkategori:

  • Library LL-NDK adalah Framework Shared Library yang dikenal stabil. Pengembang mereka berkomitmen untuk menjaga stabilitas API/ABI mereka.
    • LL-NDK menyertakan 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 ,
  • Pustaka VNDK yang Memenuhi Syarat (VNDK) adalah Pustaka Bersama Framework yang aman untuk disalin dua kali. Modul Kerangka dan Modul Vendor dapat ditautkan dengan salinannya sendiri. Pustaka bersama kerangka kerja dapat menjadi pustaka VNDK yang memenuhi syarat hanya jika memenuhi kriteria berikut:
    • Itu tidak mengirim/menerima IPC ke/dari kerangka kerja.
    • 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.
  • Framework-Only Libraries (FWK-ONLY) adalah Framework Shared Library yang tidak termasuk dalam kategori yang disebutkan di atas. Perpustakaan ini:
    • Dianggap sebagai detail implementasi internal kerangka kerja.
    • Tidak boleh diakses oleh modul vendor.
    • Memiliki ABI/API yang tidak stabil dan tidak ada jaminan kompatibilitas API/ABI.
    • Tidak disalin.

HAL Proses Sama (SP-HAL)

Same-Process HAL ( SP-HAL ) adalah seperangkat HAL yang telah ditentukan yang diimplementasikan sebagai Pustaka Bersama Vendor dan dimuat ke dalam Proses Kerangka . SP-HAL diisolasi oleh namespace penghubung (mengontrol pustaka dan simbol yang terlihat ke pustaka bersama). SP-HAL harus bergantung hanya pada LL-NDK dan VNDK-SP .

VNDK-SP adalah subset library VNDK yang telah ditentukan sebelumnya. Pustaka VNDK-SP ditinjau dengan cermat untuk memastikan pemuatan ganda pustaka VNDK-SP ke dalam proses kerangka kerja tidak menyebabkan masalah. Baik SP-HAL dan VNDK-SP ditentukan oleh Google.

Pustaka berikut adalah SP-HAL yang disetujui:

  • 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

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

Berikut ini adalah library framework-only dengan pengecualian RS (FWK-ONLY-RS) :

  • libft2.so (Skrip Render)
  • libmediandk.so (Skrip Render)

Versi VNDK

Pustaka bersama VNDK berversi:

  • Properti sistem ro.vndk.version secara otomatis ditambahkan ke /vendor/default.prop .
  • Pustaka bersama VNDK dan VNDK-SP dipasang sebagai puncak VNDK com.android.vndk.v${ro.vndk.version} dan di-mount ke /apex/com.android.vndk.v${ro.vndk.version} .

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 (mis. P ).

Vendor Test Suite (VTS)

Android Vendor Test Suite (VTS) mengamanatkan properti ro.vndk.version yang tidak kosong. Perangkat yang baru diluncurkan dan perangkat yang ditingkatkan versinya harus mendefinisikan ro.vndk.version . Beberapa kasus pengujian VNDK (misalnya VtsVndkFilesTest dan VtsVndkDependencyTest ) mengandalkan properti ro.vndk.version untuk memuat kumpulan data pustaka VNDK yang memenuhi syarat yang cocok.