Android 11 mendukung artefak build snapshot VNDK
dan snapshot vendor, yang dapat Anda gunakan untuk membuat vendor.img terlepas dari
versi Android di pohon sumber. Hal ini memungkinkan versi campuran gambar, seperti image vendor lama dan image sistem yang lebih baru.
Versi gambar campuran 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).Pembersih. Snapshot vendor dan VNDK tidak mendukung sanitizer karena varian sanitizer harus dibangun secara terpisah.
Tentang snapshot vendor
Snapshot vendor adalah snapshot milik OEM. Ini adalah sekumpulan modul C++ bawaan yang diinstal di /vendor tetapi dikelola di AOSP. Tanpa mengambil snapshot vendor 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 file 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 juga mungkin ada di direktori lain. Saat ini, snapshot vendor tidak mendukung konfigurasi tersebut.
Membangun snapshot vendor
Bangun snapshot vendor menggunakan perintah berikut.
. build/envsetup.shlunch targetm dist vendor-snapshot
Perintah ini akan 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 tanda seperti nama modul, direktori yang diekspor, file
init_rc, dan filevintf_fragments. - Direktori
configsberisi file.rcdan.xmldari tandainit_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)
Membangun image vendor
Dengan menggunakan artefak build snapshot VNDK dan snapshot vendor, Anda dapat membuat vendor.img terlepas dari versi Android di pohon sumber, sehingga memungkinkan untuk membuat image versi campuran. 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 akan:
- Mengaktifkan modul snapshot VNDK dan modul snapshot vendor
BOARD_VNDK_VERSION. Setiap modul snapshot menggantikan modul sumber C++ yang memiliki nama yang sama. - Menetapkan
ro.vndk.versionkeBOARD_VNDK_VERSION. - Menginstal modul snapshot VNDK dari
BOARD_VNDK_VERSIONkesystem_ext.