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 FCM Target. 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 mana pun yang memenuhi salah satu FCM ini.
- Versi FCM (F)
- Versi tertinggi di antara semua FCM dalam rilis framework.
- Target FCM Version (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; misalnyanfc@1.0
,keymaster@3.0
(awalan root, misalnyaandroid.hardware
, tidak disertakan di seluruh dokumen ini.) - Manifes Perangkat
- File XML yang menentukan versi HAL yang disediakan sisi perangkat antarmuka vendor, termasuk gambar vendor dan ODM. Isi manifes perangkat dibatasi oleh versi FCM Target perangkat, tetapi dapat mencantumkan HAL yang lebih baru secara ketat relatif terhadap FC yang sesuai dengan V.
- HAL Perangkat
- HAL yang tercantum (disediakan) dalam manifes perangkat dan tercantum 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 oleh sisi framework antarmuka vendor, termasuk image sistem, system_ext, dan produk. HAL dalam manifes framework dinonaktifkan secara dinamis sesuai dengan Target FCM perangkat.
- HAL Framework
- HAL yang tercantum sebagai disediakan dalam manifes framework dan tercantum 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_matrices/compatibility_matrix.<FCM>.xml
tempat FCM dapat ditemukan di
system/libvintf/include/vintf/Level.h
.
Perangkat yang dikirimkan dengan versi rilis Android yang sesuai diharapkan memiliki nilai FCM yang lebih besar dari atau sama dengan tingkat yang setara. Misalnya, perangkat yang dikirim dengan Android 11 umumnya memiliki FCM level 5, tetapi menerapkan FCM level 6 atau yang lebih tinggi, yang disertai dengan berbagai persyaratan tambahan yang ditentukan dalam matriks kompatibilitas. Tingkat yang didukung untuk Android 15 adalah:
FCM | Versi Android |
---|---|
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 tetap 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 HAL tersebut tersedia di cabang.
Mengembangkan di versi FCM baru
Android menaikkan versi FCM untuk setiap rilis framework (seperti Android
8 dan 8.1). Selama pengembangan, compatibility_matrix.F.xml
baru dibuat dan compatibility_matrix.f.xml
yang ada (dengan f
< F
) tidak lagi diubah.
Untuk mulai mengembangkan di Versi FCM baru F
:
- 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
.
Misalnya, Android 8.1 memperkenalkan cas@1.0
. Perangkat yang diluncurkan dengan Android 8.1 dapat menerapkan 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">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
Mengupgrade HAL (minor)
Jumlah versi HAL AIDL dihitung sebagai versi HAL minor. Versi antarmuka HIDL memiliki versi
major.minor
seperti 1.2
.
Selama pengembangan, saat HAL AIDL memiliki upgrade versi dari 2
ke
3
pada Versi FCM saat ini F
, versi baru ditambahkan ke entri HAL
di compatibility_matrix.F.xml
. Kolom versi entri HAL menerima rentang seperti 2-3
.
Misalnya, Android FCM F
memperkenalkan foo@3
sebagai upgrade versi kecil HAL. Versi yang lebih lama, foo@2
, digunakan untuk
perangkat yang menargetkan FCM yang lebih lama, sedangkan versi yang lebih baru,
foo@3
, dapat digunakan untuk perangkat yang menargetkan FCM Android F
. Entri di
FCM lama sebelum versi 2
terlihat seperti:
<hal format="aidl">
<name>foo</name>
<version>2</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Entri ini disalin ke compatibility_matrix.F.xml
dan diubah untuk mendukung
versi 3
sebagai berikut:
<hal format="aidl">
<name>foo</name>
<version>2-3</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Mengupgrade HAL (utama)
Selama pengembangan, saat HAL memiliki upgrade versi utama pada Versi FCM saat ini F
, versi utama baru x.0
ditambahkan ke compatibility_matrix.F.xml
dengan setelan berikut:
- Hanya versi
x.0
, jika perangkat yang dikirim denganV = F
harus diluncurkan denganx.0
. - Dengan versi utama yang lebih lama dalam tag
<hal>
yang sama, jika perangkat yang dikirim denganV = F
dapat diluncurkan dengan versi utama yang lebih lama.
Misalnya, FCM versi F
memperkenalkan foo@2.0
sebagai upgrade versi utama HAL 1.0 dan menghentikan penggunaan HAL 1.0. Versi
yang lebih lama, foo@1.0
, digunakan untuk perangkat yang menargetkan FCM versi sebelumnya. Perangkat
yang menargetkan FCM versi F
harus menyediakan versi 2.0 baru jika menyediakan
HAL. Dalam contoh ini, versi FCM sebelumnya berisi entri ini:
<hal format="hidl">
<name>foo</name>
<version>1.0</version>;
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Salin entri ini ke compatibility_matrix.F.xml
dan ubah sebagai
berikut:
<hal format="hidl">
<name>foo</name>
<version>2.0</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Pembatasan:
- Karena HAL 1.0 tidak ada di
compatibility_matrix.F.xml
, perangkat yang menargetkan FCM versiF
tidak boleh menyediakan HAL 1.0 (karena HAL ini dianggap tidak digunakan lagi). - Karena HAL 1.0 ada di Versi FCM yang lebih lama, framework masih dapat berfungsi dengan HAL 1.0 sehingga kompatibel mundur dengan perangkat lama yang menargetkan versi FCM yang lebih lama.
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"
. - Pastikan semua perangkat dibuat dan di-boot.
- Perbarui pengujian VTS
untuk memastikan perangkat yang diluncurkan dengan framework terbaru (berdasarkan
level API Pengiriman) memiliki Target FCM Version
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 produk dan system_ext juga dapat mencantumkan persyaratan untuk setiap versi FCM platform. Rilis versi FCM di partisi produk dan system_ext dilakukan oleh pemilik gambar ini masing-masing. Nomor versi FCM di partisi produk dan system_ext harus sama dengan yang ada di partisi sistem. Mirip dengan versi FCM di partisi sistem, matriks kompatibilitas pada FCM versi F di partisi produk dan system_ext mencerminkan persyaratan pada perangkat dengan FCM versi F target.
Penghentian penggunaan versi HAL
Penghentian penggunaan Versi HAL adalah keputusan developer (yaitu untuk HAL AOSP, Google yang membuat keputusan). Hal ini dapat terjadi saat versi HAL yang lebih tinggi (baik minor maupun mayor) dirilis.
Menghentikan penggunaan HAL perangkat
Jika HAL perangkat tertentu foo@x.y
tidak digunakan lagi di FCM Versi F
, artinya
semua perangkat yang diluncurkan dengan Versi FCM Target V = F
atau yang lebih baru tidak boleh
menerapkan foo
di versi x.y
atau versi yang lebih lama dari x.y
. Versi HAL yang tidak digunakan lagi masih didukung oleh framework untuk mengupgrade perangkat.
Saat FCM Versi F
dirilis, HAL Versi foo@x.y
dianggap tidak digunakan lagi jika Versi HAL tertentu tidak dinyatakan secara eksplisit dalam FCM terbaru untuk Versi FCM Target V = F
. Untuk perangkat yang diluncurkan dengan V = F
, salah satu
kondisi berikut terpenuhi:
- Framework memerlukan versi yang lebih tinggi (utama atau kecil);
- 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 HAL framework tertentu foo@x.y
tidak digunakan lagi di FCM Versi F
, artinya
perangkat apa pun yang diluncurkan dengan Target FCM Versi V = F
atau yang lebih baru tidak boleh
mengharapkan framework menyediakan foo
di versi x.y
, atau di versi yang lebih lama
daripada 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 disetel ke 5
, versi FCM yang diperkenalkan di Android 11. Lihat
manifest framework Android 12.
Penghapusan dukungan untuk versi FCM target
Jika perangkat aktif dengan Target Versi FCM V
tertentu turun di bawah
nilai minimum tertentu, Target Versi FCM tersebut akan dihapus dari set SF
rilis framework berikutnya. Hal ini dilakukan dengan kedua langkah berikut:
Menghapus
compatibility_matrix.V.xml
dari aturan build (agar tidak diinstal pada image sistem), dan menghapus kode apa pun yang menerapkan atau bergantung pada kemampuan yang dihapus.Menghapus HAL framework dengan
max-level
yang lebih rendah atau sama denganV
dari manifes framework, dan menghapus kode apa pun yang menerapkan HAL framework yang dihapus.
Perangkat dengan Versi FCM target di luar SF untuk rilis framework tertentu tidak dapat diupgrade ke rilis tersebut.
Penghapusan HAL yang sepenuhnya tidak digunakan lagi
Saat versi FCM dihapus, beberapa antarmuka HAL, atau versi antarmuka HAL, tidak lagi ada di FCM mana pun. Artinya, Android tidak lagi mendukungnya sama sekali, bahkan untuk mengupgrade perangkat.
Setelah HAL tidak lagi didukung, developer menghapus referensi ke antarmuka HAL tersebut dari Android, termasuk dalam kode klien di framework, implementasi default, dan kasus pengujian VTS.
Jika tidak ada HAL yang didukung dan diwarisi dari HAL yang dihapus, maka definisi HAL itu sendiri dapat dihapus dengan beberapa langkah tambahan.
- Hapus definisi antarmuka HAL dari kode sumber. Ini mencakup file
*.aidl
dan modulAndroid.bp
aidl_interface
. - Jika HIDL, hapus HASH dari
hardware/interfaces/current.txt
. - Jika AIDL, hapus direktori
aidl_api
dengan file AIDL yang dibekukan. - Hapus antarmuka dari
hardware/interfaces/compatibility_matrices/exclude/fcm_exclude.cpp
.
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 tetap, versi tersebut dianggap belum dirilis dan mungkin masih 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
. teleportation@1.0
HAL tidak ada dalam matriks kompatibilitas yang dirilis, dan juga dianggap sebagai HAL yang belum dirilis.
Untuk HAL framework, jika versi HAL hanya ada di manifes framework cabang pengembangan yang tidak terkait, HAL tersebut dianggap belum dirilis.
Dirilis dan saat ini
Untuk HAL perangkat, jika Versi HAL ada dalam matriks kompatibilitas publik dan tetap, versi tersebut 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 ada dalam matriks kompatibilitas publik dan tetap yang memiliki Versi FCM tertinggi, versi HAL tersebut adalah versi saat ini (yaitu tidak digunakan lagi). Misalnya, Versi HAL yang ada (seperti nfc@1.0
yang diperkenalkan di
compatibility_matrix.legacy.xml
)
yang terus ada di compatibility_matrix.3.xml
juga dianggap sebagai
Versi HAL yang dirilis dan saat ini.
Untuk HAL framework, jika versi HAL ada dalam manifes framework
cabang yang dirilis terbaru tanpa atribut max-level
atau (tidak biasa) max-level
yang sama dengan atau lebih tinggi dari versi FCM yang dirilis di cabang ini, maka
versi tersebut dianggap sebagai versi HAL yang dirilis dan saat ini. Misalnya, HAL
displayservice
dirilis dan saat ini ada 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:
- Fitur ini dirilis.
- Tidak ada dalam matriks kompatibilitas publik dan tetap yang memiliki Versi FCM tertinggi.
- Framework ini ada dalam matriks kompatibilitas publik dan tetap didukung oleh 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, metode ini dianggap tidak digunakan lagi di Android 9. - HAL daya memiliki upgrade versi kecil 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
saat ini, tetapi TIDAK tidak digunakan lagi, di Android 9.
Untuk HAL framework, jika versi HAL ada di manifes framework cabang rilis terbaru dengan atribut max-level
yang lebih rendah daripada rilis versi FCM di cabang ini, maka dianggap sebagai versi HAL yang dirilis tetapi tidak digunakan lagi. Misalnya, 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 kondisi berikut benar:
- Sebelumnya telah dirilis.
- Framework tidak ada dalam matriks kompatibilitas publik dan tetap yang didukungnya.
Matriks kompatibilitas yang bersifat publik, dibekukan, tetapi tidak didukung oleh framework disimpan dalam 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 kondisi berikut terpenuhi:
- Sebelumnya telah dirilis.
- Tidak ada dalam manifes framework cabang yang dirilis terbaru.
FCM Lama
Target FCM Version 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 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 pra-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
.