Desain snapshot VNDK

Snapshot VNDK dapat digunakan oleh image sistem untuk menyediakan library VNDK yang benar ke image vendor meskipun image sistem dan vendor di-build dari versi Android yang berbeda. Membuat snapshot VNDK memerlukan pengambilan library VNDK sebagai snapshot dan menandainya dengan nomor versi. Image vendor dapat ditautkan dengan versi VNDK tertentu yang menyediakan ABI yang diperlukan untuk modul dalam image vendor. Namun, dalam versi VNDK yang sama, library VNDK harus stabil ABI.

Desain snapshot VNDK mencakup metode untuk membuat prebuild 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, yang diperkenalkan di Android 8.0, memungkinkan upgrade terpisah untuk partisi sistem dan vendor. VNDK menentukan kumpulan library (VNDK-core, VNDK-SP, dan LL-NDK) yang dapat ditautkan dengan kode vendor dan memblokir vendor agar tidak menggunakan library yang tidak ada dalam kumpulan VNDK. Akibatnya, image vendor dapat dibuat dan dijalankan jika set VNDK yang sesuai pada image sistem disediakan ke image vendor.

VNDK-core

Kumpulan library VNDK-core diinstal di /system/lib[64]/vndk-${VER} dan tersedia hanya untuk proses vendor dengan level API yang sama dengan ${VER}. Proses sistem tidak boleh menggunakan library ini dan harus menggunakan library yang diinstal di /system/lib[64]. Karena pembatasan namespace yang ketat untuk setiap proses, library VNDK-core 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 library SP-HAL yang diinstal di partisi vendor). Library VNDK-SP dapat dimuat secara 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 library LL-NDK yang telah dipilih sebelumnya. Library LL-NDK harus kompatibel dengan versi lama dan stabil ABI untuk memungkinkan modul vendor versi lama menggunakan library LL-NDK versi baru. Karena karakteristik LL-NDK yang stabil ABI, snapshot VNDK tidak perlu menyertakan library LL-NDK untuk image vendor lama.

Tentang snapshot VNDK

Android 8.1 menyertakan library VNDK yang di-build 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 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 mewakili nama versi snapshot VNDK.

Karena library snapshot VNDK dapat berbeda untuk setiap versi VNDK, snapshot 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 image sistem dan vendor

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

Contoh: Hanya mengupgrade image sistem

Harus menyertakan snapshot VNDK dan file konfigurasi namespace penaut untuk image vendor dalam image sistem. File konfigurasi namespace penaut dikonfigurasi secara otomatis untuk menelusuri library VNDK di /system/lib[64]/vndk-${VER} dan /system/lib[64]/vndk-sp-${VER}.

Gambar 1. Mengupgrade sistem saja

Contoh: Mengupgrade image sistem, perubahan image vendor minor

Mem-build image vendor terhadap snapshot VNDK belum didukung, sehingga Anda harus mem-build image vendor secara terpisah dengan kode sumber aslinya, lalu mengupgrade image sistem seperti yang dijelaskan dalam contoh sebelumnya.

Arsitektur snapshot VNDK

Agar 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:

Gambar 2. Arsitektur snapshot VNDK

Desain snapshot VNDK mencakup metode berikut:

  • Membuat snapshot untuk library VNDK-core dan VNDK-SP. Android 9 menyertakan skrip yang dapat Anda gunakan untuk membuat snapshot build VNDK saat ini. Skrip ini memaketkan semua library 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 Android 9. Snapshot juga menyertakan file konfigurasi namespace penaut /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 sekumpulan library VNDK-core bawaan dan sekumpulan library VNDK-SP, serta file konfigurasi namespace penaut. Saat Anda memberikan daftar versi snapshot VNDK yang akan diinstal, pada waktu build, image sistem akan menginstal library snapshot VNDK ke /system/lib[64]/vndk-${VER} dan direktori /system/lib[64]/vndk-sp-${VER} serta file konfigurasi namespace penaut untuk snapshot VNDK tersebut ke 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 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 untuk mengidentifikasi versi VNDK vendor untuk beberapa library dan mengidentifikasi versi snapshot VNDK untuk konfigurasi namespace.

Mem-build library VNDK

Perintah make vndk mem-build library yang memiliki vndk: { enabled: true, … }, termasuk dependensi dan file konfigurasi namespace. Jika BOARD_VNDK_VERSION := current ditetapkan, library ini akan di-build dengan perintah make.

Karena build ini tidak menginstal library VNDK dari snapshot, library VNDK yang diinstal tidak stabil ABI. Namun, saat versi Android dirilis, ABI untuk versi VNDK saat ini akan diperbaiki. Pada tahap ini, kerusakan ABI apa pun adalah error build, sehingga patch untuk versi Android tidak boleh mengubah ABI untuk library VNDK.