Snapshot VNDK adalah kumpulan lib VNDK-core dan VNDK-SP untuk rilis Android. Anda hanya dapat memutakhirkan partisi sistem jika system.img menyertakan snapshot VNDK yang sesuai yang dibutuhkan oleh vendor.img .
Snapshot VNDK resmi dibuat secara otomatis di server build Android dan diperiksa ke /prebuilts/vndk dari pohon sumber Android. Untuk tujuan pengembangan, Anda dapat membuat snapshot VNDK secara lokal. Snapshot VNDK didukung untuk varian TARGET_ARCH arm, arm64, x86, dan x86_64.
Membangun snapshot
Server build Android menghasilkan artefak build dan file snapshot VNDK menggunakan parameter build dan perintah build berikut.
Membangun parameter
Nama target build adalah vndk . Konfigurasi target build ditunjukkan di bawah ini.
TARGET_PRODUCT | TARGET_ARCH | TARGET_ARCH_VARIANT |
|---|---|---|
aosp_arm | arm | armv7-a-neon |
aosp_arm64 | arm64 | armv8-a |
aosp_x86 | x86 | x86 |
aosp_x86_64 | x86_64 | x86_64 |
-
TARGET_PRODUCT=aosp_$(TARGET_ARCH) -
TARGET_BUILD_VARIANT=user -
TARGET_ARCHsama dengan lengkungan target Gambar Sistem Generik (GSI) (arm,arm64,x86,x86_64). -
TARGET_ARCH_VARIANT. Untuk snapshot v28 (Android 9) dan yang lebih tinggi, menyertakan konfigurasi populer yang tercantum di atas.
Membangun perintah
Untuk snapshot resmi, Android 9 dan yang lebih tinggi menyertakan target sampel ( vndk ) di vndk.mk yang membuat dan mengeluarkan snapshot VNDK ke $DIST_DIR . File ZIP snapshot menggunakan format android-vndk-$(TARGET_ARCH).zip . Sebagai contoh:
lunch aosp_TARGET_ARCH-usermake -j vndk dist [BOARD_VNDK_VERSION=current]
Server build Android menggunakan skrip build.sh untuk membangun semua varian arch yang didukung dengan perintah berikut.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Snapshot VNDK untuk versi Android dihasilkan dari cabang rilis versi tersebut.
Membangun secara lokal
Selama pengembangan, Anda dapat membuat snapshot VNDK dari pohon sumber lokal dengan perintah berikut.
- Untuk membangun semua lengkungan yang didukung sekaligus, jalankan skrip build berikut (
build.sh).cd $ANDROID_BUILD_TOPdevelopment/vndk/snapshot/build.sh - Untuk membangun satu
TARGET_ARCHtertentu, jalankan perintah berikut.lunch aosp_TARGET_ARCH-userm -j vndk dist
File android-vndk-$(TARGET_ARCH).zip yang sesuai dibuat di bawah $DIST_DIR .
File cuplikan
Cuplikan VNDK menyertakan file berikut.
- Varian vendor dari pustaka bersama VNDK-core dan VNDK-SP.
- Lib bersama LL-NDK tidak diperlukan karena kompatibel ke belakang.
- Untuk target 64 bit,
TARGET_ARCHdanTARGET_2ND_ARCHdibuat dan disertakan.
- Daftar pustaka VNDK-core, VNDK-SP, LL-NDK, dan VNDK-private ada di
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt. - File lisensi.
-
module_paths.txt. Merekam jalur modul untuk semua pustaka VNDK, yang diperlukan untuk memeriksa apakah proyek GPL memiliki sumber yang dirilis di hierarki sumber Android tertentu.
Untuk file ZIP snapshot VNDK yang diberikan, android-vndk-$(TARGET_ARCH).zip , pustaka bawaan VNDK dikelompokkan dalam direktori terpisah bernama arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) menurut bitness ABI. Misalnya, untuk android-vndk-arm64.zip , lib 64-bit ditempatkan di bawah arch-arm64-armv8-a dan lib 32-bit ditempatkan di bawah arch-arm-armv8-a . Contoh di bawah ini menunjukkan struktur direktori untuk file ZIP snapshot arm64 ( TARGET_ARCH=arm64 ) VNDK ( android-vndk-arm64.zip ).

Membangun untuk snapshot vendor
Android 11 mendukung snapshot vendor , yang memungkinkan Anda membuat vendor.img terlepas dari versi Android di pohon sumber. Cuplikan VNDK default berisi file pustaka bersama ( .so ) yang dapat diinstal ke perangkat dan kemudian ditautkan dari biner C++ vendor dalam waktu proses. Untuk membuat snapshot VNDK itu, Anda memerlukan artefak tambahan seperti file header dan flag yang diekspor.
Untuk menghasilkan artefak tersebut (bersama dengan snapshot VNDK) dari pohon sumber lokal, gunakan perintah berikut.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Perintah ini membuat android-vndk-$(TARGET_ARCH).zip di bawah $DIST_DIR . Contoh di bawah ini adalah file ZIP snapshot VNDK arm64 dengan artefak build. File yang dicetak tebal adalah file yang baru ditambahkan ke snapshot VNDK normal (ditunjukkan pada Gambar 1) dan menyertakan file JSON (yang menyimpan cflags dari setiap perpustakaan) dan semua file header yang diekspor.
android-vndk-arm64.zip ├── arch-arm64-armv8-a │ └── shared │ ├── vndk-core -> *.so files, *.json files │ └── vndk-sp -> *.so files, *.json files ├── arch-arm-armv8-a -> (same as arch-arm64-armv8-a) ├── configs -> *.libraries.txt, module_paths.txt, module_names.txt ├── include -> exported header files (*.h, *.hh, etc.) └── NOTICE_FILES -> license txt files
Mengunggah snapshot VNDK
Snapshot VNDK diperiksa di pohon sumber di bawah /prebuilts/vndk/v VER , di mana VER sama dengan versi snapshot VNDK (yang mengikuti versi SDK dari rilis Android yang sesuai). Misalnya, snapshot Android 8.1 VNDK memiliki versi 27.
Menggunakan skrip update.py
Skrip update.py ( /development/vndk/snapshot/update.py ) mengotomatiskan proses penambahan snapshot VNDK bawaan ke pohon sumber. Ini secara otomatis mendeteksi artefak build dan secara tepat mengisi properti terkait di Android.bp yang dihasilkan. Skrip ini melakukan tugas-tugas berikut:
- Di
/prebuilts/vndk/v VER, menggunakanrepo startuntuk membuat cabang Git baru. - Mengambil dan membuka ritsleting artefak build snapshot VNDK.
- Jalankan
gen_buildfiles.pyuntuk membuat file build secara otomatis (Android.bp). - Jalankan
check_gpl_license.pyuntuk memverifikasi pustaka bawaan yang dilisensikan di bawah Lisensi Publik Umum (GPL) memiliki sumber yang dirilis di pohon sumber saat ini. - Menggunakan
git commituntuk melakukan perubahan baru.
Menggunakan snapshot VNDK yang dibuat secara lokal
Anda juga dapat menggunakan snapshot VNDK yang dibuat secara lokal. Saat opsi --local ditentukan, skrip update.py mengambil artefak build snapshot VNDK dari $DIST_DIR lokal (bukan dari server build Android) dan melewati pemeriksaan lisensi GPL dan langkah git commit . Untuk menginstal snapshot VNDK yang dibuat secara lokal, navigasikan ke direktori tujuan dan gunakan skrip update.py .
Sintaksis:
python update.py VER --local
Contoh perintah untuk memperbarui snapshot Android 8.1 VNDK dengan artefak build lokal:
python update.py 27 --local
Contoh struktur direktori dari snapshot VNDK yang dibuat secara lokal:
prebuilts/vndk ├── v30 │ ├── arm64 │ │ ├── arch-arm64-armv8-a -> (prebuilt libs) │ │ ├── arch-arm-armv8-a -> (prebuilt libs) │ │ ├── configs -> (config files) │ │ ├── include -> (exported header files) │ │ └── Android.bp -> (VNDK modules with cflags) │ ├── arm -> (same as above) │ ├── x86_64 -> (same as above) │ ├── x86 -> (same as above) │ ├── common │ │ ├── NOTICE_FILES -> (license files) │ │ └── Android.bp -> (license file modules) │ └── Android.bp -> (*.libraries.30.txt modules) └── (other VNDK versions) -> (same as above)Artefak build lokal ditambahkan secara otomatis jika artefak dibuat dengan
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true .Memasang snapshot VNDK
Citra sistem menginstal pustaka snapshot VNDK pada waktu pembuatan menggunakan informasi di BOARD_VNDK_VERSION , PRODUCT_EXTRA_VNDK_VERSIONS , dan ro.vndk.version . Anda dapat mengontrol snapshot VNDK mana yang diinstal dari direktori snapshot VNDK bawaan (misalnya, /prebuilts/vndk/v29 atau /prebuilts/vndk/v30 ) menggunakan salah satu opsi berikut.
- Opsi 1:
BOARD_VNDK_VERSION. Gunakan modul snapshot untuk membangun modul vendor saat ini dan instal hanya modul snapshot yang diperlukan untuk modul vendor. - Opsi 2:
PRODUCT_EXTRA_VNDK_VERSIONS. Instal modul snapshot VNDK terlepas dari modul vendor saat ini. Ini menginstal snapshot VNDK bawaan yang tercantum diPRODUCT_EXTRA_VNDK_VERSIONStanpa menautkannya ke modul lain mana pun pada waktu pembuatan.
Menyetel BOARD_VNDK_VERSION
BOARD_VNDK_VERSION menunjukkan versi VNDK yang harus dibuat oleh modul vendor saat ini. Jika BOARD_VNDK_VERSION memiliki versi snapshot VNDK yang tersedia di direktori /prebuilts/vndk , snapshot VNDK yang ditunjukkan di BOARD_VNDK_VERSION akan diinstal. Jika snapshot VNDK tidak tersedia di direktori, terjadi kesalahan build.
Mendefinisikan BOARD_VNDK_VERSION juga memungkinkan modul VNDK untuk diinstal. Modul vendor tertaut dengan versi snapshot VNDK yang ditentukan dalam BOARD_VNDK_VERSION pada waktu pembuatan (ini tidak membuat modul VNDK saat ini di sumber sistem). Saat mengunduh hierarki sumber lengkap dari repositori, baik sistem maupun sumber vendor didasarkan pada rilis Android yang sama.
Menyetel PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS mencantumkan versi VNDK tambahan yang akan dipasang. Biasanya cukup memiliki satu snapshot VNDK untuk partisi vendor saat ini. Namun, dalam beberapa kasus, Anda mungkin perlu menyertakan beberapa snapshot dalam satu image sistem. Misalnya, GSI memiliki beberapa snapshot untuk mendukung beberapa versi vendor dengan satu citra sistem. Dengan menyetel PRODUCT_EXTRA_VNDK_VERSIONS , Anda dapat menginstal modul snapshot VNDK selain versi VNDK di BOARD_VNDK_VERSION .
Jika PRODUCT_EXTRA_VNDK_VERSIONS memiliki daftar versi tertentu, sistem pembangunan akan mencari snapshot bawaan dari daftar versi di direktori prebuilts/vndk . Jika sistem build menemukan semua snapshot yang terdaftar, sistem akan menginstal file snapshot tersebut ke setiap VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER . Versi yang hilang menghasilkan kesalahan build.
Modul VNDK tidak terhubung dengan modul vendor pada waktu pembuatan tetapi dapat digunakan saat runtime jika modul vendor di partisi vendor memerlukan salah satu versi VNDK yang diinstal. PRODUCT_EXTRA_VNDK_VERSIONS hanya valid jika BOARD_VNDK_VERSION ditentukan.
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION mendefinisikan versi VNDK untuk modul VNDK saat ini di sumber sistem. Nilai diatur secara otomatis:
- Sebelum dirilis,
PLATFORM_VNDK_VERSIONdisetel sebagaiPLATFORM_VERSION_CODENAME. - Saat dirilis,
PLATFORM_SDK_VERSIONdisalin kePLATFORM_VNDK_VERSION.
Setelah versi Android dirilis, pustaka VNDK saat ini diinstal ke VNDK APEX ( /system/apex/com.android.vndk.v VER ), di mana VER adalah versi yang disimpan di PLATFORM_VNDK_VERSION .
Ketika BOARD_VNDK_VERSION disetel ke current , PLATFORM_VNDK_VERSION disimpan di ro.vndk.version , jika tidak BOARD_VNDK_VERSION disimpan di ro.vndk.version . PLATFORM_VNDK_VERSION disetel ke versi SDK saat Android dirilis; sebelum rilis, nama kode Android alfanumerik digunakan untuk PLATFORM_VNDK_VERSION .
Ringkasan pengaturan versi VNDK
Tabel di bawah ini merangkum pengaturan versi VNDK.
| Penjual Membangun | Papan Versi: kapan | SDK Melepaskan | Platform Versi: kapan | Versi: kapan Properti | Instal Direktori |
|---|---|---|---|---|---|
| Modul VNDK saat ini | current | Sebelum | CODE_NAME | CODE_NAME | /system/apex/com.android.vndk.v CODE_NAME |
| Setelah | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
| Modul snapshot bawaan | VNDK_VERuntuk snapshot | Sebelum atau sesudah | CODE_NAMEatau SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- Versi Papan (
BOARD_VNDK_VERSION). Versi VNDK yang harus dibuat oleh modul vendor. Setel kecurrentjika modul vendor dapat terhubung dengan modul sistem saat ini. - Versi Platform (
PLATFORM_VNDK_VERSION). Versi VNDK yang sedang dibangun oleh modul sistem saat ini. Dibangun hanya ketikaBOARD_VNDK_VERSIONsama dengan arus. - Properti Versi (
ro.vndk.version). Properti yang menentukan versi VNDK yang harus dijalankan oleh binari dan lib di vendor.img. Disimpan divendor.imgdi/vendor/default.prop.