Pengembangan manifes perangkat

Saat mengembangkan dan merilis perangkat baru, vendor dapat menentukan dan mendeklarasikan versi FCM target dalam manifes perangkat (DM). Saat mengupgrade image vendor untuk perangkat lama, vendor dapat memilih untuk menerapkan versi HAL baru dan menambahkan versi FCM target.

Mengembangkan perangkat baru

Saat menentukan versi FCM target perangkat untuk perangkat baru:

  1. Biarkan DEVICE_MANIFEST_FILE dan PRODUCT_ENFORCE_VINTF_MANIFEST tidak ditentukan.
  2. Terapkan HAL untuk versi FCM target.
  3. Tulis file manifes perangkat yang benar.
  4. Tulis versi FCM target ke file manifes perangkat.
  5. Setel DEVICE_MANIFEST_FILE.
  6. Setel PRODUCT_ENFORCE_VINTF_MANIFEST ke true.

Merilis perangkat baru

Saat perangkat baru dirilis, versi FCM target awalnya perlu ditentukan dan dideklarasikan dalam manifes perangkat sebagai atribut "target-level" di elemen <manifest> tingkat atas.

Misalnya, perangkat yang diluncurkan dengan Android 9 harus memiliki versi FCM target yang sama dengan 3 (versi yang lebih tinggi tersedia saat ini). Untuk mendeklarasikannya dalam manifes perangkat:

<manifest version="1.0" type="device" target-level="3">
    <!-- ... -->
</manifest>

Mengupgrade gambar vendor

Saat mengupgrade image vendor untuk perangkat lama, vendor dapat memilih untuk menerapkan versi HAL baru dan menambahkan versi FCM target.

Mengupgrade HAL

Selama upgrade image vendor, vendor dapat menerapkan versi HAL baru asalkan nama HAL, nama antarmuka, dan nama instance sama. Contoh:

  • Perangkat Google Pixel 2 dan Pixel 2 XL yang dirilis dengan target FCM versi 2, yang menerapkan HAL audio 2.0 android.hardware.audio@2.0::IDeviceFactory/default yang diperlukan.
  • Untuk HAL audio 4.0 yang dirilis dengan Android 9, perangkat Google Pixel 2 dan Pixel 2 XL dapat menggunakan OTA penuh untuk mengupgrade ke HAL 4.0, yang mengimplementasikan android.hardware.audio@4.0::IDeviceFactory/default.
  • Meskipun compatibility_matrix.2.xml hanya menentukan audio 2.0, persyaratan pada image vendor dengan target FCM versi 2 telah dilonggarkan karena framework Android 9 (FCM versi 3) menganggap audio 4.0 sebagai pengganti HAL audio 2.0 dalam hal fungsi.

Untuk meringkas, mengingat compatibility_matrix.2.xml memerlukan audio 2.0 dan compatibility_matrix.3.xml memerlukan audio 4.0, persyaratannya adalah sebagai berikut:

Versi FCM (sistem) Versi FCM target (vendor) Persyaratan
2 (8.1) 2 (8.1) Audio 2.0
3 (9) 2 (8.1) Audio 2.0 atau 4.0
3 (9) 3 (9) Audio 4.0

Mengupgrade versi FCM target

Selama upgrade image vendor, vendor juga dapat menambahkan versi FCM target untuk menentukan versi FCM target yang dapat digunakan oleh image vendor yang diupgrade. Untuk meningkatkan versi FCM target perangkat, vendor harus:

  1. Terapkan semua Versi HAL baru yang diperlukan untuk versi FCM target.
  2. Ubah Versi HAL di file manifes perangkat.
  3. Ubah versi FCM target dalam file manifes perangkat.
  4. Menghapus versi HAL yang tidak digunakan lagi.

Misalnya, perangkat Google Pixel dan Pixel XL diluncurkan dengan Android 7.0 sehingga versi FCM targetnya harus setidaknya versi lama. Namun, manifes perangkat mendeklarasikan FCM target versi 2 karena image vendor telah diupdate agar sesuai dengan compatibility_matrix.2.xml:

<manifest version="1.0" type="device" target-level="2">

Jika vendor tidak menerapkan semua versi HAL baru yang diperlukan atau tidak menghapus versi HAL yang tidak digunakan lagi, versi FCM target tidak dapat diupgrade.

Misalnya, perangkat Google Pixel 2 dan Pixel 2 XL memiliki target FCM versi 2. Meskipun menerapkan beberapa HAL yang diperlukan oleh compatibility_matrix.3.xml (seperti audio 4.0, kesehatan 2.0, dll.), hal ini tidak menghapus android.hardware.radio.deprecated@1.0, yang tidak digunakan lagi di FCM versi 3 (Android 9). Oleh karena itu, perangkat ini tidak dapat mengupgrade versi FCM target ke 3.

Mewajibkan persyaratan kernel selama OTA

Mengupdate perangkat dari Android 9 atau yang lebih lama

Di perangkat dengan Android 9 atau yang lebih lama, pastikan CL berikut dipilih:

Perubahan ini memperkenalkan flag build PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS dan membiarkan flag tidak ditetapkan untuk perangkat yang diluncurkan dengan Android 9 atau yang lebih lama.

  • Saat mengupdate ke Android 10, klien OTA di perangkat yang menjalankan Android 9 atau yang lebih rendah tidak memeriksa persyaratan kernel dalam paket OTA dengan benar. Perubahan ini diperlukan untuk menghapus persyaratan kernel dari paket OTA yang dihasilkan.
  • Saat mengupdate ke Android 11, Anda dapat menetapkan flag build PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS untuk memeriksa kompatibilitas VINTF saat paket update dibuat.

Untuk mengetahui informasi selengkapnya tentang flag build ini, lihat Mengupdate perangkat dari Android 10.

Mengupdate perangkat dari Android 10

Android 10 memperkenalkan flag build baru, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS. Untuk perangkat yang diluncurkan dengan Android 10, flag ini otomatis ditetapkan ke true. Jika tanda ditetapkan ke true, skrip akan mengekstrak versi kernel dan konfigurasi kernel dari image kernel yang diinstal.

  • Saat mengupdate ke Android 10, paket update OTA berisi versi dan konfigurasi kernel. Klien OTA di perangkat yang menjalankan Android 10 membaca informasi ini untuk memeriksa kompatibilitas.
  • Saat mengupdate ke Android 11, pembuatan paket OTA akan membaca versi dan konfigurasi kernel untuk memeriksa kompatibilitas.

Jika skrip gagal mengekstrak informasi ini untuk image kernel Anda, lakukan salah satu tindakan berikut:

  • Edit skrip untuk mendukung format kernel Anda dan berkontribusi pada AOSP.
  • Tetapkan BOARD_KERNEL_VERSION ke versi kernel dan BOARD_KERNEL_CONFIG_FILE ke jalur file konfigurasi kernel yang di-build .config. Kedua variabel harus diperbarui saat image kernel diupdate.
  • Atau, tetapkan PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS ke false untuk melewati pemeriksaan persyaratan kernel. Hal ini tidak direkomendasikan karena inkompatibilitas apa pun disembunyikan dan hanya ditemukan saat menjalankan pengujian VTS setelah update.

Anda dapat melihat kode sumber skrip ekstraksi informasi kernel extract_kernel.py.