Rilis framework Android memiliki beberapa Framework Compatibility Matrix (FCM), satu untuk setiap Target FCM Version yang dapat diupgrade, yang menentukan apa yang dapat digunakan framework dan persyaratan versi Target FCM. Sebagai bagian dari siklus proses FCM, Android menghentikan penggunaan dan menghapus HAL HIDL, lalu mengubah file FCM untuk mencerminkan status versi HAL.
Untuk mengaktifkan OTA khusus framework di ekosistem mereka sendiri, partner yang memperluas antarmuka vendor juga harus menghentikan penggunaan dan menghapus HAL HIDL menggunakan metode yang sama.
Terminologi
- Matriks Kompatibilitas Framework (FCM)
- File XML yang menentukan persyaratan framework pada penerapan vendor yang sesuai. Matriks kompatibilitas diberi 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.
- Target Versi FCM (V)
- Versi FCM yang ditargetkan (dari SF), yang dideklarasikan secara eksplisit dalam manifes perangkat, yang dipenuhi oleh implementasi vendor. Implementasi vendor harus dibuat berdasarkan FCM yang dipublikasikan, meskipun dapat mendeklarasikan versi HAL yang lebih baru dalam Manifes Perangkatnya.
- Versi HAL
- Versi HAL memiliki format
foo@x.y
, denganfoo
adalah nama HAL danx.y
adalah versi tertentu; misalnya,nfc@1.0
,keymaster@3.0
(awalan root, misalnyaandroid.hardware
, dihilangkan di seluruh dokumen ini.) - Manifes Perangkat
- File XML yang menentukan versi HAL yang disediakan sisi perangkat antarmuka vendor, termasuk vendor dan image ODM. Konten manifes perangkat dibatasi oleh versi Target FCM perangkat, tetapi dapat mencantumkan HAL yang sangat lebih baru dibandingkan dengan FC yang sesuai dengan V.
- HAL Perangkat
- HAL yang tercantum (disediakan) dalam manifes perangkat dan tercantum (wajib atau opsional) dalam matriks kompatibilitas framework (FCM).
- Matriks Kompatibilitas Perangkat (DCM)
- File XML yang menentukan persyaratan vendor pada penerapan framework yang sesuai. Setiap perangkat berisi satu DCM.
- Manifes Framework
- File XML yang menentukan versi HAL yang disediakan sisi framework antarmuka vendor, termasuk image sistem, system_ext, dan produk. HAL dalam manifes framework dinonaktifkan secara dinamis sesuai dengan versi Target FCM perangkat.
- HAL Framework
- HAL yang tercantum sebagai disediakan dalam manifes framework dan tercantum sebagai wajib atau opsional dalam matriks kompatibilitas perangkat (DCM).
Siklus proses FCM di codebase
Dokumen ini menjelaskan siklus proses FCM secara ringkas. Untuk melihat manifes yang 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. Tingkat 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 |
Level FCM sama dengan atau lebih baru dari Level API Vendor.
Saat Android menghentikan penggunaan level FCM, level tersebut masih didukung untuk perangkat yang ada. Perangkat yang menargetkan level FCM yang lebih rendah secara implisit diizinkan untuk menggunakan HAL yang tercantum di level FCM yang lebih baru, selama tersedia di cabang.
Mengembangkan di FCM versi baru
Android menambahkan versi FCM untuk setiap rilis framework (seperti Android
8 dan 8.1). Selama pengembangan, compatibility_matrix.F.xml
baru
akan dibuat dan compatibility_matrix.f.xml
yang ada (dengan f
< F
) tidak
lagi berubah.
Untuk mulai mengembangkan di FCM Versi F
baru:
- Salin
compatibility_matrix.<F-1>.xml
terbaru kecompatibility_matrix.F.xml
. - Perbarui atribut
level
dalam file menjadiF
. - 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
setelan optional
berikut:
optional="false"
jika perangkat yang dikirimkan denganV = F
harus diluncurkan dengan HAL ini,optional="true"
jika perangkat yang dikirimkan denganV = 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 diwajibkan untuk mengimplementasikan HAL ini, sehingga
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 (minor)
Selama pengembangan, saat HAL memiliki upgrade versi minor dari x.z
ke
x.(z+1)
pada FCM Versi F
saat ini, jika versi tersebut adalah:
- Wajib di perangkat yang diluncurkan dengan
V = F
,compatibility_matrix.F.xml
harus menyatakanx.(z+1)
danoptional="false"
. - Tidak diperlukan di perangkat yang diluncurkan dengan
V = F
,compatibility_matrix.F.xml
harus menyalinx.y-z
dan opsionalitas daricompatibility_matrix.<F-1>.xml
dan mengubah versi menjadix.w-(z+1)
(denganw >= y
).
Misalnya, Android 8.1 memperkenalkan broadcastradio@1.1
sebagai upgrade versi
minor dari HAL 1.0. Versi 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. 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, saat HAL memiliki upgrade versi utama pada FCM Versi F
saat ini, versi utama baru x.0
akan ditambahkan ke
compatibility_matrix.F.xml
dengan setelan optional
berikut:
optional="false"
hanya dengan versix.0
, jika perangkat yang dikirimkan denganV = F
harus diluncurkan denganx.0
.optional="false"
, tetapi bersama versi utama yang lebih lama dalam tag<hal>
yang sama, jika perangkat yang dikirimkan denganV = F
harus diluncurkan dengan HAL ini, tetapi dapat diluncurkan dengan versi utama yang lebih lama.optional="true"
jika perangkat yang dikirimkan denganV = 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 harus
menyediakan versi 2.0 yang baru. Misalnya, anggap
compatibility_matrix.legacy.xml
,
compatibility_matrix.1.xml
, dan
compatibility_matrix.2.xml
berisi entri ini:
<hal format="hidl" optional="true">
<name>android.hardware.health</name>
<version>1.0</version>;
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
Salin entri ini ke compatibility_matrix.F.xml
dan ubah 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 HAL 2.0 berada di
compatibility_matrix.3.xml
denganoptional="false"
, perangkat yang diluncurkan dengan Android 9 harus dikirimkan dengan HAL 2.0.` - Karena HAL 1.0 tidak ada di
compatibility_matrix.3.xml
, perangkat yang diluncurkan dengan Android 9 tidak boleh menyediakan HAL 1.0 (karena HAL ini dianggap tidak digunakan lagi). - Karena HAL 1.0 ada di
legacy/1/2.xml
(Versi FCM lama yang dapat digunakan Android 9) sebagai HAL opsional, framework Android 9 masih dapat berfungsi dengan HAL 1.0 (yang tidak dianggap sebagai Versi HAL yang dihapus).
Versi FCM baru
Proses merilis Versi FCM di partisi sistem dilakukan sepenuhnya oleh Google sebagai bagian dari rilis AOSP dan mencakup langkah-langkah berikut:
- Pastikan
compatibility_matrix.F.xml
memiliki atributlevel="F"
. - Memastikan semua perangkat dibangun dan booting.
- Perbarui pengujian VTS
untuk memastikan perangkat yang diluncurkan dengan framework terbaru (berdasarkan
API level Pengiriman) memiliki Target FCM Versi
V >= F
. - Publikasikan file ke AOSP.
Misalnya, pengujian VTS memastikan bahwa perangkat yang diluncurkan dengan Android 9 memiliki Target FCM Version >= 3.
Selain itu, FCM product dan system_ext juga dapat mencantumkan persyaratan untuk setiap versi FCM platform. Rilis versi FCM pada partisi produk dan system_ext dilakukan oleh pemilik gambar tersebut. Nomor versi FCM di partisi produk dan system_ext harus selaras dengan yang ada di partisi sistem. Serupa dengan versi FCM di partisi sistem, matriks kompatibilitas pada FCM versi F di partisi produk dan system_ext mencerminkan persyaratan pada perangkat dengan target FCM versi F.
Penghentian penggunaan versi HAL
Penghentian Versi HAL adalah keputusan developer (yaitu untuk HAL AOSP, Google akan membuat keputusan). Hal ini dapat terjadi saat versi HAL yang lebih tinggi (baik minor maupun utama) dirilis.
Menghentikan penggunaan HAL perangkat
Jika HAL perangkat tertentu foo@x.y
tidak digunakan lagi pada FCM Versi F
, artinya
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
. 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 memerlukan versi yang lebih tinggi (utama atau minor);
- Framework tidak lagi memerlukan HAL.
Misalnya, di Android 9, health@2.0
diperkenalkan
sebagai upgrade versi utama HAL 1.0. 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 HAL foo@x.y
. Matriks
kompatibilitas perangkat di 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 dari Versi Target FCM V
tertentu turun di bawah nilai minimum
tertentu, Versi Target FCM akan dihapus dari kumpulan SF dari
rilis framework berikutnya. Hal ini dilakukan dengan kedua langkah berikut:
Menghapus
compatibility_matrix.V.xml
dari aturan build (sehingga tidak diinstal di image sistem), dan menghapus kode apa pun yang menerapkan atau bergantung pada kemampuan yang dihapus.Menghapus HAL framework dengan
max-level
yang lebih rendah dari atau sama denganV
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 diupgrade 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 sedang 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 dicompatibility_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 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, versi HAL adalah versi terbaru (yaitu tidak dihentikan). 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 masih aktif di Android
12, seperti yang ditentukan dalam
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:
- Aplikasi tersebut dirilis.
- Versi ini tidak ada dalam matriks kompatibilitas publik dan beku yang memiliki Versi FCM tertinggi.
- Versi ini berada dalam matriks kompatibilitas publik dan beku yang masih didukung framework.
Contoh:
- HAL
health@1.0
ada dicompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
, dancompatibility_matrix.2.xml
, tetapi tidak ada dicompatibility_matrix.3.xml
. Oleh karena itu, API ini dianggap tidak digunakan lagi di Android 9. - HAL daya memiliki upgrade versi minor di Android
9, tetapi
power@1.0
masih dalamcompatibility_matrix.3.xml
. power@1.0
compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
, dancompatibility_matrix.2.xml
.compatibility_matrix.3.xml
memilikipower@1.0-1
.
Oleh karena itu, power@1.0
adalah yang terbaru, tetapi TIDAK digunakan lagi, di Android
9.
Untuk HAL framework, jika versi HAL ada dalam manifes framework dari 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.
- Versi ini tidak ada dalam matriks kompatibilitas publik dan beku yang didukung framework.
Matriks kompatibilitas yang bersifat publik, dibekukan, tetapi tidak didukung oleh framework, disimpan di codebase 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 dihapus jika dan hanya jika hal berikut terpenuhi:
- Sebelumnya, versi ini telah dirilis.
- File ini tidak ada dalam manifes framework cabang yang dirilis terbaru.
FCM Lama
Versi FCM Target lama adalah nilai khusus untuk semua perangkat non-Treble. FCM
lama, compatibility_matrix.legacy.xml
, mencantumkan persyaratan
framework di 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 dengan 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
.