Desain snapshot VNDK

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}.

Gambar 1. Hanya upgrade sistem

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:

Gambar 2. Arsitektur snapshot VNDK

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, dengan 28 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.