Snapshot VNDK adalah kumpulan library VNDK-core dan VNDK-SP untuk rilis Android.
Anda hanya dapat mengupgrade partisi sistem jika system.img
menyertakan snapshot VNDK yang sesuai yang diperlukan oleh
vendor.img.
Snapshot VNDK resmi dibuat secara otomatis di server build Android
dan diperiksa ke /prebuilts/vndk dari hierarki sumber Android. Untuk
tujuan pengembangan, Anda dapat mem-build snapshot VNDK secara lokal. Snapshot VNDK
didukung untuk ragam TARGET_ARCH arm, arm64, x86, dan x86_64.
Membuat snapshot
Server build Android menghasilkan artefak build dan file snapshot VNDK menggunakan parameter build dan perintah build berikut.
Parameter build
Nama target build adalah vndk. Konfigurasi target build
ditampilkan di bawah.
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=userTARGET_ARCHsama dengan target arch Generic System Image (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.
Perintah build
Untuk snapshot resmi, Android 9 dan yang lebih tinggi
menyertakan target sampel (vndk) di
vndk.mk yang mem-build dan menghasilkan snapshot
VNDK ke $DIST_DIR. File ZIP snapshot menggunakan format
android-vndk-$(TARGET_ARCH).zip.
Contoh:
lunch aosp_TARGET_ARCH-usermake -j vndk dist [BOARD_VNDK_VERSION=current]
Server build Android menggunakan
skrip build.sh untuk mem-build semua ragam
arsitektur yang didukung dengan perintah berikut.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Snapshot VNDK untuk versi Android dibuat dari cabang rilis versi tersebut.
Mem-build secara lokal
Selama pengembangan, Anda dapat mem-build snapshot VNDK dari hierarki sumber lokal dengan perintah berikut.
- Untuk mem-build semua arsitektur yang didukung sekaligus, jalankan skrip build berikut
(
build.sh).cd $ANDROID_BUILD_TOPdevelopment/vndk/snapshot/build.sh - Untuk mem-build satu
TARGET_ARCHtertentu, jalankan perintah berikut.lunch aosp_TARGET_ARCH-userm -j vndk dist
File android-vndk-$(TARGET_ARCH).zip yang sesuai dibuat
di bagian $DIST_DIR.
File snapshot
Snapshot VNDK menyertakan file berikut.
- Varian vendor library bersama VNDK-core dan VNDK-SP.
- Library bersama LL-NDK tidak diperlukan karena kompatibel dengan versi sebelumnya.
- Untuk target 64 bit, library
TARGET_ARCHdanTARGET_2ND_ARCHdibuat dan disertakan.
- Daftar library VNDK-core, VNDK-SP, LL-NDK, dan VNDK-private ada di
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt. - File lisensi.
module_paths.txt. Mencatat jalur modul untuk semua library VNDK, yang diperlukan untuk memeriksa apakah project GPL memiliki sumber yang dirilis dalam hierarki sumber Android tertentu.
Untuk file ZIP snapshot VNDK tertentu,
android-vndk-$(TARGET_ARCH).zip, library bawaan VNDK
dikelompokkan dalam direktori terpisah yang bernama
arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) sesuai dengan bit
ABI. Misalnya, untuk android-vndk-arm64.zip, library 64-bit
ditempatkan di bagian arch-arm64-armv8-a dan library 32-bit
ditempatkan di bagian arch-arm-armv8-a. Contoh di bawah menunjukkan
struktur direktori untuk file ZIP snapshot VNDK
arm64 (TARGET_ARCH=arm64) (android-vndk-arm64.zip).
Mem-build untuk snapshot vendor
Android 11 mendukung
snapshot
vendor, yang memungkinkan Anda mem-build vendor.img, apa pun
versi Android di hierarki sumber. Snapshot VNDK default berisi
file library bersama (.so) yang dapat diinstal ke perangkat, lalu
ditautkan dari biner C++ vendor dalam runtime. Untuk mem-build dengan
snapshot VNDK tersebut, Anda memerlukan artefak tambahan seperti file header dan
flag yang diekspor.
Untuk membuat artefak tersebut (beserta snapshot VNDK) dari hierarki sumber lokal, gunakan perintah berikut.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Perintah ini akan membuat file android-vndk-$(TARGET_ARCH).zip di
$DIST_DIR. Contoh di bawah adalah file ZIP snapshot VNDK arm64
dengan artefak build. File yang dicetak tebal adalah file yang baru ditambahkan ke snapshot VNDK
normal (ditampilkan pada Gambar 1) dan menyertakan file JSON (yang menyimpan
cflags dari setiap library) 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
Mengupload snapshot VNDK
Snapshot VNDK diperiksa di hierarki sumber di
/prebuilts/vndk/vVER, dengan
VER sama dengan versi snapshot VNDK
(yang mengikuti versi SDK rilis Android yang sesuai). Misalnya, snapshot VNDK Android 8.1 memiliki versi 27.
Menggunakan skrip update.py
Skrip update.py
(/development/vndk/snapshot/update.py) mengotomatiskan proses
menambahkan snapshot VNDK bawaan ke hierarki sumber. Alat ini otomatis mendeteksi
artefak build dan mengisi properti terkait dengan tepat di
Android.bp yang dihasilkan. Skrip ini melakukan tugas-tugas berikut:
- Di
/prebuilts/vndk/vVER, menggunakanrepo startuntuk membuat cabang Git baru. - Mengambil dan mengekstrak artefak build snapshot VNDK.
- Menjalankan
gen_buildfiles.pyuntuk membuat file build secara otomatis (Android.bp). - Menjalankan
check_gpl_license.pyuntuk memverifikasi library bawaan yang dilisensikan berdasarkan General Public License (GPL) memiliki sumber yang dirilis di hierarki sumber saat ini. - Menggunakan
git commituntuk melakukan perubahan baru.
Menggunakan snapshot VNDK yang di-build secara lokal
Anda juga dapat menggunakan snapshot VNDK yang di-build secara lokal. Saat opsi --local
ditentukan, skrip update.py akan mengambil artefak build snapshot
VNDK dari direktori lokal yang ditentukan (bukan server build
Android) yang memiliki file android-vndk-$(TARGET_ARCH).zip
yang dihasilkan dari development/vndk/snapshot/build.sh. Dengan
opsi --local, skrip update.py akan melewati pemeriksaan
lisensi GPL dan langkah git commit.
Sintaksis:
python update.py VER --local local_path
Contoh perintah untuk mengupdate snapshot VNDK Android 8.1 dengan artefak build lokal di /path/to/local/dir:
python update.py 27 --local /path/to/local/dir
Contoh struktur direktori snapshot VNDK yang di-build 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)
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true.
Menginstal snapshot VNDK
Image sistem menginstal library snapshot VNDK pada waktu build 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 mem-build modul vendor saat ini dan hanya instal modul snapshot yang diperlukan untuk modul vendor. - Opsi 2:
PRODUCT_EXTRA_VNDK_VERSIONS. Instal modul snapshot VNDK, terlepas dari modul vendor saat ini. Tindakan ini akan menginstal snapshot VNDK bawaan yang tercantum diPRODUCT_EXTRA_VNDK_VERSIONStanpa menautkannya ke modul lain pada waktu build.
Menetapkan BOARD_VNDK_VERSION
BOARD_VNDK_VERSION menampilkan versi VNDK yang diperlukan untuk membuat 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, error build akan terjadi.
Menentukan BOARD_VNDK_VERSION juga memungkinkan modul VNDK
diinstal. Modul vendor ditautkan dengan versi snapshot VNDK yang ditentukan di
BOARD_VNDK_VERSION pada waktu build (tindakan ini tidak mem-build modul
VNDK saat ini di sumber sistem). Saat mendownload hierarki sumber lengkap dari
repositori, sumber sistem dan vendor didasarkan pada rilis Android
yang sama.
Menetapkan PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS mencantumkan versi VNDK tambahan yang akan
diinstal. Biasanya, satu snapshot VNDK untuk
partisi vendor saat ini sudah cukup. 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 image sistem. Dengan menetapkan
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 build akan mencari snapshot bawaan dari daftar versi di
direktori prebuilts/vndk. Jika sistem build menemukan semua snapshot
yang tercantum, sistem akan menginstal file snapshot tersebut ke setiap VNDK APEX
(out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER.
Versi yang tidak ada akan menghasilkan error build.
Modul VNDK tidak ditautkan dengan modul vendor pada waktu build, 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 menentukan versi VNDK untuk modul VNDK
saat ini di sumber sistem. Nilai ditetapkan secara otomatis:
- Sebelum rilis,
PLATFORM_VNDK_VERSIONditetapkan sebagaiPLATFORM_VERSION_CODENAME. - Saat dirilis,
PLATFORM_SDK_VERSIONdisalin kePLATFORM_VNDK_VERSION.
Setelah versi Android dirilis, library VNDK saat ini
diinstal ke VNDK APEX
(/system/apex/com.android.vndk.vVER), dengan
VER adalah versi yang disimpan di
PLATFORM_VNDK_VERSION.
Jika BOARD_VNDK_VERSION ditetapkan ke current,
PLATFORM_VNDK_VERSION akan disimpan di ro.vndk.version,
jika tidak, BOARD_VNDK_VERSION akan disimpan di
ro.vndk.version. PLATFORM_VNDK_VERSION ditetapkan ke
versi SDK saat Android dirilis; sebelum rilis, nama kode
Android alfanumerik digunakan untuk PLATFORM_VNDK_VERSION.
Ringkasan setelan versi VNDK
Tabel ini meringkas setelan versi VNDK.
| Vendor Build |
Board Version |
Rilis SDK |
Versi Platform |
Versi Properti |
Menginstal Direktori |
|---|---|---|---|---|---|
| Modul VNDK saat ini | current |
Sebelum | CODE_NAME |
CODE_NAME |
/system/apex/com.android.vndk.vCODE_NAME |
| Sesudah | SDK_VER |
SDK_VER |
/system/apex/com.android.vndk.vSDK_VER |
||
| Modul snapshot bawaan | VNDK_VERuntuk snapshot |
Sebelum atau Setelah | CODE_NAMEatau SDK_VER |
VNDK_VER |
/system_ext/apex/com.android.vndk.vVNDK_VER |
- Board Version (
BOARD_VNDK_VERSION). Versi VNDK yang diperlukan modul vendor untuk mem-build. Tetapkan kecurrentjika modul vendor dapat ditautkan dengan modul sistem saat ini. - Versi Platform (
PLATFORM_VNDK_VERSION). Versi VNDK yang di-build oleh modul sistem saat ini. Di-build hanya jikaBOARD_VNDK_VERSIONsama dengan saat ini. - Version Property (
ro.vndk.version). Properti yang menentukan versi VNDK yang diperlukan biner dan library di vendor.img untuk dijalankan. Disimpan divendor.imgdi/vendor/default.prop.