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=user
TARGET_ARCH
sama 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-user
make -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_TOP
development/vndk/snapshot/build.sh
- Untuk mem-build satu
TARGET_ARCH
tertentu, jalankan perintah berikut.lunch aosp_TARGET_ARCH-user
m -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_ARCH
danTARGET_2ND_ARCH
dibuat 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 start
untuk membuat cabang Git baru. - Mengambil dan mengekstrak artefak build snapshot VNDK.
- Menjalankan
gen_buildfiles.py
untuk membuat file build secara otomatis (Android.bp
). - Menjalankan
check_gpl_license.py
untuk memverifikasi library bawaan yang dilisensikan berdasarkan General Public License (GPL) memiliki sumber yang dirilis di hierarki sumber saat ini. - Menggunakan
git commit
untuk 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_VERSIONS
tanpa 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_VERSION
ditetapkan sebagaiPLATFORM_VERSION_CODENAME
. - Saat dirilis,
PLATFORM_SDK_VERSION
disalin 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_VER untuk snapshot |
Sebelum atau Setelah | CODE_NAME atau 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 kecurrent
jika 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_VERSION
sama 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.img
di/vendor/default.prop
.