Una versione del framework Android ha più matrici di compatibilità del framework (FCM), una per ogni versione FCM di destinazione aggiornabile, che definiscono ciò che il framework può utilizzare e i requisiti della versione di FCM di destinazione. Nell'ambito del ciclo di vita di FCM, Android depreca e rimuove gli HAL HIDL, quindi modifica i file FCM per riflettere lo stato della versione HAL .
Per abilitare OTA solo framework nei propri ecosistemi, i partner che estendono le interfacce dei fornitori dovrebbero anche deprecare e rimuovere gli HAL HIDL utilizzando gli stessi metodi.
Terminologia
Matrice di compatibilità del framework (FCM) | Un file XML che specifica i requisiti del framework sulle implementazioni del fornitore conformi. La matrice di compatibilità è versionata e una nuova versione viene bloccata per ogni rilascio del framework. Ogni versione del framework contiene più FCM. |
---|---|
Piattaforma FCM Versioni (S F ) | L'insieme di tutte le versioni FCM in una versione del framework. Il framework può funzionare con qualsiasi implementazione del fornitore che soddisfi uno di questi FCM. |
Versione FCM (F) | La versione più alta tra tutti gli FCM in una versione del framework. |
Versione FCM di destinazione (V) | La versione FCM mirata (da S F ), dichiarata esplicitamente nel manifesto del dispositivo, che un'implementazione del fornitore soddisfa. Un'implementazione del fornitore deve essere generata rispetto a un FCM pubblicato, sebbene possa dichiarare versioni HAL più recenti nel suo manifesto del dispositivo. |
Versione HAL | Una versione HAL ha il formato foo@xy , dove foo è il nome HAL e xy è la versione specifica; ad esempio nfc@1.0 , keymaster@3.0 (il prefisso root, ad esempio android.hardware , è omesso in questo documento.) |
Manifesto del dispositivo | File XML che specificano quali versioni HAL fornisce il lato dispositivo dell'interfaccia del fornitore, incluse le immagini del fornitore e ODM. I contenuti di un manifesto del dispositivo sono vincolati dalla versione FCM di destinazione del dispositivo, ma possono elencare HAL strettamente più recenti rispetto all'FCM corrispondente a V. |
HAL del dispositivo | HAL elencati (forniti) nel manifesto del dispositivo ed elencati (richiesti o facoltativi) nella matrice di compatibilità del framework (FCM). |
Matrice di compatibilità dei dispositivi (DCM) | Un file XML che specifica i requisiti del fornitore sulle implementazioni del framework conformi. Ogni dispositivo contiene un DCM. |
Quadro manifesto | Un file XML che specifica le versioni HAL fornite dal lato framework dell'interfaccia del fornitore, inclusi system, system_ext e immagini del prodotto. Gli HAL nel manifest del framework sono disabilitati dinamicamente in base alla versione FCM di destinazione del dispositivo. |
Framework HAL | HAL elencati come forniti nel manifesto del framework ed elencati come obbligatori o facoltativi nella matrice di compatibilità dei dispositivi (DCM). |
Sviluppo in una nuova versione FCM
Android incrementa la versione FCM per ogni versione del framework (come Android 8, 8.1, ecc.). Durante lo sviluppo, viene creato il nuovo compatibility_matrix.F.xml
e il compatibility_matrix.f.xml
esistente (dove f
< F
) non viene più modificato.
Per iniziare a sviluppare in una nuova versione FCM di F
:
- Copia l'ultimo
compatibility_matrix.<F-1>.xml
incompatibility_matrix.F.xml
. - Aggiorna l'attributo
level
nel file inF
. - Aggiungi le regole di compilazione corrispondenti per installare questa matrice di compatibilità nel dispositivo.
Presentazione di un nuovo HAL
Durante lo sviluppo, quando si introduce un nuovo HAL (Wi-Fi, NFC, ecc.) in Android nell'attuale versione FCM di F
, aggiungere l'HAL a compatibility_matrix.F.xml
con le seguenti impostazioni optional
:
-
optional="false"
se i dispositivi forniti conV = F
devono essere avviati con questo HAL,
O -
optional="true"
se i dispositivi forniti conV = F
possono essere avviati senza questo HAL.
Ad esempio, Android 8.1 ha introdotto cas@1.0
come HAL opzionale. I dispositivi che vengono avviati con Android 8.1 non sono tenuti a implementare questo HAL, quindi la seguente voce è stata aggiunta a compatibility_matrix.F.xml
(che era temporaneamente denominata compatibility_matrix.current.xml
durante lo sviluppo di quella versione):
<hal format="hidl" optional="true"> <name>android.hardware.cas</name> <version>1.0</version> <interface> <name>IMediaCasService</name> <instance>default</instance> </interface> </hal>
Aggiornamento di un HAL (minore)
Durante lo sviluppo, quando un HAL ha un aggiornamento di versione minore da xz
a x.(z+1)
alla versione FCM corrente F
, se quella versione è:
- Obbligatorio sui dispositivi che vengono avviati con
V = F
, ilcompatibility_matrix.F.xml
deve indicarex.(z+1)
eoptional="false"
. - Non richiesto sui dispositivi che vengono avviati con
V = F
, ilcompatibility_matrix.F.xml
deve copiarexy-z
e optionality dacompatibility_matrix.<F-1>.xml
e modificare la versione inxw-(z+1)
(dovew >= y
).
Ad esempio, Android 8.1 ha introdotto broadcastradio@1.1
come aggiornamento della versione minore di 1.0 HAL. La versione precedente, broadcastradio@1.0
, è facoltativa per i dispositivi che si avviano con Android 8.0 mentre la versione più recente, broadcastradio@1.1
, è facoltativa per i dispositivi che si avviano con Android 8.1. In 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>
Questa voce è stata copiata in compatibility_matrix.F.xml
e modificata come segue:
<hal format="hidl" optional="true"> <name>android.hardware.broadcastradio</name> <version>1.0-1</version> <interface> <name>IBroadcastRadioFactory</name> <instance>default</instance> </interface> </hal>
Aggiornamento di un HAL (principale)
Durante lo sviluppo, quando un HAL ha un aggiornamento della versione principale all'attuale versione FCM di F
, la nuova versione principale x.0
viene aggiunta a compatibility_matrix.F.xml
con le seguenti impostazioni optional
:
-
optional="false"
solo con la versionex.0
, se i dispositivi forniti conV = F
devono essere avviati conx.0
. -
optional="false"
ma insieme alle versioni principali precedenti nello stesso tag<hal>
, se i dispositivi forniti conV = F
devono essere avviati con questo HAL, ma possono essere avviati con una versione principale precedente. -
optional="true"
se i dispositivi forniti conV = F
non devono avviare l'HAL.
Ad esempio, Android 9 introduce health@2.0
come aggiornamento della versione principale dell'HAL 1.0 e depreca l'HAL 1.0. La versione precedente, health@1.0
, è facoltativa per i dispositivi che vengono avviati con Android 8.0 e Android 8.1. I dispositivi che vengono avviati con Android 9 non devono fornire l'HAL 1.0 deprecato e devono invece fornire la nuova versione 2.0. In compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
e 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>
Questa voce viene copiata in compatibility_matrix.F.xml
e modificata come segue:
<hal format="hidl" optional="false"> <name>android.hardware.health</name> <version>2.0</version> <interface> <name>IHealth</name> <instance>default</instance> </interface> </hal>
Restrizioni:
- Poiché l'HAL 2.0 è in
compatibility_matrix.3.xml
conoptional="false"
, i dispositivi che vengono avviati con Android 9 devono essere forniti con l'HAL 2.0. - Poiché l'HAL 1.0 non è in
compatibility_matrix.3.xml
, i dispositivi che vengono avviati con Android 9 non devono fornire l'HAL 1.0 (poiché questo HAL è considerato deprecato). - Poiché l'HAL 1.0 è presente in legacy/1/2.xml (versioni FCM precedenti con cui può funzionare Android 9) come HAL opzionale, il framework Android 9 può ancora funzionare con l'HAL 1.0 (che non è considerato una versione HAL rimossa ).
Nuove versioni FCM
Il processo di rilascio di una versione FCM sulla partizione di sistema viene eseguito esclusivamente da Google come parte di un rilascio AOSP e include i seguenti passaggi:
- Assicurarsi che il
compatibility_matrix.F.xml
abbia l'attributolevel="F"
. - Assicurati che tutti i dispositivi vengano compilati e avviati.
- Aggiorna i test VTS per garantire che i dispositivi avviati con il framework più recente (basato sul livello API di spedizione) abbiano la versione FCM di destinazione
V >= F
. - Pubblica file su AOSP.
Ad esempio, i test VTS assicurano che i dispositivi che si avviano con Android 9 abbiano una versione FCM di destinazione >= 3.
Inoltre, gli FCM product e system_ext possono anche elencare i requisiti per ciascuna versione FCM della piattaforma. Il rilascio delle versioni FCM sulle partizioni product e system_ext viene eseguito rispettivamente dal proprietario di queste immagini. I numeri di versione FCM sulle partizioni product e system_ext devono essere allineati con quelli sulla partizione di sistema. Analogamente alle versioni FCM sulla partizione di sistema, la matrice di compatibilità alla versione FCM F nelle partizioni product e system_ext riflette i requisiti su un dispositivo con la versione FCM di destinazione F.
Deprecazione della versione HAL
La deprecazione di una versione HAL è una decisione dello sviluppatore (ad esempio, per gli HAL AOSP, Google prende la decisione). Potrebbe accadere quando viene rilasciata una versione HAL superiore (minore o maggiore).
Deprecare un dispositivo HAL
Quando un determinato dispositivo HAL foo@xy
è deprecato alla versione FCM F
, significa che qualsiasi dispositivo avviato con la versione FCM di destinazione V = F
o successiva non deve implementare foo
alla versione xy
o qualsiasi versione precedente a xy
. Una versione HAL deprecata è ancora supportata dal framework per l'aggiornamento dei dispositivi.
Quando viene rilasciata la versione F
di FCM, una versione HAL foo@xy
viene considerata deprecata se la versione HAL specifica non è dichiarata esplicitamente nell'FCM più recente per la versione FCM di destinazione V = F
. Per i dispositivi che si avviano con V = F
, è vera una delle seguenti condizioni:
- Il framework richiede una versione superiore (maggiore o minore);
- Il framework non richiede più l'HAL.
Ad esempio, in Android 9, health@2.0
viene introdotto come aggiornamento della versione principale di 1.0 HAL. health@1.0
viene rimosso da compatibility_matrix.3.xml
ma è presente in compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
e compatibility_matrix.2.xml
. Pertanto, health@1.0
è considerato deprecato.
Deprecare un framework HAL
Quando un determinato framework HAL foo@xy
è deprecato alla versione FCM F
, significa che qualsiasi dispositivo avviato con la versione FCM di destinazione V = F
o successiva non deve aspettarsi che il framework fornisca foo
alla versione xy
o a qualsiasi versione precedente a xy
. Una versione HAL obsoleta è ancora fornita dal framework per l'aggiornamento dei dispositivi.
Quando viene rilasciata la versione F
di FCM, una versione HAL foo@xy
viene considerata obsoleta se il manifest del framework specifica max-level=" F - 1 "
per foo@xy
. Per i dispositivi che si avviano con V = F
, il framework non fornisce l'HAL foo@xy
. La matrice di compatibilità dei dispositivi sui dispositivi che vengono avviati con V = F
non deve elencare gli HAL del framework con max-level < V
.
Ad esempio, in Android 12, schedulerservice@1.0
è deprecato. Il suo attributo max-level
è impostato su 5
, la versione FCM introdotta in Android 11. Vedi Android 12 framework manifest .
Rimozione del supporto per le versioni FCM di destinazione
Quando i dispositivi attivi di una determinata versione FCM di destinazione V
scendono al di sotto di una determinata soglia, la versione FCM di destinazione viene rimossa dall'S F impostato della successiva versione del framework. Questo viene fatto da entrambi i seguenti passaggi:
- Rimozione
compatibility_matrix.V.xml
dalle regole di compilazione (in modo che non sia installata nell'immagine di sistema) ed eliminazione di qualsiasi codice implementato o dipendente dalla funzionalità rimossa. - Rimozione degli HAL del framework con
max-level
inferiore o uguale aV
dal manifesto del framework ed eliminazione di qualsiasi codice che implementa gli HAL del framework rimossi.
I dispositivi con una versione FCM di destinazione al di fuori di S F per una determinata versione del framework non possono eseguire l'aggiornamento a tale versione.
Stato della versione HAL
Le seguenti sezioni descrivono (in ordine cronologico) i possibili stati di una versione HAL.
Inedito
Per i dispositivi HAL, se una versione HAL non è in nessuna delle matrici di compatibilità pubbliche e bloccate, è considerata non rilasciata e probabilmente in fase di sviluppo. Sono incluse le versioni HAL che si trovano solo in compatibility_matrix.F.xml
. Esempi:
- Durante lo sviluppo di Android 9 l'HAL
health@2.0
era considerato un HAL inedito ed era presente solo incompatibiility_matrix.3.xml
. - L'HAL
teleportation@1.0
non è in nessuna matrice di compatibilità rilasciata ed è anche considerato un HAL non rilasciato.
Per gli HAL del framework, se una versione HAL si trova solo nel manifest del framework di un ramo di sviluppo non correlato, viene considerata non rilasciata.
Rilasciato e attuale
Per i dispositivi HAL, se una versione HAL è in una matrice di compatibilità pubblica e bloccata, viene rilasciata. Ad esempio, dopo che la versione 3 di FCM è stata bloccata e pubblicata su AOSP, l'HAL health@2.0
è considerato una versione HAL rilasciata e corrente.
Se una versione HAL si trova in una matrice di compatibilità pubblica e bloccata che ha la versione FCM più alta, la versione HAL è corrente (ovvero non deprecata). Ad esempio, le versioni HAL esistenti (come nfc@1.0
introdotte in compatibility_matrix.legacy.xml
) che continuano a esistere in compatibility_matrix.3.xml
sono anch'esse considerate versioni HAL rilasciate e correnti.
Per gli HAL del framework, se una versione HAL è nel manifest del framework dell'ultimo ramo rilasciato senza l'attributo max-level
o (insolitamente) un max-level
uguale o superiore alla versione FCM rilasciata in questo ramo, è considerata un rilascio e la versione corrente di HAL. Ad esempio, il displayservice
HAL è rilasciato e attuale in Android 12, come specificato dal Android 12framework manifest
.
Rilasciato ma deprecato
Per gli HAL del dispositivo, una versione HAL è deprecata se e solo se sono soddisfatte tutte le seguenti condizioni:
- Viene rilasciato.
- Non è nella matrice di compatibilità pubblica e congelata che ha la versione FCM più alta.
- È in una matrice di compatibilità pubblica e congelata che il framework supporta ancora.
Esempi:
- L'HAL
health@1.0
si trova incompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
ecompatibility_matrix.2.xml
, ma non incompatibility_matrix.3.xml
. Quindi è considerato deprecato in Android 9. - Il power HAL ha un aggiornamento della versione minore in Android 9, ma
power@1.0
è ancora incompatibility_matrix.3.xml
.-
power@1.0
è incompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
ecompatibility_matrix.2.xml
. -
compatibility_matrix.3.xml
hapower@1.0-1
.
-
Quindi power@1.0
è attuale, ma NON deprecato, in Android 9.
Per gli HAL del framework, se una versione HAL è nel manifest del framework dell'ultimo ramo rilasciato con un attributo max-level
inferiore alla versione FCM rilasciata in questo ramo, viene considerata una versione HAL rilasciata ma deprecata. Ad esempio, l'HAL schedulerservice
viene rilasciato ma deprecato in Android 12, come specificato dal Android 12framework manifest
.
RIMOSSO
Per gli HAL del dispositivo, una versione HAL viene rimossa se e solo se sono vere le seguenti condizioni:
- È stato precedentemente rilasciato.
- Non è in alcuna matrice di compatibilità pubblica e congelata supportata dal framework.
Le matrici di compatibilità che sono pubbliche, congelate, ma non supportate dal framework vengono mantenute nella base di codice per definire le versioni HAL rimosse impostate in modo che i test VTS possano essere scritti per garantire che gli HAL rimossi non si trovino su nuovi dispositivi.
Per gli HAL del framework, una versione HAL viene rimossa se e solo se vengono soddisfatte le seguenti condizioni:
- È stato precedentemente rilasciato.
- Non si trova in alcun framework manifest dell'ultimo ramo rilasciato.
FCM legacy
Target FCM Version legacy è un valore speciale per tutti i dispositivi non Treble. L'FCM legacy, compatibility_matrix.legacy.xml
, elenca i requisiti del framework sui dispositivi legacy (ovvero i dispositivi lanciati prima di Android 8.0).
Se questo file esiste per un FCM con versione F
, qualsiasi dispositivo non Treble può essere aggiornato a F
a condizione che il manifest del dispositivo sia compatibile con questo file. La sua rimozione segue la stessa procedura degli FCM per altre versioni FCM di destinazione (rimosse dopo che il numero di dispositivi attivi pre-8.0 scende al di sotto di una certa soglia).
Versioni FCM rilasciate
L'elenco delle versioni FCM rilasciate è disponibile in hardware/interfaces/compatibility_matrices
.
Per trovare la versione FCM rilasciata con una versione Android specifica, vedere Level.h
.