Siklus proses FCM

Rilis framework Android memiliki beberapa Matriks Kompatibilitas Framework (FCM), satu untuk setiap Versi FCM Target yang dapat diupgrade, yang menentukan apa yang dapat digunakan oleh framework dan persyaratan versi Target FCM. Sebagai bagian dari siklus proses FCM, Android menghentikan penggunaan dan menghapus HIDL HAL, lalu memodifikasi file FCM untuk mencerminkan status versi HAL.

Untuk mengaktifkan OTA khusus framework di ekosistemnya sendiri, partner yang memperluas antarmuka vendor juga harus menghentikan penggunaan dan menghapus HIDL HAL menggunakan metode yang sama.

Terminologi

Matriks Kompatibilitas Framework (FCM)
File XML yang menentukan persyaratan framework tentang penerapan vendor yang sesuai. Matriks kompatibilitas dibuatkan versi, dan versi baru dibekukan untuk setiap rilis framework. Setiap rilis framework berisi beberapa FCM.
Versi FCM Platform (SF)
Kumpulan semua versi FCM dalam rilis framework. Framework ini dapat berfungsi dengan implementasi vendor apa pun yang memenuhi salah satu FCM ini.
Versi FCM (F)
Versi tertinggi di antara semua FCM dalam rilis framework.
Versi FCM Target (V)
Versi FCM yang ditargetkan (dari SF), yang dideklarasikan secara eksplisit dalam manifes perangkat, yang dipenuhi oleh implementasi vendor. Implementasi vendor harus dibuat terhadap FCM yang dipublikasikan, meskipun mungkin mendeklarasikan versi HAL yang lebih baru dalam Manifes Perangkatnya.
Versi HAL
Versi HAL memiliki format foo@x.y, dengan foo adalah nama HAL dan x.y adalah versi spesifik; misalnya nfc@1.0, keymaster@3.0 (awalan root, misalnya android.hardware, dihilangkan di seluruh dokumen ini.)
Manifes Perangkat
File XML yang menentukan versi HAL mana yang disediakan oleh sisi perangkat antarmuka vendor, termasuk vendor dan image ODM. Konten manifes perangkat dibatasi oleh versi Target FCM perangkat, tetapi dapat mencantumkan HAL yang benar-benar lebih baru dibandingkan FC yang sesuai dengan V.
HAL Perangkat
HAL yang dicantumkan (disediakan) dalam manifes perangkat dan dicantumkan (baik wajib maupun opsional) dalam matriks kompatibilitas framework (FCM).
Matriks Kompatibilitas Perangkat (DCM)
File XML yang menentukan persyaratan vendor tentang penerapan framework yang sesuai. Setiap perangkat berisi satu DCM.
Manifes Framework
File XML yang menentukan versi HAL mana yang disediakan oleh sisi framework antarmuka vendor, termasuk sistem, system_ext, dan image produk. HAL dalam manifes framework dinonaktifkan secara dinamis sesuai dengan versi Target FCM perangkat.
HAL Framework
HAL yang tercantum dalam manifes framework dan dicantumkan sebagai wajib atau opsional dalam matriks kompatibilitas perangkat (DCM).

Siklus Proses FCM di Codebase

Dokumen ini menjelaskan siklus proses FCM secara abstrak. Untuk melihat manifes yang saat ini didukung, lihat hardware/interfaces/compatibility_matrix.<FCM>.xml tempat FCM dapat ditemukan di system/libvintf/include/vintf/Level.h.

Perangkat yang mengirimkan versi rilis Android yang sesuai diharapkan memiliki nilai FCM yang lebih besar dari atau sama dengan level yang setara. Misalnya, pengiriman perangkat dengan Android 11 umumnya memiliki FCM level 5, tetapi menerapkan FCM level 6 atau yang lebih tinggi, yang dilengkapi dengan berbagai persyaratan tambahan yang ditentukan dalam matriks kompatibilitas. Level yang didukung adalah:

FCM Versi Android
4 Android 10/Q
5 Android 11/R
6 Android 12/S
7 Android 13/T
8 Android 14/U
202404 Android 15/V

Saat Android menghentikan penggunaan level FCM, level tersebut masih didukung untuk perangkat yang ada.

Mengembangkan di versi FCM baru

Android meningkatkan versi FCM untuk setiap rilis framework (seperti Android 8, 8.1, dll.). Selama pengembangan, compatibility_matrix.F.xml baru akan dibuat dan compatibility_matrix.f.xml yang ada (dengan f < F) tidak lagi diubah.

Untuk memulai pengembangan di F Versi FCM yang baru:

  1. Salin compatibility_matrix.<F-1>.xml terbaru ke compatibility_matrix.F.xml.
  2. Perbarui atribut level dalam file ke F.
  3. Tambahkan aturan build yang sesuai untuk menginstal matriks kompatibilitas ini ke perangkat.

Memperkenalkan HAL baru

Selama pengembangan, saat memperkenalkan HAL baru (Wi-Fi, NFC, dll.) ke Android pada F versi FCM saat ini, tambahkan HAL ke compatibility_matrix.F.xml dengan setelan optional berikut:

  • optional="false" jika perangkat yang dikirimkan dengan V = F harus diluncurkan dengan HAL ini,
  • optional="true" jika perangkat yang dikirimkan dengan V = F dapat diluncurkan tanpa HAL ini.

Misalnya, Android 8.1 memperkenalkan cas@1.0 sebagai HAL opsional. Perangkat yang diluncurkan dengan Android 8.1 tidak perlu mengimplementasikan HAL ini, jadi entri berikut ditambahkan ke compatibility_matrix.F.xml (yang sebelumnya bernama compatibility_matrix.current.xml untuk sementara selama pengembangan rilis tersebut):

<hal format="hidl" optional="true">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

Mengupgrade HAL (di bawah umur)

Selama pengembangan, jika HAL memiliki upgrade versi minor dari x.z ke x.(z+1) pada Versi FCM F saat ini, jika versi tersebut:

  • Wajib di perangkat yang diluncurkan dengan V = F, compatibility_matrix.F.xml harus menyatakan x.(z+1) dan optional="false".
  • Tidak diwajibkan di perangkat yang diluncurkan dengan V = F, compatibility_matrix.F.xml harus menyalin x.y-z dan opsionalitas dari compatibility_matrix.<F-1>.xml dan mengubah versi ke x.w-(z+1) (dengan w >= y).

Misalnya, Android 8.1 memperkenalkan broadcastradio@1.1 sebagai upgrade versi minor 1.0 HAL. Versi lama, broadcastradio@1.0, bersifat opsional untuk perangkat yang diluncurkan dengan Android 8.0, sedangkan versi lebih baru, broadcastradio@1.1, bersifat opsional untuk perangkat yang diluncurkan dengan Android 8.1. Di compatibility_matrix.1.xml:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

Entri ini disalin ke compatibility_matrix.F.xml dan diubah sebagai berikut:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

Mengupgrade HAL (utama)

Selama pengembangan, jika HAL memiliki upgrade versi utama pada Versi FCM saat ini F, versi utama yang baru x.0 akan ditambahkan ke compatibility_matrix.F.xml dengan setelan optional berikut:

  • optional="false" hanya dengan versi x.0, jika perangkat yang dikirimkan dengan V = F harus diluncurkan dengan x.0.
  • optional="false", tetapi bersama versi utama yang lebih lama dalam tag <hal> yang sama, jika perangkat yang dikirimkan dengan V = F harus diluncurkan dengan HAL ini, tetapi dapat diluncurkan dengan versi utama yang lebih lama.
  • optional="true" jika perangkat yang dikirimkan dengan V = F tidak harus meluncurkan HAL.

Misalnya, Android 9 memperkenalkan health@2.0 sebagai upgrade versi utama HAL 1.0 dan menghentikan penggunaan HAL 1.0. Versi lama, health@1.0, bersifat opsional untuk perangkat yang diluncurkan dengan Android 8.0 dan Android 8.1. Perangkat yang diluncurkan dengan Android 9 tidak boleh menyediakan 1.0 HAL yang tidak digunakan lagi dan sebagai gantinya harus menyediakan versi 2.0 yang baru. Saya compatibility_matrix.legacy.xml, compatibility_matrix.1.xml, dan compatibility_matrix.2.xml:

<hal format="hidl" optional="true">
    <name>android.hardware.health</name>
    <version>1.0</version>;
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Entri ini disalin ke compatibility_matrix.F.xml dan diubah sebagai berikut:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Pembatasan:

  • Karena 2.0 HAL berada di compatibility_matrix.3.xml dengan optional="false", perangkat yang diluncurkan dengan Android 9 harus dikirimkan dengan 2.0 HAL.`
  • Karena 1.0 HAL tidak ada di compatibility_matrix.3.xml, perangkat yang diluncurkan dengan Android 9 tidak boleh menyediakan 1.0 HAL (karena HAL ini dianggap tidak digunakan lagi).
  • Karena 1.0 HAL ada di versi lama/1/2.xml (Versi FCM lama yang dapat digunakan oleh Android 9) sebagai HAL opsional, framework Android 9 masih dapat berfungsi dengan HAL 1.0 (yang tidak dianggap sebagai Versi HAL yang telah dihapus).

Versi FCM baru

Proses rilis Versi FCM pada partisi sistem dilakukan semata-mata oleh Google sebagai bagian dari rilis AOSP dan meliputi langkah-langkah berikut:

  1. Pastikan compatibility_matrix.F.xml memiliki atribut level="F".
  2. Memastikan semua perangkat dibangun dan booting.
  3. Update pengujian VTS untuk memastikan perangkat yang diluncurkan dengan framework terbaru (berdasarkan Shipping API level) memiliki Target FCM Versi V >= F.
  4. Publikasikan file ke AOSP.

Misalnya, pengujian VTS memastikan bahwa perangkat yang diluncurkan dengan Android 9 memiliki Target FCM Versi >= 3.

Selain itu, FCM product dan system_ext juga dapat mencantumkan persyaratan untuk setiap versi FCM platform. Rilis versi FCM pada produk dan partisi system_ext dilakukan oleh pemilik image ini. Nomor versi FCM pada produk dan partisi system_ext harus sesuai dengan nomor pada partisi sistem. Serupa dengan versi FCM pada partisi sistem, matriks kompatibilitas di FCM versi F dalam partisi product dan system_ext mencerminkan persyaratan pada perangkat dengan target FCM versi F.

Penghentian versi HAL

Penghentian Versi HAL adalah keputusan developer (misalnya untuk HAL AOSP, Google yang membuat keputusannya). Hal ini dapat terjadi saat versi HAL yang lebih tinggi (baik minor maupun utama) dirilis.

Menghentikan penggunaan HAL perangkat

Jika HAL perangkat tertentu tidak digunakan lagi pada FCM Versi F, berarti perangkat apa pun yang diluncurkan dengan Target FCM Versi V = F atau yang lebih baru tidak boleh menerapkan foo pada versi x.y atau versi apa pun yang lebih lama dari x.y.foo@x.y Versi HAL yang tidak digunakan lagi masih didukung oleh framework untuk mengupgrade perangkat.

Saat Versi FCM F dirilis, Versi HAL foo@x.y dianggap tidak digunakan lagi jika Versi HAL tertentu tidak dinyatakan secara eksplisit dalam FCM terbaru untuk Versi V = F Target FCM. Untuk perangkat yang diluncurkan dengan V = F, salah satu kondisi berikut terpenuhi:

  • Framework ini memerlukan versi yang lebih tinggi (utama atau minor);
  • Framework ini tidak memerlukan HAL lagi.

Misalnya, dalam Android 9, health@2.0 diperkenalkan sebagai upgrade versi utama 1.0 HAL. health@1.0 dihapus dari compatibility_matrix.3.xml, tetapi ada di compatibility_matrix.legacy.xml, compatibility_matrix.1.xml, dan compatibility_matrix.2.xml. Oleh karena itu, health@1.0 dianggap tidak digunakan lagi.

Menghentikan penggunaan HAL framework

Jika framework HAL tertentu foo@x.y tidak digunakan lagi di FCM Versi F, berarti perangkat apa pun yang diluncurkan dengan Target FCM Versi V = F atau yang lebih baru tidak boleh mengharapkan framework untuk menyediakan foo pada versi x.y, atau pada versi apa pun yang lebih lama dari x.y. Versi HAL yang tidak digunakan lagi masih disediakan oleh framework untuk mengupgrade perangkat.

Saat FCM versi F dirilis, Versi HAL foo@x.y dianggap tidak digunakan lagi jika manifes framework menentukan max-level="F - 1" untuk foo@x.y. Untuk perangkat yang diluncurkan dengan V = F, framework tidak menyediakan foo@x.y HAL. Matriks kompatibilitas perangkat pada perangkat yang diluncurkan dengan V = F tidak boleh mencantumkan HAL framework dengan max-level < V.

Misalnya, di Android 12, schedulerservice@1.0 tidak digunakan lagi. Atribut max-level-nya ditetapkan ke 5, versi FCM yang diperkenalkan di Android 11. Lihat Manifes framework Android 12.

Penghapusan dukungan untuk versi FCM target

Jika perangkat aktif dengan V Versi FCM Target tertentu turun di bawah batas tertentu, Versi FCM Target akan dihapus dari SF yang ditetapkan pada rilis framework berikutnya. Hal ini dilakukan dengan kedua langkah berikut:

  1. Menghapus compatibility_matrix.V.xml dari aturan build (sehingga tidak diinstal pada image sistem), dan menghapus kode apa pun yang diimplementasikan atau bergantung pada fungsi yang dihapus.

  2. Menghapus HAL framework dengan max-level yang lebih rendah dari atau sama dengan V dari manifes framework, dan menghapus kode apa pun yang mengimplementasikan HAL framework yang dihapus.

Perangkat dengan Versi FCM target di luar SF untuk rilis framework tertentu tidak dapat melakukan upgrade ke rilis tersebut.

Status versi HAL

Bagian berikut menjelaskan (dalam urutan kronologis) kemungkinan status Versi HAL.

Belum dirilis

Untuk HAL perangkat, jika Versi HAL tidak ada dalam matriks kompatibilitas publik dan beku, versi tersebut dianggap belum dirilis dan mungkin dalam pengembangan. Ini mencakup Versi HAL yang hanya ada di compatibility_matrix.F.xml. Contoh:

  • Selama pengembangan Android 9, HAL health@2.0 dianggap sebagai HAL yang belum dirilis dan hanya ada di compatibility_matrix.3.xml.
  • HAL teleportation@1.0 tidak ada dalam matriks kompatibilitas yang dirilis, dan juga dianggap sebagai HAL yang belum dirilis.

Untuk HAL framework, jika versi HAL hanya ada dalam manifes framework dari cabang pengembangan yang tidak terkait, versi tersebut akan dianggap belum dirilis.

Dirilis dan Saat Ini

Untuk HAL perangkat, jika Versi HAL berada dalam matriks kompatibilitas publik dan frozen, versi ini akan dirilis. Misalnya, setelah FCM Versi 3 dibekukan dan dipublikasikan ke AOSP, HAL health@2.0 dianggap sebagai Versi HAL yang dirilis dan saat ini.

Jika Versi HAL berada dalam matriks kompatibilitas publik dan beku yang memiliki Versi FCM tertinggi, berarti versi HAL adalah versi saat ini (yaitu tidak digunakan lagi). Misalnya, Versi HAL yang sudah ada (seperti nfc@1.0 yang diperkenalkan dalam compatibility_matrix.legacy.xml dan masih ada di compatibility_matrix.3.xml juga dianggap sebagai Versi HAL yang dirilis dan saat ini.

Untuk HAL framework, jika versi HAL berada dalam manifes framework dari cabang yang terakhir dirilis tanpa atribut max-level atau (tidak biasanya) max-level yang sama dengan atau lebih tinggi dari versi FCM yang dirilis di cabang ini, versi tersebut dianggap sebagai versi HAL yang dirilis dan terbaru. Misalnya, HAL displayservice dirilis dan saat ini tersedia di Android 12, seperti yang ditentukan oleh manifes framework Android 12.

Dirilis tetapi tidak digunakan lagi

Untuk HAL perangkat, Versi HAL tidak digunakan lagi jika dan hanya jika semua hal berikut terpenuhi:

  • Sudah dirilis.
  • ID ini tidak berada dalam matriks kompatibilitas publik dan beku yang memiliki Versi FCM tertinggi.
  • Framework ini berada dalam matriks kompatibilitas publik dan beku yang masih didukung oleh framework.

Contoh:

Oleh karena itu, power@1.0 adalah yang terbaru, tetapi TIDAK digunakan lagi, di Android 9.

Untuk HAL framework, jika versi HAL berada dalam manifes framework cabang terbaru yang dirilis, dengan atribut max-level yang lebih rendah dari rilis versi FCM di cabang ini, versi tersebut dianggap sebagai versi HAL yang dirilis tetapi tidak digunakan lagi. Misalnya, HAL schedulerservice dirilis, tetapi tidak digunakan lagi di Android 12, seperti yang ditentukan dalam manifes framework Android 12.

Dihapus

Untuk HAL perangkat, Versi HAL dihapus jika dan hanya jika hal berikut benar:

  • Konten ini sebelumnya dirilis.
  • Tidak tersedia dalam matriks kompatibilitas publik dan frozen yang didukung oleh framework.

Matriks kompatibilitas yang bersifat publik, dibekukan, tetapi tidak didukung oleh framework disimpan di code base untuk menentukan set Versi HAL yang dihapus, sehingga pengujian VTS dapat ditulis untuk memastikan HAL yang dihapus tidak ada di perangkat baru.

Untuk HAL framework, versi HAL akan dihapus jika dan hanya jika hal berikut terpenuhi:

  • Konten ini sebelumnya dirilis.
  • Tidak tersedia dalam manifes framework dari cabang yang terakhir dirilis.

FCM Lama

Target Versi FCM lama adalah nilai khusus untuk semua perangkat non-Treble. FCM lama, compatibility_matrix.legacy.xml, mencantumkan persyaratan framework pada perangkat lama (yaitu perangkat yang diluncurkan sebelum Android 8.0).

Jika file ini ada untuk FCM dengan versi F, perangkat non-Treble apa pun dapat diupgrade ke F asalkan manifes perangkatnya kompatibel dengan file ini. Penghapusannya mengikuti prosedur yang sama seperti FCM untuk Versi FCM Target lainnya (dihapus setelah jumlah perangkat aktif sebelum versi 8.0 turun di bawah batas tertentu).

Versi FCM yang dirilis

Daftar versi FCM yang dirilis dapat ditemukan di bagian hardware/interfaces/compatibility_matrices.

Untuk menemukan versi FCM yang dirilis dengan rilis Android tertentu, lihat Level.h.