Membuat snapshot VNDK

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 Library TARGET_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).

Struktur Direktori Ringkasan VNDK
Gambar 1. Struktur direktori snapshot VNDK (contoh)

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:

  1. Di /prebuilts/vndk/vVER, menggunakan repo start untuk membuat cabang Git baru.
  2. Mengambil dan mengekstrak artefak build snapshot VNDK.
  3. Menjalankan gen_buildfiles.py untuk membuat file build secara otomatis (Android.bp).
  4. 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.
  5. 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 di PRODUCT_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 sebagai PLATFORM_VERSION_CODENAME.
  • Saat rilis, PLATFORM_SDK_VERSION disalin ke PLATFORM_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 ke current 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 saat BOARD_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 di vendor.img pada /vendor/default.prop.