Snapshot VNDK dapat digunakan oleh image sistem untuk memberikan ID NDK yang benar dari pustaka ke {i>image<i} vendor bahkan ketika {i>image<i} sistem dan vendor dibangun dari versi Android yang berbeda. Pembuatan snapshot VNDK memerlukan pengambilan Library VNDK sebagai snapshot dan menandainya dengan nomor versi. Tujuan image vendor dapat tertaut dengan versi VNDK tertentu yang menyediakan ABI yang diperlukan untuk modul di image vendor. Namun, dalam versi VNDK yang sama, library VNDK harus ABI-stabil.
Desain snapshot VNDK menyertakan metode untuk membuat pra-build snapshot VNDK dari image sistem saat ini dan menginstal library bawaan tersebut ke partisi sistem versi Android yang lebih baru.
Tentang library VNDK
HIDL-HAL, diperkenalkan dalam Android 8.0, memungkinkan upgrade terpisah untuk partisi sistem dan vendor. VNDK menentukan set library (VNDK-core, VNDK-SP, dan LL-NDK) yang dapat disediakan oleh kode vendor menautkan dan memblokir vendor agar tidak menggunakan library yang tidak ada dalam VNDK atur. Hasilnya, image vendor dapat dibangun dan dijalankan jika VNDK yang tepat pada image sistem akan disediakan ke image vendor.
Inti VNDK
Kumpulan library inti VNDK diinstal di
/system/lib[64]/vndk-${VER}
dan tersedia
hanya untuk proses vendor dengan level API yang sama dengan
${VER}
. Proses sistem mungkin tidak
menggunakan library ini dan harus
sebagai gantinya, gunakan library yang diinstal di /system/lib[64]
. Karena
pembatasan namespace yang ketat untuk setiap proses, library inti VNDK
aman dari pemuatan ganda.
Untuk menyertakan library di VNDK-core, tambahkan kode berikut ke
Android.bp
:
vendor_available: true, vndk: { enabled: true, },
VNDK-SP
Library VNDK-SP diinstal di /system/lib[64]/vndk-sp-${VER}
dan tersedia untuk proses vendor dan proses sistem (melalui SP-HAL
library yang diinstal di partisi vendor). Library VNDK-SP mungkin
muatan ganda.
Untuk menyertakan library di VNDK-SP, tambahkan kode berikut ke Android.bp
:
vendor_available: true, vndk: { enabled: true, support_system_process: true, },
LL-NDK
Library LL-NDK diinstal di /system/lib[64]
. Modul vendor
dapat menggunakan library stub LL-NDK untuk mengakses simbol LL-NDK yang telah dipilih sebelumnya
library. Library LL-NDK harus kompatibel dengan versi lama dan ABI yang stabil untuk
mengaktifkan modul vendor versi lama agar dapat menggunakan library LL-NDK versi baru.
Karena karakteristik ABI-stabil dari LL-NDK, snapshot VNDK melakukan
tidak perlu menyertakan library LL-NDK untuk image vendor lama.
Tentang snapshot VNDK
Android 8.1 menyertakan VNDK library yang dibuat dari kode sumber. Namun, untuk versi terbaru Di Android, 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
sertakan minimal satu snapshot direktori VNDK-core dan VNDK-SP untuk
dalam kode sumber Android. Pada waktu build, snapshot yang diperlukan akan
diinstal ke /system/lib[64]/vndk-${VER}
dan
/system/lib[64]/vndk-sp-${VER}
(direktori yang dapat digunakan oleh
partisi vendor), dengan ${VER}
adalah variabel string yang
merepresentasikan nama versi snapshot VNDK.
Karena library snapshot VNDK mungkin berbeda untuk setiap versi VNDK,
juga menyertakan konfigurasi namespace penaut, yang diinstal sebagai
etc/ld.config.${VER}.txt
,
/etc/llndk.libraries.${VER}.txt
dan
/etc/vndksp.libraries.${VER}.txt
.
Contoh: Mengupgrade sistem dan vendor gambar
Tidak memerlukan snapshot; build tanpa konfigurasi tambahan untuk VNDK snapshot.
Contoh: Upgrade image sistem saja
Harus menyertakan snapshot VNDK dan file konfigurasi namespace penaut untuk
image vendor di image sistem. File konfigurasi namespace penaut
secara otomatis dikonfigurasi untuk mencari
library VNDK di
/system/lib[64]/vndk-${VER}
dan
/system/lib[64]/vndk-sp-${VER}
.
Contoh: Upgrade image sistem, perubahan kecil pada image vendor
Membangun image vendor terhadap snapshot VNDK belum didukung, sehingga Anda harus membangun citra vendor secara terpisah dengan kode sumber aslinya, kemudian mengupgrade 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 Android 8.1 gambar vendor harus disertakan dengan Android 9 image sistem, seperti yang ditunjukkan di bawah ini:
Desain snapshot VNDK menyertakan metode berikut:
- Membuat snapshot untuk VNDK-core dan VNDK-SP
library. Android 9 menyertakan skrip yang
bisa digunakan untuk membuat cuplikan dari build VNDK saat ini. Skrip ini menggabungkan semua
library di
/system/lib[64]/vndk-28
dan/system/lib[64]/vndk-sp-28
yang dibuat dengan sebagai snapshot VNDK, dengan28
adalah versi VNDK Android 9. Snapshot juga menyertakan linker file konfigurasi namespace/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 library VNDK-core dan VNDK-SP bawaan dari
snapshot. Di Android 9, snapshot VNDK memiliki
satu set library inti VNDK bawaan dan satu set library VNDK-SP,
sebagai file konfigurasi namespace penaut. Saat Anda memberikan daftar VNDK
untuk diinstal, selama waktu build, image sistem diinstal
library snapshot VNDK ke
/system/lib[64]/vndk-${VER}
dan direktori/system/lib[64]/vndk-sp-${VER}
dan penaut file konfigurasi namespace untuk snapshot VNDK tersebut Direktori/etc
.
Pembuatan versi VNDK
Setiap rilis Android hanya memiliki satu snapshot VNDK dan versi SDK digunakan sebagai
versi VNDK (yang berarti versi VNDK memiliki angka bilangan bulat, seperti 27
untuk Android 8.1). Versi VNDK telah diperbaiki ketika versi Android telah
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 VNDK vendor
untuk beberapa library dan mengidentifikasi versi snapshot VNDK untuk namespace
konfigurasi Anda.
Membangun library VNDK
Perintah make vndk
mem-build library yang memiliki vndk:
{ enabled: true, … }
, termasuk dependensi dan namespace
file konfigurasi. Jika BOARD_VNDK_VERSION := current
disetel,
library ini dibuat dengan perintah make
.
Karena build ini tidak menginstal library VNDK dari snapshot, library VNDK yang diinstal bukan ABI-stabil. Namun, bila versi Android dirilis, ABI untuk versi VNDK saat ini akan diperbaiki. Pada tahap ini, setiap Kerusakan ABI adalah error build, jadi patch ke versi Android tidak boleh mengubah ABI untuk library VNDK.