Siklus hidup FCM

Rilis kerangka kerja Android memiliki beberapa Matriks Kompatibilitas Kerangka Kerja (FCM), satu untuk setiap Versi Target FCM yang dapat diupgrade, yang menentukan kerangka kerja apa yang dapat digunakan dan persyaratan versi Target FCM. Sebagai bagian dari siklus hidup FCM, Android tidak lagi menggunakan dan menghapus HIDL HAL, lalu memodifikasi file FCM untuk mencerminkan status versi HAL .

Untuk mengaktifkan OTA khusus kerangka kerja di ekosistem mereka sendiri, mitra yang memperluas antarmuka vendor juga harus menghentikan dan menghapus HIDL HAL menggunakan metode yang sama.

Terminologi

Matriks Kompatibilitas Kerangka Kerja (FCM)
File XML yang menentukan persyaratan kerangka kerja untuk menyesuaikan implementasi vendor. Matriks kompatibilitas dibuat berdasarkan versi, dan versi baru dibekukan untuk setiap rilis kerangka kerja. Setiap rilis kerangka kerja berisi beberapa FCM.
Versi Platform FCM ( SF )
Kumpulan semua versi FCM dalam rilis kerangka kerja. Kerangka kerja ini dapat bekerja dengan implementasi vendor mana pun yang memenuhi salah satu FCM ini.
Versi FCM (P)
Versi tertinggi di antara semua FCM dalam rilis kerangka kerja.
Versi FCM Target (V)
Versi FCM yang ditargetkan (dari S F ), dinyatakan secara eksplisit dalam manifes perangkat, yang dipenuhi oleh implementasi vendor. Implementasi vendor harus dibuat berdasarkan FCM yang dipublikasikan, meskipun mungkin mendeklarasikan versi HAL yang lebih baru di Manifes Perangkatnya.
Versi HAL
Versi HAL memiliki format foo@xy , dengan foo nama HAL dan xy versi spesifiknya; 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 gambar vendor dan ODM. Konten manifes perangkat dibatasi oleh versi Target FCM perangkat tetapi dapat mencantumkan HAL yang lebih baru dibandingkan FC yang sesuai dengan V.
HAL perangkat
HAL yang terdaftar (disediakan) dalam manifes perangkat dan terdaftar (wajib atau opsional) dalam matriks kompatibilitas kerangka kerja (FCM).
Matriks Kompatibilitas Perangkat (DCM)
File XML yang menentukan persyaratan vendor untuk menyesuaikan implementasi kerangka kerja. Setiap perangkat berisi satu DCM.
Manifes Kerangka
File XML yang menentukan versi HAL mana yang disediakan oleh sisi kerangka antarmuka vendor, termasuk sistem, system_ext, dan gambar produk. HAL dalam manifes kerangka kerja dinonaktifkan secara dinamis sesuai dengan versi Target FCM perangkat.
Kerangka HAL
HAL yang terdaftar sebagaimana disediakan dalam manifes kerangka kerja dan terdaftar sebagai wajib atau opsional dalam matriks kompatibilitas perangkat (DCM).

Siklus Hidup FCM di Basis Kode

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

Pada Android 14, 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

Berkembang dalam versi FCM baru

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

Untuk mulai mengembangkan FCM Versi F yang baru :

  1. Salin compatibility_matrix.<F-1>.xml terbaru ke compatibility_matrix.F.xml .
  2. Perbarui atribut level dalam file menjadi 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 versi FCM saat ini F , tambahkan HAL ke compatibility_matrix.F.xml dengan pengaturan 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 diperlukan untuk mengimplementasikan HAL ini, sehingga entri berikut ditambahkan ke compatibility_matrix.F.xml (yang dulu diberi nama 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>

Tingkatkan HAL (kecil)

Selama pengembangan, ketika HAL memiliki peningkatan versi kecil dari xz ke x.(z+1) pada Versi FCM saat ini F , jika versi tersebut adalah:

  • Diperlukan pada perangkat yang diluncurkan dengan V = F , compatibility_matrix.F.xml harus menyatakan x.(z+1) dan optional="false" .
  • Tidak diperlukan pada perangkat yang diluncurkan dengan V = F , compatibility_matrix.F.xml harus menyalin xy-z dan opsionalitas dari compatibility_matrix.<F-1>.xml dan mengubah versinya menjadi xw-(z+1) (di mana w >= y ).

Misalnya, Android 8.1 memperkenalkan broadcastradio@1.1 sebagai peningkatan versi minor 1.0 HAL. Versi yang lebih lama, broadcastradio@1.0 , bersifat opsional untuk perangkat yang diluncurkan dengan Android 8.0 sedangkan versi yang lebih baru, broadcastradio@1.1 , bersifat opsional untuk perangkat yang diluncurkan dengan Android 8.1. Dalam 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 dimodifikasi 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>

Tingkatkan HAL (utama)

Selama pengembangan, ketika HAL memiliki pemutakhiran versi utama pada FCM Versi F saat ini, versi utama baru x.0 ditambahkan ke compatibility_matrix.F.xml dengan pengaturan 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 dengan versi utama yang lebih lama dalam tag <hal> yang sama, jika perangkat yang dikirimkan dengan V = F harus diluncurkan dengan HAL ini, namun 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 dari 1.0 HAL dan tidak lagi menggunakan 1.0 HAL. Versi yang lebih 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 HAL 1.0 yang tidak digunakan lagi dan 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 dimodifikasi 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>

Batasan:

  • Karena 2.0 HAL berada dalam 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 dalam 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 hadir dalam legacy/1/2.xml (Versi FCM lama yang dapat digunakan oleh Android 9) sebagai HAL opsional, kerangka kerja Android 9 masih dapat bekerja dengan 1.0 HAL (yang tidak dianggap sebagai Versi HAL yang dihapus ).

Versi FCM baru

Proses merilis Versi FCM pada partisi sistem dilakukan sepenuhnya oleh Google sebagai bagian dari rilis AOSP dan mencakup langkah-langkah berikut:

  1. Pastikan compatibility_matrix.F.xml memiliki atribut level="F" .
  2. Pastikan semua perangkat dibuat dan di-boot.
  3. Perbarui pengujian VTS untuk memastikan perangkat yang diluncurkan dengan kerangka kerja terbaru (berdasarkan level API Pengiriman) memiliki Target FCM Version 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 platform FCM. Pelepasan versi FCM pada partisi product dan system_ext masing-masing dilakukan oleh pemilik image ini. Nomor versi FCM pada partisi product dan system_ext harus sesuai dengan yang ada pada partisi sistem. Mirip dengan versi FCM pada partisi sistem, matriks kompatibilitas pada FCM versi F di partisi product dan system_ext mencerminkan persyaratan pada perangkat dengan target FCM versi F.

Penghentian versi HAL

Penghentian Versi HAL adalah keputusan pengembang (yaitu untuk AOSP HAL, Google yang mengambil keputusan). Ini bisa terjadi ketika versi HAL yang lebih tinggi (baik minor maupun mayor) dirilis.

Menghentikan penggunaan perangkat HAL

Jika perangkat tertentu HAL foo@xy tidak digunakan lagi pada FCM Versi F , berarti perangkat apa pun yang diluncurkan dengan Target FCM Versi V = F atau lebih baru tidak boleh mengimplementasikan foo pada versi xy atau versi apa pun yang lebih lama dari xy . Versi HAL yang tidak digunakan lagi masih didukung oleh kerangka kerja untuk memutakhirkan perangkat.

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

  • Kerangka kerja ini memerlukan versi yang lebih tinggi (mayor atau minor);
  • Kerangka kerja ini tidak memerlukan HAL lagi.

Misalnya, di Android 9, health@2.0 diperkenalkan sebagai peningkatan 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 kompatibilitas_matrix.2.xml . Oleh karena itu, health@1.0 dianggap tidak digunakan lagi.

Tidak lagi menggunakan kerangka kerja HAL

Jika kerangka kerja tertentu HAL foo@xy tidak digunakan lagi pada FCM Versi F , berarti perangkat apa pun yang diluncurkan dengan Target FCM Versi V = F atau lebih baru tidak boleh mengharapkan kerangka kerja menyediakan foo pada versi xy , atau pada versi apa pun yang lebih tua dari xy . Versi HAL yang tidak digunakan lagi masih disediakan oleh kerangka kerja untuk memutakhirkan perangkat.

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

Misalnya, di Android 12, schedulerservice@1.0 tidak digunakan lagi. Atribut max-level disetel ke 5 , versi FCM yang diperkenalkan di Android 11. Lihat manifes kerangka kerja Android 12 .

Penghapusan dukungan untuk versi FCM target

Ketika perangkat aktif dari Target FCM Versi V tertentu turun di bawah ambang batas tertentu, Versi Target FCM dihapus dari kumpulan S F pada rilis kerangka kerja 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 mengimplementasikan atau bergantung pada fungsionalitas yang dihapus.

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

Perangkat dengan Versi FCM target di luar S F untuk rilis kerangka kerja tertentu tidak dapat ditingkatkan 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 mana pun, maka Versi tersebut dianggap belum dirilis dan mungkin sedang dikembangkan. Ini termasuk Versi HAL yang hanya ada di compatibility_matrix.F.xml . Contoh:

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

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

Dirilis dan Terkini

Untuk HAL perangkat, jika Versi HAL berada dalam matriks kompatibilitas publik dan beku, maka Versi tersebut akan dirilis. Misalnya, setelah FCM Versi 3 dibekukan dan dipublikasikan ke AOSP, HAL health@2.0 dianggap sebagai Versi HAL yang dirilis dan terkini.

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

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

Dirilis tetapi tidak digunakan lagi

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

  • Itu dirilis.
  • Bukan dalam matriks kompatibilitas publik dan beku yang memiliki Versi FCM tertinggi.
  • Kerangka kerja ini masih mendukung matriks kompatibilitas publik dan beku.

Contoh:

Oleh karena itu power@1.0 adalah yang terkini, namun TIDAK usang, di Android 9.

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

DIHAPUS

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

  • Itu telah dirilis sebelumnya.
  • Itu tidak ada dalam matriks kompatibilitas publik dan beku yang didukung kerangka kerja.

Matriks kompatibilitas yang bersifat publik, dibekukan, namun tidak didukung oleh kerangka kerja disimpan dalam basis kode untuk menentukan kumpulan Versi HAL yang dihapus sehingga pengujian VTS dapat ditulis untuk memastikan HAL yang dihapus tidak ada pada perangkat baru.

Untuk HAL kerangka kerja, versi HAL dihapus jika dan hanya jika hal berikut terpenuhi:

  • Itu telah dirilis sebelumnya.
  • Itu tidak ada dalam manifes kerangka apa pun dari cabang terbaru yang dirilis.

FCM lama

Warisan Versi Target FCM 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 ditingkatkan ke F asalkan manifes perangkatnya kompatibel dengan file ini. Penghapusannya mengikuti prosedur yang sama seperti FCM untuk Versi Target FCM lainnya (dihapus setelah jumlah perangkat aktif pra-8.0 turun di bawah ambang batas tertentu).

Merilis versi FCM

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

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