Desain Cuplikan VNDK

Snapshot VNDK dapat digunakan oleh citra sistem untuk menyediakan pustaka VNDK yang benar ke citra vendor meskipun citra sistem dan vendor dibuat dari versi Android yang berbeda. Membuat snapshot VNDK memerlukan pengambilan library VNDK sebagai snapshot dan menandainya dengan nomor versi. Gambar vendor dapat ditautkan dengan versi VNDK tertentu yang menyediakan ABI yang diperlukan untuk modul dalam gambar vendor. Namun, dalam versi VNDK yang sama, pustaka VNDK harus ABI-stable .

Desain snapshot VNDK mencakup metode untuk menghasilkan pra-pembuatan snapshot VNDK dari citra sistem saat ini dan menginstal lib pra-bangun tersebut ke partisi sistem dari versi Android yang lebih baru.

Tentang perpustakaan VNDK

HIDL-HAL , yang diperkenalkan di Android 8.0, memungkinkan pemutakhiran terpisah untuk sistem dan partisi vendor. VNDK mendefinisikan kumpulan pustaka (VNDK-core, VNDK-SP dan LL-NDK) yang dapat ditautkan oleh kode vendor dan memblokir vendor agar tidak menggunakan pustaka yang tidak ada dalam kumpulan VNDK. Akibatnya, citra vendor dapat dibangun dan dijalankan jika set VNDK yang tepat pada citra sistem disediakan untuk citra vendor.

VNDK-inti

Kumpulan pustaka inti VNDK dipasang di /system/lib[64]/vndk-${VER} dan hanya tersedia untuk proses vendor dengan level API yang sama dengan ${VER} . Proses sistem tidak boleh menggunakan pustaka ini dan sebaliknya 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 berikut ini 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 memuat ganda.

Untuk menyertakan perpustakaan di VNDK-SP, tambahkan berikut ini 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 stub LL-NDK untuk mengakses simbol pustaka LL-NDK yang telah dipilih sebelumnya. Library LL-NDK harus kompatibel ke belakang dan ABI-stabil untuk mengaktifkan versi lama modul vendor untuk menggunakan versi baru dari library LL-NDK. Karena karakteristik LL-NDK yang stabil dengan ABI, snapshot VNDK tidak perlu menyertakan library LL-NDK untuk image vendor lama.

Tentang cuplikan 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-pembuatan untuk mengaktifkan penautan ke gambar vendor yang lebih lama.

Mulai Android 9, versi baru Android akan menyertakan setidaknya satu cuplikan direktori VNDK-core dan VNDK-SP untuk versi lama dalam kode sumber Android. Pada waktu pembuatan, 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), di mana ${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 penaut, diinstal sebagai etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt , dan /etc/vndksp.libraries.${VER}.txt .

Contoh: Meningkatkan sistem dan gambar vendor

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

Contoh: Hanya meng-upgrade citra sistem

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

Gambar 1. Hanya mengupgrade sistem

Contoh: Meningkatkan citra sistem, perubahan citra vendor kecil

Pembuatan image vendor terhadap snapshot VNDK belum didukung, jadi Anda harus membuat image vendor secara terpisah dengan kode sumber aslinya, lalu memutakhirkan image 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 disertakan dengan image sistem Android 9, seperti yang ditunjukkan di bawah ini:

Gambar 2. Arsitektur snapshot VNDK

Desain snapshot VNDK mencakup metode berikut:

  • Membuat snapshot untuk pustaka VNDK-core dan VNDK-SP . Android 9 menyertakan skrip yang dapat Anda gunakan untuk membuat snapshot dari build VNDK saat ini. Skrip ini menggabungkan semua pustaka di /system/lib[64]/vndk-28 dan /system/lib[64]/vndk-sp-28 yang dibuat dengan sumber saat ini sebagai snapshot VNDK, di mana 28 adalah versi VNDK dari Android 9. Snapshot 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 pra-bangun dari snapshot . Di Android 9, snapshot VNDK memiliki kumpulan pustaka inti VNDK yang dibuat sebelumnya dan kumpulan pustaka VNDK-SP, serta file konfigurasi namespace penaut. Saat Anda memberikan daftar versi snapshot VNDK yang akan diinstal, pada waktu build, image sistem menginstal library snapshot VNDK ke /system/lib[64]/vndk-${VER} dan /system/lib[64]/vndk-sp-${VER} dan file konfigurasi namespace penaut untuk snapshot VNDK tersebut ke direktori /etc .

Versi VNDK

Setiap rilis Android hanya memiliki satu snapshot VNDK dan versi SDK digunakan sebagai versi VNDK (yang berarti versi VNDK memiliki nomor integer, seperti 27 untuk Android 8.1). Versi VNDK diperbaiki saat 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 pustaka 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 disetel, pustaka ini dibuat dengan perintah make .

Karena build ini tidak menginstal library VNDK dari snapshot, library VNDK yang diinstal tidak stabil terhadap ABI. Namun, saat versi Android dirilis, ABI untuk versi VNDK saat ini diperbaiki. Pada titik ini, setiap kerusakan ABI adalah kesalahan build, jadi patch ke versi Android tidak boleh mengubah ABI untuk library VNDK.