Rilis framework Android memiliki beberapa Matriks Kompatibilitas Framework (FCM), satu untuk setiap Versi FCM Target yang dapat diupgrade, yang menentukan framework mungkin menggunakan persyaratan versi FCM dan Target. Sebagai bagian dari FCM Android menghentikan dan menghapus HIDL HAL, lalu mengubah file FCM menjadi mencerminkan status versi HAL.
Untuk mengaktifkan OTA khusus framework di ekosistem mereka sendiri, partner yang memperluas antarmuka vendor juga harus menghentikan dan menghapus HIDL HAL menggunakan metode.
Terminologi
- Matriks Kompatibilitas Framework (FCM)
- File XML yang menentukan persyaratan framework tentang kesesuaian vendor implementasi yang tepat. Matriks kompatibilitas memiliki versi, dan versi baru berhenti berfungsi untuk setiap rilis framework. Setiap rilis framework berisi beberapa FCM.
- Versi FCM Platform (SF)
- Kumpulan semua versi FCM dalam rilis framework. Kerangka kerja ini dapat berfungsi dengan implementasi vendor yang memenuhi salah satu FCM ini.
- Versi FCM (F)
- Versi tertinggi di antara semua FCM dalam rilis framework.
- Versi FCM (V) Target
- Versi FCM yang ditargetkan (dari SF), yang dideklarasikan secara eksplisit di perangkat manifes, yang dipenuhi oleh implementasi vendor. Implementasi vendor harus terhadap FCM yang dipublikasikan, meskipun mungkin mendeklarasikan versi HAL yang lebih baru dalam Manifes Perangkat.
- Versi HAL
- Versi HAL memiliki format
foo@x.y
, denganfoo
adalah nama HAL danx.y
adalah versi spesifiknya; mis.nfc@1.0
,keymaster@3.0
(awalan root, misalnyaandroid.hardware
, dihilangkan di seluruh dokumen ini.) - Manifes Perangkat
- File XML yang menentukan versi HAL mana di sisi perangkat antarmuka vendor, termasuk vendor dan gambar ODM. Isi manifes perangkat adalah dibatasi oleh versi FCM Target dari perangkat, tetapi dapat menampilkan daftar 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 terkait kesesuaian framework implementasi yang tepat. Setiap perangkat berisi satu DCM.
- Manifes Framework
- File XML yang menentukan versi HAL mana yang merupakan sisi framework vendor menyediakan antarmuka, termasuk sistem, {i>system_ext,<i} dan gambar produk. HAL dalam manifes framework dinonaktifkan secara dinamis sesuai dengan Target FCM perangkat .
- HAL Framework
- HAL yang tercantum sebagaimana disediakan dalam manifes framework dan tercantum sebagai diperlukan atau opsional dalam matriks kompatibilitas perangkat (DCM).
Siklus proses FCM di codebase
Dokumen ini menjelaskan siklus proses FCM secara abstrak. 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. Sebagai contoh, 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 FCM versi baru
Android menambah 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
berubah lagi.
Untuk memulai pengembangan di F
Versi FCM yang baru:
- Salin
compatibility_matrix.<F-1>.xml
terbaru kecompatibility_matrix.F.xml
. - Perbarui atribut
level
dalam file keF
. - Tambahkan aturan build yang sesuai untuk menginstal matriks kompatibilitas ini ke perangkat seluler.
Memperkenalkan HAL baru
Selama pengembangan, saat memperkenalkan HAL baru (Wi-Fi, NFC, dll.) ke Android
pada FCM versi F
saat ini, 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
peluncuran dengan Android 8.1 tidak diperlukan
untuk menerapkan HAL ini, jadi
entri berikut ditambahkan ke compatibility_matrix.F.xml
(yang sebelumnya
bernama compatibility_matrix.current.xml
untuk sementara selama pengembangan
):
<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, saat HAL memiliki upgrade versi minor dari x.z
ke
x.(z+1)
pada FCM Versi F
saat ini, jika versi tersebut:
- 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 ubah versinya menjadix.w-(z+1)
(denganw >= y
).
Misalnya, Android 8.1 memperkenalkan broadcastradio@1.1
sebagai versi minor
dari versi 1.0 HAL. Versi lama, broadcastradio@1.0
, bersifat opsional untuk
perangkat yang diluncurkan dengan Android 8.0
sementara versi yang lebih baru,
broadcastradio@1.1
, bersifat opsional untuk perangkat yang diluncurkan dengan Android 8.1. Di beberapa
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, ketika HAL memiliki upgrade versi utama di FCM saat ini
Versi F
, versi utama baru x.0
ditambahkan ke
compatibility_matrix.F.xml
dengan setelan optional
berikut:
optional="false"
hanya dengan versix.0
, jika perangkat yang disertakan denganV = F
harus diluncurkan denganx.0
.optional="false"
tetapi bersama dengan versi utama yang lebih lama dalam<hal>
yang sama , jika perangkat yang dikirimkan denganV = F
harus diluncurkan dengan HAL ini, namun dapat diluncurkan dengan versi utama yang lebih lama.optional="true"
jika perangkat yang dikirimkan denganV = F
tidak perlu diluncurkan HAL.
Misalnya, Android 9 memperkenalkan health@2.0
sebagai
peningkatan versi utama dari 1.0 HAL dan
menghentikan penggunaan HAL 1.0. Lebih tua
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, asumsikan
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 ini:
<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
denganoptional="false"
, perangkat yang diluncurkan dengan Android 9 harus mengirim 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
legacy/1/2.xml
(Versi FCM lama yang Android 9 dapat digunakan) sebagai HAL opsional, Kerangka kerja Android 9 masih dapat berfungsi dengan 1.0 HAL (yang tidak dianggap sebagai Versi HAL yang telah dihapus).
Versi FCM baru
Proses merilis Versi FCM pada partisi sistem dilakukan semata-mata oleh Google sebagai bagian dari rilis AOSP dan menyertakan langkah-langkah berikut:
- Pastikan
compatibility_matrix.F.xml
memiliki atributlevel="F"
. - Memastikan semua perangkat dibangun dan booting.
- Mengupdate pengujian VTS
untuk memastikan perangkat diluncurkan dengan framework terbaru (berdasarkan
pada Shipping API level) memiliki Target FCM Versi
V >= F
. - 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 dasar. Rilis versi FCM di produk dan system_ext partisi dilakukan oleh pemilik {i>image<i} tersebut. Versi FCM angka pada produk dan partisi system_ext harus selaras dengan yang ada di partisi sistem. Mirip dengan versi FCM pada partisi sistem, matriks kompatibilitas di FCM versi F di partisi produk dan system_ext mencerminkan persyaratan di perangkat dengan target FCM versi F.
Penghentian versi HAL
Penghentian Versi HAL adalah keputusan developer (misalnya untuk HAL AOSP, yang membuat keputusan). Hal itu bisa terjadi ketika versi HAL yang lebih tinggi (baik kecil maupun besar) dirilis.
Menghentikan penggunaan HAL perangkat
Jika HAL foo@x.y
perangkat tertentu tidak digunakan lagi pada Versi FCM F
, artinya
bahwa 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 yang lebih lama dari x.y
. Tidak digunakan lagi
Versi HAL 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 untuk Target FCM Versi V = F
. 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, di Android 9, health@2.0
diperkenalkan
sebagai upgrade versi utama
dari 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 foo@x.y
tertentu tidak digunakan lagi pada Versi FCM F
, artinya
bahwa perangkat apa pun yang diluncurkan dengan Target FCM Versi V = F
atau yang lebih baru tidak boleh
framework akan menyediakan foo
pada versi x.y
, atau pada versi apa pun yang lebih lama
dari x.y
. Versi HAL yang sudah tidak digunakan lagi
masih disediakan oleh kerangka kerja 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. Perangkat
matriks kompatibilitas pada perangkat yang diluncurkan dengan V = F
tidak boleh mencantumkan framework
HAL dengan max-level < V
.
Misalnya, di Android 12, schedulerservice@1.0
adalah
tidak digunakan lagi. Atribut max-level
-nya ditetapkan ke 5
, versi FCM yang diperkenalkan
di Android 11. Lihat
Framework Android 12
manifes.
Penghapusan dukungan untuk versi FCM target
Jika perangkat aktif dengan Target FCM Versi V
tertentu turun di bawah
nilai minimum, Versi FCM Target akan dihapus dari SF yang ditetapkan
rilis framework berikutnya. Hal ini dilakukan dengan kedua langkah berikut:
Menghapus
compatibility_matrix.V.xml
dari aturan build (agar tidak yang diinstal pada image sistem), dan menghapus kode apa pun yang mengimplementasikan atau bergantung pada kemampuan yang dihapus.Menghapus HAL framework dengan
max-level
yang lebih rendah dari atau sama denganV
dari manifes framework yang benar, dan menghapus kode apa pun yang mengimplementasikan HAL kerangka kerja.
Perangkat dengan Versi FCM target di luar SF untuk framework tertentu tidak dapat diupgrade ke rilis tersebut.
Status versi HAL
Bagian berikut menjelaskan (dalam urutan kronologis) kemungkinan status dari Versi HAL.
Belum dirilis
Untuk HAL perangkat, jika Versi HAL tidak dipublikasikan dan dibekukan
kompatibilitas, maka dianggap belum dirilis dan mungkin dalam pengembangan.
Ini mencakup 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 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, dianggap belum dirilis.
Dirilis dan saat ini
Untuk HAL perangkat, jika Versi HAL berada dalam kompatibilitas publik dan pembekuan apa pun
matriks, decoder akan dilepaskan. 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 adalah versi HAL saat ini (yaitu tidak digunakan lagi). Sebagai
versi HAL yang sudah ada (seperti nfc@1.0
yang diperkenalkan dalam
compatibility_matrix.legacy.xml
)
yang terus ada di compatibility_matrix.3.xml
juga dianggap sebagai
dirilis dan Versi HAL 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
sama dengan atau lebih tinggi dari versi FCM yang dirilis di cabang ini,
dianggap sebagai versi HAL yang dirilis dan terkini. Misalnya,
displayservice
HAL dirilis dan saat ini tersedia di Android
12, seperti yang ditetapkan dalam
Framework Android 12
manifes.
Dirilis tetapi tidak digunakan lagi
Untuk HAL perangkat, Versi HAL tidak digunakan lagi jika dan hanya jika semua hal berikut terpenuhi:
- Sudah dirilis.
- Tidak tersedia dalam matriks kompatibilitas publik dan yang dibekukan yang memiliki Versi FCM.
- Hal ini berada dalam matriks kompatibilitas publik dan yang dibekukan di mana framework masih didukung.
Contoh:
- HAL
health@1.0
sudah dimulaicompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
, dancompatibility_matrix.2.xml
, tapi tidak di dalamcompatibility_matrix.3.xml
. Oleh karena itu, dianggap tidak digunakan lagi di Android 9. - Power HAL memiliki upgrade versi minor di Android
9, tetapi
power@1.0
masih ada dicompatibility_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 berada dalam manifes framework
cabang yang dirilis dengan atribut max-level
lebih rendah dari rilis versi FCM
di cabang ini, dianggap sebagai versi HAL yang dirilis tetapi tidak digunakan lagi. Sebagai
contoh, HAL schedulerservice
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 benar:
- Konten ini sebelumnya dirilis.
- Framework tidak ada dalam matriks kompatibilitas publik dan yang dibekukan apa pun didukung.
Matriks kompatibilitas yang bersifat publik, dibekukan, tetapi tidak didukung oleh disimpan di codebase untuk menentukan set Versi HAL yang dihapus sehingga bahwa tes VTS dapat ditulis untuk memastikan HAL yang dihapus tidak ada di perangkat baru.
Untuk HAL kerangka kerja, versi HAL 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. Tujuan
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. Ini
mengikuti prosedur yang sama seperti FCM untuk Versi FCM Target lainnya
(dihapus setelah jumlah perangkat aktif pra-8.0 turun di bawah batas tertentu
ambang batas).
Versi FCM yang dirilis
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