Membuat snapshot vendor

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 di Android.mk tidak diambil sebagai snapshot vendor (modul milik SoC di Android.mk juga 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: true atau vendor_available: true
  • Library statis VNDK dengan vendor_available: true
  • File objek dan yang dapat dieksekusi dengan vendor: true atau vendor_available: true

Modul di direktori berikut dianggap sebagai kode hardware milik SoC dan diabaikan.

  • device/
  • vendor/
  • hardware/, kecuali
    • hardware/interfaces
    • hardware/libhardware
    • hardware/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.sh
lunch target
m 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 file vintf_fragments.
  • Direktori configs berisi file .rc dan .xml dari flag init_rc dan vintf_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 VER

Perintah 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.version ke BOARD_VNDK_VERSION.
  • Menginstal modul snapshot VNDK BOARD_VNDK_VERSION ke system_ext.