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 terkait yang diperlukan 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 ragam arm, arm64, x86, dan x86_64 TARGET_ARCH
.
Membangun snapshot
Server build Android menghasilkan artefak build dan file snapshot VNDK menggunakan parameter build dan perintah build berikut.
Parameter bangun
Nama target pembangunannya 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_ARCH
sama dengan lengkungan target Generic System Image (GSI) (arm
,arm64
,x86
,x86_64
). -
TARGET_ARCH_VARIANT
. Untuk snapshot v28 (Android 9) dan lebih tinggi, termasuk 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
. Misalnya:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
Server build Android menggunakan skrip build.sh
untuk membuat semua ragam 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 pembangunan berikut (
build.sh
).cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Untuk membangun 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 bawah $DIST_DIR
.
File cuplikan
Snapshot VNDK menyertakan file berikut.
- Varian vendor perpustakaan bersama VNDK-core dan VNDK-SP.
- Lib bersama LL-NDK tidak diperlukan karena kompatibel dengan versi sebelumnya.
- Untuk target 64 bit, pustaka
TARGET_ARCH
danTARGET_2ND_ARCH
dibuat dan disertakan.
- Daftar perpustakaan pribadi VNDK-core, VNDK-SP, LL-NDK, dan VNDK ada di
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
. - File lisensi.
-
module_paths.txt
. Mencatat jalur modul untuk semua pustaka VNDK, yang diperlukan untuk memeriksa apakah proyek GPL memiliki sumber yang dirilis di pohon sumber Android tertentu.
Untuk file ZIP snapshot VNDK tertentu, android-vndk-$(TARGET_ARCH).zip
, pustaka VNDK bawaan 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 VNDK arm64 ( TARGET_ARCH=arm64
) ( 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. Snapshot VNDK default berisi file perpustakaan bersama ( .so
) yang dapat diinstal ke perangkat dan kemudian ditautkan dari biner vendor C++ saat runtime. Untuk membangun snapshot VNDK tersebut, 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 file android-vndk-$(TARGET_ARCH).zip
di bawah $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 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 pada /prebuilts/vndk/v VER
, dengan 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. Secara otomatis mendeteksi artefak build dan mengisi properti terkait di Android.bp
yang dihasilkan dengan tepat. Skrip ini melakukan tugas-tugas berikut:
- Di
/prebuilts/vndk/v VER
, gunakanrepo start
untuk membuat cabang Git baru. - Mengambil dan membuka ritsleting artefak build snapshot VNDK.
- Jalankan
gen_buildfiles.py
untuk menghasilkan file build secara otomatis (Android.bp
). - Jalankan
check_gpl_license.py
untuk memverifikasi perpustakaan bawaan yang dilisensikan di bawah Lisensi Publik Umum (GPL) memiliki sumber yang dirilis di pohon sumber saat ini. - Menggunakan
git commit
untuk melakukan perubahan baru.
Menggunakan snapshot VNDK yang dibuat secara lokal
Anda juga dapat menggunakan snapshot VNDK yang dibuat secara lokal. Jika 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
melewatkan langkah-langkah pemeriksaan lisensi GPL dan git commit
.
Sintaksis:
python update.py VER --local local_path
Contoh perintah untuk mengupdate snapshot Android 8.1 VNDK dengan artefak build lokal di /path/to/local/dir
:
python update.py 27 --local /path/to/local/dir
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 bangunan lokal ditambahkan secara otomatis jika artefak dibuat dengan
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
.Menginstal snapshot VNDK
Citra sistem menginstal pustaka snapshot VNDK pada waktu pembuatan menggunakan informasi dalam 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. Tindakan ini akan menginstal snapshot VNDK bawaan yang tercantum diPRODUCT_EXTRA_VNDK_VERSIONS
tanpa menautkannya ke modul lain pada waktu pembuatan.
Pengaturan BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
menunjukkan versi VNDK yang perlu dibuat oleh modul vendor saat ini. Jika BOARD_VNDK_VERSION
memiliki versi snapshot VNDK yang tersedia di direktori /prebuilts/vndk
, snapshot VNDK yang ditunjukkan dalam BOARD_VNDK_VERSION
akan diinstal. Jika snapshot VNDK tidak tersedia di direktori, kesalahan build akan terjadi.
Mendefinisikan BOARD_VNDK_VERSION
juga memungkinkan modul VNDK dipasang. 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 pohon sumber lengkap dari repositori, sumber sistem dan vendor didasarkan pada rilis Android yang sama.
Menyetel PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
mencantumkan versi VNDK tambahan yang akan diinstal. Biasanya cukup memiliki satu snapshot VNDK untuk partisi vendor saat ini. Namun, dalam beberapa kasus, Anda mungkin perlu menyertakan beberapa snapshot dalam satu citra sistem. Misalnya, GSI memiliki beberapa snapshot untuk mendukung beberapa versi vendor dengan satu image 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 build akan mencari snapshot bawaan dari daftar versi di direktori prebuilts/vndk
. Jika sistem build menemukan semua snapshot yang terdaftar, sistem build 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. Nilainya diatur secara otomatis:
- Sebelum dirilis,
PLATFORM_VNDK_VERSION
ditetapkan sebagaiPLATFORM_VERSION_CODENAME
. - Saat rilis,
PLATFORM_SDK_VERSION
disalin kePLATFORM_VNDK_VERSION
.
Setelah versi Android dirilis, pustaka VNDK saat ini diinstal ke VNDK APEX ( /system/apex/com.android.vndk.v VER
), dengan VER
adalah versi yang disimpan di PLATFORM_VNDK_VERSION
.
Jika 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 dirilis, 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_VER untuk cuplikan | Sebelum atau sesudah | CODE_NAME atau SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- Versi Papan (
BOARD_VNDK_VERSION
). Versi VNDK yang perlu dibuat oleh modul vendor. Setel kecurrent
jika modul vendor dapat terhubung dengan modul sistem saat ini. - Versi Platform (
PLATFORM_VNDK_VERSION
). Versi VNDK yang sedang dibuat oleh modul sistem saat ini. Dibangun hanya ketikaBOARD_VNDK_VERSION
sama dengan arus. - Properti Versi (
ro.vndk.version
). Properti yang menentukan versi VNDK yang harus dijalankan oleh binari dan lib di vendor.img. Disimpan divendor.img
di/vendor/default.prop
.