Desain Cuplikan VNDK

Snapshot VNDK dapat digunakan oleh image sistem untuk menyediakan pustaka VNDK yang benar ke image vendor meskipun image sistem dan vendor dibuat dari versi Android yang berbeda. Membuat snapshot VNDK memerlukan pengambilan pustaka VNDK sebagai snapshot dan menandainya dengan nomor versi. Citra vendor dapat tertaut dengan versi VNDK tertentu yang menyediakan ABI yang diperlukan untuk modul dalam citra vendor. Namun, dalam versi VNDK yang sama, pustaka VNDK harus stabil dengan ABI .

Desain snapshot VNDK mencakup metode untuk menghasilkan snapshot VNDK yang sudah dibuat sebelumnya dari image sistem saat ini dan menginstal lib yang sudah dibuat sebelumnya tersebut ke partisi sistem versi Android yang lebih baru.

Tentang perpustakaan VNDK

HIDL-HALs , yang diperkenalkan di Android 8.0, memungkinkan upgrade terpisah untuk partisi sistem dan vendor. VNDK mendefinisikan kumpulan pustaka (VNDK-core, VNDK-SP, dan LL-NDK) yang dapat dihubungkan dengan kode vendor dan memblokir vendor agar tidak menggunakan pustaka yang tidak ada dalam kumpulan VNDK. Hasilnya, citra vendor dapat dibuat dan dijalankan jika kumpulan VNDK yang tepat pada citra sistem disediakan untuk citra vendor.

Inti VNDK

Kumpulan pustaka inti VNDK dipasang di /system/lib[64]/vndk-${VER} dan hanya tersedia untuk proses vendor dengan level API sama dengan ${VER} . Proses sistem tidak boleh menggunakan pustaka ini dan harus menggunakan pustaka yang diinstal di /system/lib[64] . Karena pembatasan namespace yang ketat untuk setiap proses, pustaka inti VNDK aman dari pemuatan ganda.

Untuk menyertakan perpustakaan di VNDK-core, tambahkan yang berikut ke Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

Pustaka VNDK-SP dipasang di /system/lib[64]/vndk-sp-${VER} dan tersedia untuk proses vendor dan proses sistem (melalui pustaka SP-HAL yang dipasang di partisi vendor). Pustaka VNDK-SP mungkin memiliki muatan ganda.

Untuk menyertakan perpustakaan di VNDK-SP, tambahkan yang berikut ke Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

Pustaka LL-NDK dipasang di /system/lib[64] . Modul vendor dapat menggunakan pustaka rintisan LL-NDK untuk mengakses simbol pustaka LL-NDK yang telah dipilih sebelumnya. Pustaka LL-NDK harus kompatibel dengan versi sebelumnya dan stabil ABI agar modul vendor versi lama dapat menggunakan pustaka LL-NDK versi baru. Karena karakteristik LL-NDK yang stabil ABI, snapshot VNDK tidak perlu menyertakan pustaka LL-NDK untuk gambar vendor lama.

Tentang snapshot VNDK

Android 8.1 menyertakan pustaka VNDK yang dibuat dari kode sumber . Namun, untuk versi Android yang lebih baru, setiap versi VNDK harus diambil sebagai snapshot dan disediakan sebagai pra-build untuk memungkinkan penautan ke image vendor yang lebih lama.

Mulai Android 9, versi baru Android akan menyertakan setidaknya satu snapshot direktori VNDK-core dan VNDK-SP untuk versi lama dalam kode sumber Android. Pada waktu pembangunan, snapshot yang diperlukan akan diinstal ke /system/lib[64]/vndk-${VER} dan /system/lib[64]/vndk-sp-${VER} (direktori yang dapat digunakan oleh vendor partisi), dengan ${VER} adalah variabel string yang mewakili nama versi snapshot VNDK.

Karena pustaka snapshot VNDK mungkin berbeda untuk setiap versi VNDK, snapshot VNDK juga menyertakan konfigurasi namespace linker, yang diinstal sebagai etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt , dan /etc/vndksp.libraries.${VER}.txt .

Contoh: Meningkatkan image sistem dan vendor

Tidak diperlukan cuplikan; dibangun tanpa konfigurasi tambahan untuk snapshot VNDK.

Contoh: Hanya mengupgrade image sistem

Harus menyertakan file konfigurasi snapshot VNDK dan namespace linker untuk image vendor di image sistem. File konfigurasi namespace linker dikonfigurasikan secara otomatis untuk mencari pustaka VNDK di /system/lib[64]/vndk-${VER} dan /system/lib[64]/vndk-sp-${VER} .

Gambar 1. Hanya meng-upgrade sistem

Contoh: Meningkatkan image sistem, sedikit perubahan image vendor

Membangun citra vendor terhadap snapshot VNDK belum didukung, jadi Anda harus membuat citra vendor secara terpisah dengan kode sumber aslinya, lalu memutakhirkan citra sistem seperti yang dijelaskan dalam contoh sebelumnya.

Arsitektur snapshot VNDK

Untuk membuat image sistem Android 9 kompatibel dengan image vendor Android 8.1, snapshot VNDK yang cocok dengan image vendor Android 8.1 harus disediakan dengan image sistem Android 9, seperti yang ditunjukkan di bawah ini:

Gambar 2. Arsitektur snapshot VNDK

Desain snapshot VNDK mencakup metode berikut:

  • Menghasilkan snapshot untuk pustaka VNDK-core dan VNDK-SP . Android 9 menyertakan skrip yang dapat Anda gunakan untuk membuat cuplikan build VNDK saat ini. Skrip ini menggabungkan semua perpustakaan di /system/lib[64]/vndk-28 dan /system/lib[64]/vndk-sp-28 yang dibuat dengan sumber saat ini sebagai snapshot VNDK, dengan 28 adalah versi VNDK dari Android 9. Snapshot ini juga menyertakan file konfigurasi namespace linker /etc/ld.config.28.txt , /etc/llndk.libraries.28.txt , dan /etc/vndksp.libraries.28.txt . Snapshot yang dihasilkan akan digunakan dengan versi Android yang lebih baru (lebih tinggi dari Android 9).
  • Menginstal pustaka VNDK-core dan VNDK-SP bawaan dari snapshot . Di Android 9, snapshot VNDK memiliki sekumpulan pustaka inti VNDK bawaan dan sekumpulan pustaka VNDK-SP, serta file konfigurasi namespace linker. Saat Anda memberikan daftar versi snapshot VNDK yang akan diinstal, pada waktu build, citra sistem akan menginstal pustaka snapshot VNDK ke /system/lib[64]/vndk-${VER} dan /system/lib[64]/vndk-sp-${VER} direktori /system/lib[64]/vndk-sp-${VER} dan file konfigurasi namespace linker untuk snapshot VNDK tersebut ke direktori /etc .

versi VNDK

Setiap rilis Android hanya memiliki satu snapshot VNDK dan versi SDK digunakan sebagai versi VNDK (artinya versi VNDK memiliki bilangan bulat, misalnya 27 untuk Android 8.1). Versi VNDK diperbaiki ketika versi Android dirilis. Versi VNDK yang digunakan oleh partisi vendor disimpan secara otomatis di properti ro.vndk.version , yang dapat dibaca saat runtime. Versi ini kemudian digunakan dalam mengidentifikasi versi vendor VNDK untuk beberapa perpustakaan dan mengidentifikasi versi snapshot VNDK untuk konfigurasi namespace.

Membangun perpustakaan VNDK

Perintah make vndk membangun perpustakaan yang memiliki vndk: { enabled: true, … } , termasuk dependensi dan file konfigurasi namespace. Jika BOARD_VNDK_VERSION := current diatur, perpustakaan ini dibangun dengan perintah make .

Karena build ini tidak menginstal pustaka VNDK dari snapshot, pustaka VNDK yang diinstal tidak stabil pada ABI. Namun, ketika versi Android dirilis, ABI untuk versi VNDK saat ini telah diperbaiki. Pada titik ini, kerusakan ABI apa pun merupakan kesalahan build, jadi patch ke versi Android tidak boleh mengubah pustaka ABI untuk VNDK.