Snapshot VNDK adalah serangkaian 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 dibangun secara otomatis di server build Android
dan check in ke /prebuilts/vndk
dari hierarki sumber Android. Sebagai
pengembangan aplikasi, Anda dapat membangun snapshot VNDK secara lokal. Snapshot VNDK adalah
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 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_ARCH
sama dengan Generic System Image (GSI) lengkungan target (arm
,arm64
,x86
,x86_64
).TARGET_ARCH_VARIANT
. Untuk snapshot v28 (Android 9) dan yang lebih tinggi, mencakup konfigurasi populer yang tercantum di atas.
Perintah build
Untuk snapshot resmi, Android 9 dan yang lebih baru
menyertakan target contoh (vndk
) di
vndk.mk
yang membangun dan menghasilkan VNDK
snapshot 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 membuat semua arch yang didukung
dengan perintah berikut.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Snapshot VNDK untuk versi Android dihasilkan dari .
Membangun aplikasi secara lokal
Selama pengembangan, Anda dapat membuat snapshot VNDK dari hierarki sumber lokal dengan perintah berikut.
- Untuk membangun semua lengkungan yang didukung sekaligus, jalankan skrip build berikut
(
build.sh
).cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Untuk membangun satu
TARGET_ARCH
spesifik, jalankan perintah berikut perintah.lunch aosp_TARGET_ARCH-user
m -j vndk dist
File android-vndk-$(TARGET_ARCH).zip
yang sesuai dibuat
di bawah $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,
TARGET_ARCH
dan LibraryTARGET_2ND_ARCH
dibuat dan disertakan.
- Daftar library pribadi VNDK-core, VNDK-SP, LL-NDK, dan VNDK ada di
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
. - Melisensikan file.
module_paths.txt
. Mencatat jalur modul untuk semua VNDK library, 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 adalah
dikelompokkan dalam direktori terpisah bernama
arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
menurut ABI
sedikit demi sedikit. Misalnya, untuk android-vndk-arm64.zip
, library 64-bit
ditempatkan di bawah arch-arm64-armv8-a
dan library 32-bit
ditempatkan di bawah arch-arm-armv8-a
. Contoh di bawah ini menunjukkan
struktur direktori untuk VNDK arm64 (TARGET_ARCH=arm64
)
file ZIP snapshot (android-vndk-arm64.zip
).
Membangun untuk snapshot vendor
Dukungan Android 11
vendor
snapshot, yang memungkinkan Anda membangun vendor.img
terlepas dari
versi Android pada hierarki sumber. Snapshot VNDK default berisi
file pustaka bersama (.so
) yang dapat diinstal ke perangkat dan
kemudian ditautkan dari
biner C++ vendor dalam {i>runtime<i}. Untuk membangun terhadap
snapshot VNDK tersebut, Anda memerlukan artefak tambahan
yang diekspor.
Untuk membuat artefak tersebut (bersama dengan snapshot VNDK) dari sumber lokal gunakan perintah berikut.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
Perintah ini membuat android-vndk-$(TARGET_ARCH).zip
file di
$DIST_DIR
. Contoh di bawah ini adalah file ZIP snapshot arm64 VNDK
dengan artefak build. File yang dicetak tebal adalah file yang baru ditambahkan ke VNDK normal
(ditunjukkan 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 dalam hierarki sumber di bagian
/prebuilts/vndk/vVER
, dengan
VER
sama dengan versi snapshot VNDK
(yang mengikuti versi SDK dari rilis Android yang sesuai). Sebagai
misalnya, snapshot Android 8.1 VNDK memiliki versi 27.
Menggunakan skrip update.py
Skrip update.py
(/development/vndk/snapshot/update.py
) mengotomatiskan proses
menambahkan snapshot VNDK bawaan ke hierarki sumber. Secara otomatis mendeteksi
artefak build dan mengisi dengan tepat properti terkait pada
Android.bp
yang dihasilkan. Skrip ini melakukan 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 Lisensi Publik Umum (GPL) memiliki sumber yang dirilis dalam pohon sumber saat ini. - Menggunakan
git commit
untuk meng-commit perubahan baru.
Menggunakan snapshot VNDK yang dibangun secara lokal
Anda juga dapat menggunakan snapshot VNDK yang dibangun secara lokal. Saat --local
ditentukan, skrip update.py
mengambil snapshot VNDK
artefak build dari direktori lokal yang ditentukan (bukan dari Android
server build) yang memiliki file android-vndk-$(TARGET_ARCH).zip
yang dihasilkan dari development/vndk/snapshot/build.sh
. Dengan
Opsi --local
, skrip update.py
akan melewati GPL
pemeriksaan lisensi dan git commit
langkah.
Syntax (Sintaks):
python update.py VER --local local_path
Contoh perintah untuk mengupdate snapshot Android 8.1 VNDK dengan build lokal
artefak di /path/to/local/dir
:
python update.py 27 --local /path/to/local/dir
Contoh struktur direktori snapshot VNDK yang dibangun 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
.
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 VNDK bawaan
direktori snapshot (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 hanya menginstal modul snapshot yang diperlukan untuk modul vendor. - Opsi 2:
PRODUCT_EXTRA_VNDK_VERSIONS
. Instal modul snapshot VNDK apa pun modul vendor saat ini. Tindakan ini akan menginstal snapshot VNDK bawaan yang tercantum diPRODUCT_EXTRA_VNDK_VERSIONS
tanpa menautkannya ke pada waktu build.
Tetapkan BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
menunjukkan versi VNDK yang digunakan vendor saat ini
modul yang diperlukan untuk build. Jika BOARD_VNDK_VERSION
memiliki
versi snapshot VNDK yang tersedia di direktori /prebuilts/vndk
,
Snapshot VNDK yang ditunjukkan di BOARD_VNDK_VERSION
telah diinstal. Jika
snapshot VNDK tidak tersedia di direktori, error build terjadi.
Dengan menentukan BOARD_VNDK_VERSION
, modul VNDK juga akan
terinstal. Modul vendor ditautkan dengan versi snapshot VNDK yang ditentukan di
BOARD_VNDK_VERSION
pada waktu build (ini bukan build saat ini
modul VNDK di sumber sistem). Saat mendownload hierarki sumber lengkap dari
sebuah repositori, baik sumber sistem maupun vendor
didasarkan pada Android yang sama
data.
Tetapkan PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
mencantumkan versi VNDK tambahan yang akan
terinstal. Biasanya cukup memiliki satu snapshot VNDK untuk
partisi vendor. Namun, dalam beberapa kasus, Anda
mungkin perlu menyertakan beberapa
snapshot di satu image sistem. Misalnya, GSI memiliki beberapa snapshot
mendukung beberapa versi vendor
dengan satu {i>image<i} sistem. Dengan menetapkan
PRODUCT_EXTRA_VNDK_VERSIONS
, Anda dapat menginstal snapshot VNDK
modul selain versi VNDK di BOARD_VNDK_VERSION
.
Jika PRODUCT_EXTRA_VNDK_VERSIONS
memiliki daftar versi tertentu,
sistem build mencari snapshot bawaan dari daftar versi di
Direktori prebuilts/vndk
. Jika sistem pembangunan menemukan semua daftar
snapshot tersebut, APEX akan menginstal file snapshot tersebut ke setiap APEX VNDK
(out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER
.
Versi yang tidak ada akan menghasilkan error build.
Modul VNDK tidak terhubung 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
valid
hanya jika BOARD_VNDK_VERSION
ditentukan.
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION
menentukan versi VNDK untuk VNDK saat ini
di sumber sistem. Nilai ditetapkan secara otomatis:
- Sebelum rilis,
PLATFORM_VNDK_VERSION
disetel sebagaiPLATFORM_VERSION_CODENAME
. - Saat rilis,
PLATFORM_SDK_VERSION
disalin kePLATFORM_VNDK_VERSION
.
Setelah versi Android dirilis, library VNDK saat ini akan
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
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 dirilis, format alfanumerik Android
nama kode digunakan untuk PLATFORM_VNDK_VERSION
.
Ringkasan setelan versi VNDK
Tabel merangkum setelan versi VNDK.
Build Vendor |
Versi Board |
Rilis SDK |
Versi Platform |
Properti Versi |
Direktori Instal |
---|---|---|---|---|---|
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 ringkasan |
Sebelum atau Setelah | CODE_NAME atau SDK_VER |
VNDK_VER |
/system_ext/apex/com.android.vndk.vVNDK_VER |
- Versi Board (
BOARD_VNDK_VERSION
). VNDK versi yang dibutuhkan modul vendor untuk dibangun. Tetapkan kecurrent
jika modul vendor dapat ditautkan dengan modul sistem saat ini. - Versi Platform (
PLATFORM_VNDK_VERSION
). Versi VNDK yang sedang dibuat oleh modul sistem saat ini. Hanya dibuat saatBOARD_VNDK_VERSION
sama dengan saat ini. - Properti Versi (
ro.vndk.version
). Properti yang menentukan versi VNDK yang diperlukan biner dan libs di vendor.img akan dijalankan. Disimpan divendor.img
pada/vendor/default.prop
.