Android 11 mendukung build snapshot VNDK
artefak
dan snapshot vendor, yang dapat Anda gunakan untuk mem-build vendor.img terlepas dari
versi Android di pohon sumber. Hal ini memungkinkan versi campuran gambar, seperti vendor lama dan gambar sistem yang lebih baru.
Versi campuran gambar tidak didukung untuk hal berikut.
Android.mk.Karena Soong membuat snapshot vendor, modul yang ditentukan diAndroid.mktidak diambil sebagai snapshot vendor (modul milik SoC diAndroid.mkjuga tidak dijamin berfungsi).Sanitizer. Snapshot vendor dan VNDK tidak mendukung sanitizer karena varian sanitizer harus di-build secara terpisah.
Tentang snapshot vendor
Snapshot vendor adalah snapshot milik OEM. Snapshot ini adalah kumpulan modul C++ yang telah di-build sebelumnya dan diinstal di /vendor, tetapi dikelola di AOSP. Tanpa mengambil snapshot vendor dari versi Android sebelumnya, mengupgrade ke versi Android baru dapat merusak partisi vendor karena modul snapshot vendor dapat dihapus atau diubah tanpa kompatibilitas API atau ABI.
Snapshot vendor berisi modul berikut di AOSP.
- Library bersama, statis, dan header dengan
vendor: trueatauvendor_available: true - Library statis VNDK dengan
vendor_available: true - File objek dan yang dapat dieksekusi dengan
vendor: trueatauvendor_available: true
Modul di direktori berikut dianggap sebagai kode hardware milik SoC dan diabaikan.
device/vendor/hardware/, kecualihardware/interfaceshardware/libhardwarehardware/libhardware_legacy
Kode hardware milik SoC mungkin juga ada di direktori lain. Saat ini, snapshot vendor tidak mendukung konfigurasi tersebut.
Mem-build snapshot vendor
Build snapshot vendor menggunakan perintah berikut.
. build/envsetup.shlunch targetm dist vendor-snapshot
Perintah ini membuat file vendor-$(TARGET_DEVICE).zip di $DIST_DIR. Contoh berikut menunjukkan file zip snapshot vendor:
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- File JSON berisi flag seperti nama modul, direktori yang diekspor, file
init_rc, dan filevintf_fragments. - Direktori
configsberisi file.rcdan.xmldari flaginit_rcdanvintf_fragments.
Menginstal snapshot vendor
Untuk menginstal snapshot vendor, buka direktori tujuan dan gunakan perintah berikut.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VERPerintah ini menghasilkan
/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp.
Contoh berikut menunjukkan struktur direktori snapshot vendor:
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
Mem-build gambar vendor
Dengan menggunakan artefak build snapshot VNDK
dan snapshot vendor, Anda dapat mem-build vendor.img terlepas dari versi Android
di pohon sumber, sehingga memungkinkan pembuatan versi campuran
gambar. Setelah menginstal snapshot VNDK dan snapshot vendor, tetapkan BOARD_VNDK_VERSION ke versi vendor. Contoh:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Jika BOARD_VNDK_VERSION ditetapkan ke nilai selain current, sistem build:
- Mengaktifkan modul snapshot VNDK dan modul snapshot vendor
BOARD_VNDK_VERSION. Setiap modul snapshot mengganti modul sumber C++ yang memiliki nama yang sama. - Menetapkan
ro.vndk.versionkeBOARD_VNDK_VERSION. - Menginstal modul snapshot VNDK
BOARD_VNDK_VERSIONkesystem_ext.