Pengembangan manifes perangkat

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

Mengembangkan perangkat baru

Saat menentukan versi FCM target perangkat untuk perangkat baru:

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

Merilis perangkat baru

Ketika perangkat baru dirilis, versi FCM target awal harus ditentukan dan dideklarasikan dalam manifes perangkat sebagai "target-level" di tingkat teratas elemen <manifest>.

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

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

Upgrade gambar vendor

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

Upgrade 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 dirilis dengan versi FCM target 2, yang menerapkan audio 2.0 HAL yang diperlukan android.hardware.audio@2.0::IDeviceFactory/default.
  • Untuk audio 4.0 HAL yang dirilis dengan Android 9, perangkat Google Pixel 2 dan Pixel 2 XL dapat menggunakan OTA lengkap untuk meningkatkan ke 4.0 HAL, yang mengimplementasikan android.hardware.audio@4.0::IDeviceFactory/default.
  • Meskipun compatibility_matrix.2.xml menentukan audio 2.0 persyaratan pada image vendor dengan FCM target versi 2 telah longgar karena kerangka kerja Android 9 (versi FCM 3) menganggap audio 4.0 sebagai pengganti audio 2.0 HAL dalam hal fungsi.

Untuk meringkas, mengingat bahwa 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 meningkatkan FCM target untuk menentukan versi FCM yang ditargetkan, image vendor yang diupgrade dapat berfungsi kami. Untuk menambahkan perangkat versi FCM target, vendor harus:

  1. Terapkan semua Versi HAL baru yang diperlukan untuk versi FCM target.
  2. Memodifikasi Versi HAL di file manifes perangkat.
  3. Mengubah versi FCM target di file manifes perangkat.
  4. Hapus versi HAL yang sudah tidak digunakan lagi.

Misalnya, perangkat Google Pixel dan Pixel XL yang diluncurkan dengan Android 7.0 jadi versi FCM targetnya setidaknya harus berupa versi lama. Namun, perangkat manifes mendeklarasikan FCM versi 2 target karena image vendor memiliki telah diperbarui 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. Sementara mereka mengimplementasikan beberapa HAL yang dibutuhkan oleh compatibility_matrix.3.xml (seperti audio 4.0, health 2.0, dll.), mereka tidak menghapus android.hardware.radio.deprecated@1.0, yang tidak digunakan lagi di FCM versi 3 (Android 9). Oleh karena itu, perangkat tidak dapat mengupgrade versi FCM target ke versi 3.

Mengubah persyaratan kernel selama OTA

Mengupdate perangkat dari Android 9 atau yang lebih rendah

Pada perangkat dengan Android 9 atau yang lebih lama, pastikan CL berikut yang diseleksi:

Perubahan ini memperkenalkan flag build PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS dan keluar dari flag tidak disetel untuk perangkat yang diluncurkan dengan Android 9 atau lebih rendah.

  • Saat mengupdate ke Android 10, Klien OTA di perangkat yang menjalankan Android 9 atau yang lebih rendah tidak memeriksa persyaratan {i>kernel<i} dalam paket OTA dengan benar. Perubahan ini diperlukan untuk menghapus persyaratan kernel dari OTA yang dihasilkan paket.
  • Saat mengupdate ke Android 11, Anda dapat menyetel atribut Flag build PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS untuk memeriksa VINTF kompatibilitas saat paket update dibuat.

Untuk 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 diluncurkan dengan Android 10, penanda ini otomatis ditetapkan ke true. Ketika penanda diatur ke true, skrip mengekstrak versi kernel dan kernel konfigurasi dari image {i> kernel<i} yang terinstal.

  • Saat mengupdate ke Android 10, paket update OTA berisi konfigurasi dan versi {i>kernel<i}. Klien OTA di perangkat yang menjalankan Android 10 membaca informasi ini untuk memeriksa kompatibilitas mundur.
  • Saat mengupdate ke Android 11, genre paket OTA membaca versi {i>kernel<i} dan konfigurasi untuk memeriksa kompatibilitas.

Jika skrip gagal diekstrak informasi ini untuk image kernel Anda, lakukan salah satu hal berikut:

  • Mengedit skrip untuk mendukung format kernel Anda dan berkontribusi pada AOSP.
  • Menyetel BOARD_KERNEL_VERSION ke versi kernel dan BOARD_KERNEL_CONFIG_FILE ke jalur kernel yang dibangun file konfigurasi .config. Kedua variabel harus diperbarui ketika image {i>kernel<i} diperbarui.
  • Atau, setel PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS hingga false untuk melewati pemeriksaan persyaratan kernel. Hal ini tidak disarankan karena ketidakcocokan apa pun disembunyikan dan hanya ditemukan saat menjalankan uji VTS setelah pembaruan.

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