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

Vendor Native Development Kit (VNDK)

Vendor Native Development Kit (VNDK) adalah kumpulan library khusus bagi vendor untuk mengimplementasikan HAL mereka. The VNDK kapal di system.img dan dinamis terkait dengan kode vendor pada saat runtime.

Mengapa VNDK?

Android 8.0 dan yang lebih tinggi memungkinkan pembaruan hanya kerangka kerja di mana partisi sistem dapat ditingkatkan ke versi terbaru sementara partisi vendor dibiarkan tidak berubah. 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 hanya kerangka kerja mencakup tantangan berikut:

  • Ketergantungan antara modul kerangka dan modul penjual. Sebelum Android 8.0, modul dari kedua sisi dapat terhubung dengan modul dari sisi lain. Namun, dependensi dari modul vendor memberlakukan batasan yang tidak diinginkan untuk pengembangan modul kerangka kerja.
  • Ekstensi untuk AOSP perpustakaan. Android 8.0 dan yang lebih tinggi 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 pedoman mencegah pecah seperti, lihat VNDK ekstensi .)

Untuk mengatasi tantangan ini, Android 8.0 memperkenalkan beberapa teknik seperti VNDK (diuraikan dalam bagian ini), HIDL , hwbinder, perangkat pohon overlay , dan sepolicy overlay.

Sumber daya VNDK

Bagian ini mencakup sumber daya VNDK berikut:

  • Konsep VNDK (bawah) menjelaskan kerangka kerja bersama perpustakaan, HAL yang sama-proses (SP-HAL), dan terminologi VNDK.
  • VNDK ekstensi mengklasifikasikan khusus vendor berubah menjadi kategori. Misalnya, perpustakaan dengan fungsionalitas yang diperluas di mana modul vendor bergantung harus disalin ke partisi vendor, tetapi perubahan yang tidak kompatibel dengan ABI dilarang.
  • VNDK Membangun Sistem Dukungan menggambarkan konfigurasi sistem membangun dan sintaks definisi modul yang terkait dengan VNDK.
  • The VNDK Definisi Alat membantu source Anda bermigrasi ke Android 8.0 dan lebih tinggi.
  • Linker Namespace memberikan kontrol fine-grained lebih keterkaitan shared library.
  • Direktori, Aturan, dan sepolicy mendefinisikan struktur direktori untuk perangkat yang menjalankan Android 8.0 dan lebih tinggi, aturan VNDK, dan sepolicy terkait.
  • The VNDK Desain presentasi menggambarkan konsep VDNK dasar yang digunakan dalam Android 8.0 dan lebih tinggi.

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. Menstabilkan ABI / API kerangka shared library. 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 kerangka tua shared library. 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:

  • LL-NDK Perpustakaan adalah Kerangka Perpustakaan Bersama yang dikenal stabil. Pengembang mereka berkomitmen untuk menjaga stabilitas API/ABI mereka.
    • LL-NDK termasuk perpustakaan 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 ,
  • Layak VNDK Perpustakaan (VNDK) adalah Kerangka Shared Libraries yang aman untuk disalin dua kali. Kerangka Modul dan vendor Modul dapat menghubungkan dengan salinan mereka 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.
  • Kerangka-Hanya Perpustakaan (FWK-ONLY) adalah kerangka kerja Shared Libraries yang tidak termasuk ke 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.

Proses Sama HAL (SP-HAL)

Sama-Proses HAL (SP-HAL) adalah seperangkat HAL yang telah ditentukan diimplementasikan sebagai vendor Bersama Perpustakaan dan dimuat ke dalam Proses Kerangka. SP-HAL diisolasi oleh namespace penghubung (mengontrol pustaka dan simbol yang terlihat ke pustaka bersama). SP-HAL harus hanya tergantung 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

VNDK-SP perpustakaan menentukan vndk: { support_system_process: true } dalam file Android.bp mereka. Jika vendor_available: false juga ditentukan, maka perpustakaan ini disebut VNDK-SP-Swasta dan mereka terlihat SP-Hals.

Berikut ini adalah kerangka-satunya perpustakaan dengan RS pengecualian (FWK-HANYA-RS):

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

Terminologi VNDK

  • Modul mengacu ke Shared Libraries atau executables.
  • Proses beroperasi tugas sistem melahirkan dari executables.
  • Kerangka -qualified istilah mengacu pada konsep yang berkaitan dengan partisi sistem.
  • Vendor hal -qualified mengacu pada konsep yang berkaitan dengan partisi penjual.

Sebagai contoh:

  • Kerangka executables merujuk ke executable di /system/bin atau /system/xbin .
  • Kerangka Bersama Perpustakaan merujuk ke shared library di bawah /system/lib[64] .
  • Kerangka Modul merujuk pada kerangka Bersama Perpustakaan dan kerangka executables.
  • Proses kerangka adalah proses melahirkan dari kerangka executables (misalnya /system/bin/app_process ).
  • Vendor executables merujuk ke executable di /vendor/bin
  • Vendor Shared Libraries merujuk ke shared library di bawah /vendor/lib[64] .
  • Vendor Modul merujuk pada penjual executables dan penjual Shared Libraries.
  • Vendor Proses adalah proses melahirkan dari penjual executables (misalnya
  • /vendor/bin/android.hardware.camera.provider@2.4-service ).

Versi VNDK

Di Android 9, pustaka bersama VNDK diversi:

  • The ro.vndk.version properti sistem secara otomatis ditambahkan ke /vendor/default.prop .
  • VNDK shared library dipasang untuk /system/lib[64]/vndk-${ro.vndk.version} .
  • VNDK-SP shared library dipasang untuk /system/lib[64]/vndk-sp-${ro.vndk.version} .
  • File konfigurasi linker dinamis 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 , penggunaan BOARD_VNDK_VERSION .
  • Jika BOARD_VNDK_VERSION sama dengan current :
    • Jika PLATFORM_VERSION_CODENAME adalah REL , penggunaan PLATFORM_SDK_VERSION (misalnya 28 ).
    • Jika tidak, gunakan PLATFORM_VERSION_CODENAME (misalnya P ).

Mengupgrade perangkat

Jika perangkat 8.x Android VNDK dinonaktifkan run-time penegak oleh sedang dibangun tanpa BOARD_VNDK_VERSION , mungkin menambahkan PRODUCT_USE_VNDK_OVERRIDE := false ke BoardConfig.mk sementara upgrade ke Android 9.

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

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

Vendor Test Suite (VTS)

Android 9 vendor Test Suite (VTS) mandat non-kosong ro.vndk.version properti. Kedua baru diluncurkan perangkat dan perangkat upgrade harus menentukan ro.vndk.version . Beberapa VNDK uji kasus (misalnya VtsVndkFilesTest dan VtsVndkDependencyTest ) bergantung pada ro.vndk.version properti untuk memuat pencocokan memenuhi syarat VNDK perpustakaan set data.

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

Sejarah dokumen

Bagian ini melacak perubahan pada dokumentasi VNDK.

Perubahan Android 9

  • Tambahkan bagian pembuatan 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 perubahan

  • Pustaka SP-NDK telah digabungkan ke dalam pustaka LL-NDK.
  • Ganti libui.so dengan libft2.so di RS bagian namespace. Itu adalah kesalahan untuk memasukkan libui.so .
  • Menambahkan libGLESv3.so dan libandroid_net.so untuk LL-NDK perpustakaan.
  • Menambahkan libion.so ke perpustakaan VNDK-SP.
  • Hapus libstdc++.so dari LL-NDK perpustakaan. Gunakan libc++.so sebaliknya. Beberapa versi toolchain mandiri dapat menambahkan -lstdc++ untuk bendera standar linker. Untuk menonaktifkan default, tambahkan -nodefaultlibs -lc -lm -ldl ke LDFLAGS .
  • Pindahkan libz.so dari LL-NDK ke perpustakaan VNDK-SP. Dalam beberapa konfigurasi, libz.so dapat terus menjadi LL-NDK. Namun, seharusnya tidak ada perbedaan yang dapat diamati.