Android 9 include android.hardware.health
HAL 2.0, un importante aggiornamento della versione da Health@1.0 HAL. Questo nuovo HAL presenta i seguenti vantaggi:
- Separazione più netta tra framework e codice del fornitore.
- Depreca il demone
healthd
non necessario. - Maggiori gradi di libertà per la personalizzazione del fornitore nei report sulle informazioni sanitarie.
- Più informazioni sullo stato del dispositivo oltre alla semplice batteria.
Android 11 include android.hardware.health
HAL 2.1, un aggiornamento della versione minore da Health@2.0 HAL. Questo nuovo HAL presenta i seguenti vantaggi:
- Più facile da implementare
- Migliore conformità con le API HAL 2.0 esistenti
- Migliore separazione degli acuti nel codice di ricarica in modalità off
- Migliore supporto per il framework per indicare lo stato della batteria del dispositivo
Android 13 include android.hardware.health
AIDL HAL, una conversione da Health@2.1 HAL. Questo nuovo HAL presenta i seguenti vantaggi:
- Rimuovi le API relative al caricabatterie inutilizzate
- Rimuovi
StorageAttribute
inutilizzato e i campi correlati - Supporta la ricarica del dock.
Requisiti
Dispositivi con Android 9 e Android 10
I dispositivi avviati con Android 9 devono fornire l'HAL 2.x (e non devono fornire l'HAL 1.0) o l'HAL AIDL. I dispositivi che non vengono avviati con Android 9 ma che prevedono di aggiornare l'immagine del fornitore alla matrice di compatibilità del framework di destinazione versione 3 (rilasciata in Android 9) devono rimuovere le implementazioni HAL 1.0 esistenti e fornire l'HAL 2.x o l'HAL AIDL.
AOSP include più librerie di supporto progettate per aiutarti a implementare l'HAL 2.0 e la transizione dal vecchio HAL 1.0.
Dispositivi con Android 11 e Android 12
I dispositivi avviati con Android 11 devono fornire l'HAL 2.1 (e non devono fornire l'HAL 1.0 o 2.0) o l'HAL AIDL. I dispositivi che non vengono avviati con Android 11 ma che prevedono di aggiornare l'immagine del fornitore alla matrice di compatibilità del framework di destinazione versione 5 (rilasciata in Android 11) devono rimuovere le implementazioni HAL 2.0 esistenti e fornire l'HAL 2.1 o l'HAL AIDL. Si consiglia inoltre ai dispositivi che non si avviano con Android 11 e che non prevedono di aggiornare l'immagine del fornitore di fornire l'HAL 2.1.
AOSP include più librerie di supporto progettate per aiutarti a implementare l'HAL 2.1 e la transizione dal vecchio HAL 1.0.
Dispositivi con Android 13 e versioni successive
I dispositivi avviati con Android 13 devono fornire AIDL HAL (e non devono fornire HIDL HAL). I dispositivi che non vengono avviati con Android 13 ma che prevedono di aggiornare l'immagine del fornitore alla matrice di compatibilità del framework di destinazione versione 7 (rilasciata in Android 13) devono rimuovere le implementazioni HAL HIDL esistenti e fornire l'HAL AIDL. Si consiglia inoltre ai dispositivi che non si avviano con Android 13 e che non prevedono di aggiornare l'immagine del fornitore di fornire l'HAL AIDL.
I dispositivi non devono fornire l'HAL HIDL 1.0.
AOSP include più librerie di supporto progettate per aiutarti a implementare l'HAL AIDL e la transizione dai vecchi HAL HIDL.
Terminologia
- salute@1.0 : abbreviazione di
android.hardware.health@1.0
. Si riferisce all'integrità HIDL HAL versione 1.0 rilasciata in Android 8.0. - salute@2.0 : abbreviazione di
android.hardware.health@2.0
. Si riferisce all'integrità HIDL HAL versione 2.0 rilasciata in Android 9. - salute@2.1 : abbreviazione di
android.hardware.health@2.1
. Si riferisce all'integrità HIDL HAL versione 2.1 rilasciata in Android 11. - salute AIDL HAL : abbreviazione di
android.hardware.health
.- La versione 1 viene rilasciata in Android 13.
- caricabatterie : eseguibile in esecuzione in modalità di ricarica off che visualizza l'animazione di ricarica del telefono.
- ripristino : eseguibile in esecuzione in modalità di ripristino che deve recuperare le informazioni sulla batteria.
- Healthd : demone legacy in esecuzione in Android che recupera informazioni relative alla salute e le fornisce al framework.
- storaged : demone in esecuzione in Android che recupera le informazioni di archiviazione e le fornisce al framework.
Salute in Android 8.x
In Android 8.x, il componente integrità funziona come dettagliato nel diagramma seguente:
Figura 1 . Salute in Android 8.x.
In questo diagramma:
- Una (1) chiamata binder e una (1) chiamata hwbinder vengono utilizzate dal framework per comunicare con l'hardware.
-
healthd
si collega staticamente alibhealthd_android
,libbatterymonitor
elibbatteryservice
. - salute@1.0-impl si collega staticamente a
libhealthd. BOARD
.
Ogni scheda può personalizzare un diverso libhealthd. BOARD
; in fase di creazione viene determinato a cosa si collegano caricabatterie, salute@1.0-impl e ripristino.
Per le altre modalità:
Figura 2. Stato in Android 8.x, ricarica in modalità off e modalità di ripristino.
- charger si collega staticamente a
libhealthd. BOARD
,libhealthd_charger
elibbatterymonitor
. - il ripristino si collega staticamente a
libhealthd. BOARD
elibbatterymonitor
.
La salute su Android 9
In Android 9, il componente integrità funziona come dettagliato nel diagramma seguente:
Figura 3 . La salute su Android 9.
Il framework tenta di recuperare il servizio health@2.0 da hwservicemanager
. Se fallisce, chiama Health@1.0 (in Android 8.x). Il percorso del codice legacy viene mantenuto in modo che l'immagine del sistema Android 9 sia compatibile con l'immagine del fornitore Android 8.x. Il framework non recupera informazioni da entrambi gli HAL perché sul dispositivo può esistere una sola versione del servizio (1.0 o 2.0).
Per le altre modalità:
Figura 4. Stato in Android 9, ricarica in modalità off e modalità di ripristino.
La salute su Android 11
In Android 11, il componente sanitario funziona come dettagliato nel diagramma seguente:
[system]
| getService()
V
[health@2.1-service]
| getService(stub=true)
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
Se l'implementazione di Health 2.1 non esiste, il sistema torna al percorso del codice legacy come descritto nelle sezioni precedenti
Per le altre modalità:
[ charger ]
| getService() | (legacy code path)
V +-------------------------------------------------+
[health@2.1-service] |
| getService(stub=true) |
V |
[ health@2.0-impl-2.1-<device>.so ] |
| | (device-dependent linkage) |
V V |
+---------Helper libs for impl--------+ [libhealthd.device] |
| [libhealthloop (uevent, wakealarm)] | |
| [libhealth2impl (IHealth impl) ] | <---------------------------------+
| [libbatterymonitor (battery) ] |
+-------------------------------------+
[recovery]
| getService() w/o hwservicemanager
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
Vedere il seguente diagramma semplificato per le diverse modalità:
Figura 5. Infrastruttura HAL 2.1 sanitaria.
La salute su Android 13
In Android 13 viene introdotto l'HAL AIDL sanitario. Il componente sanitario funziona come dettagliato nel diagramma seguente:
Figura 6. Infrastruttura HAL AIDL sanitaria.
Interfaccia HIDL HAL 2.0
L'HAL Health@2.0 fornisce al framework le stesse funzionalità del vecchio demone Healthd. Fornisce inoltre API simili a quelle precedentemente fornite da Healthd come servizio legante (ad esempio IBatteryPropertiesRegistrar ).
L'interfaccia principale, IHealth , fornisce le seguenti funzioni:
-
registerCallback
, per sostituireIBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
, per sostituireIBatteryPropertiesRegistrar.unregisterListener
-
update
, per sostituireIBatteryPropertiesRegistrar.scheduleUpdate
-
IBatteryPropertiesRegistrar.getProperties
sono sostituiti dai seguenti:-
getChargeCounter
-
getCurrentNow
-
getCurrentAverage
-
getCapacity
-
getEnergyCounter
-
getChargeStatus
-
getHealthInfo
-
Inoltre, IHealth
fornisce le seguenti nuove API per storaged
per recuperare informazioni relative allo spazio di archiviazione specifiche del fornitore:
-
getStorageInfo
-
getDiskStats
Una nuova struttura, @2.0::HealthInfo
, viene restituita tramite callback e getHealthInfo
. Questa struttura contiene tutte le informazioni sullo stato del dispositivo disponibili tramite HAL Health@2.0, tra cui:
- Informazioni sulla ricarica (AC/USB/wireless, corrente, voltaggio, ecc.)
- Informazioni sulla batteria (presenza, livello della batteria, corrente, voltaggio, carica, tecnologia, ecc.)
- Informazioni di archiviazione (informazioni sul dispositivo di archiviazione, statistiche sul disco)
Per informazioni sull'implementazione del servizio Health 2.0, vedere Implementazione di Health 2.0 .
Interfaccia HIDL HAL 2.1
L'HAL Health@2.1 supporta la ricarica in modalità off e fornisce ulteriori informazioni sulla batteria.
L'interfaccia principale, IHealth , fornisce le seguenti funzioni aggiuntive
-
getHealthConfig
: per recuperare la configurazione di questo HAL -
getHealthInfo_2_1
: un aggiornamento della versione minore agetHealthInfo
-
shouldKeepScreenOn
: per determinare se lo schermo deve essere mantenuto acceso in modalità caricabatterie
Inoltre, l'implementazione di @2.1::IHealth
è necessaria per supportare @2.1::IHealthInfoCallback
per le funzioni registerCallback
e unregisterCallback
ereditate. La nuova interfaccia di callback restituisce le informazioni sull'integrità al client utilizzando la funzione healthInfoChanged_2_1
anziché la funzione healthInfoChanged
ereditata.
Una nuova struttura, @2.1::HealthInfo
, viene restituita tramite callback e getHealthInfo_2_1
. Questa struttura contiene informazioni aggiuntive sullo stato del dispositivo disponibili tramite HAL Health@2.0, tra cui:
- Livello di capacità della batteria
- Tempo di ricarica completa della batteria adesso (in secondi)
- Capacità di progetto della batteria a carica completa (in μAh)
Vedere il seguente diagramma UML per le classi utili all'implementazione dell'HAL di integrità:
Figura 7. Diagramma UML HAL 2.1 di salute.
Per informazioni sull'implementazione del servizio sanitario 2.1, vedere Implementazione del servizio sanitario 2.1 .
Interfaccia AIDL HAL versione 1
Modifiche all'API
L'HAL AIDL versione 1 supporta API simili all'HAL HIDL 2.1. Rispetto all'interfaccia HIDL 2.1, nell'API vengono apportate le seguenti modifiche:
- Le API relative al caricabatterie introdotte in HIDL HAL 2.1 non vengono trasferite nell'AIDL HAL. Poiché la funzionalità di addebito in modalità off si trova solo nella partizione
/vendor
, le API sull'interfaccia del fornitore non sono necessarie. Per implementare correttamente la ricarica in modalità off, vedere il caricabatterie di seguito. - Il tipo
StorageAttribute
e i campi correlati vengono rimossi perché non utilizzati. -
chargerDockOnline
viene aggiunto aHealthInfo
per supportare la ricarica tramite dock.
Implementazione
Vedere il seguente diagramma UML per le classi utili all'implementazione dell'HAL di integrità:
Figura 8. Diagramma Health AIDL HAL UML.
Per informazioni sull'implementazione del servizio AIDL di integrità, vedere Implementazione dell'HAL AIDL di integrità .
Recupero
Android 13 supporta il raccoglitore in fase di ripristino. L'installazione del servizio Health AIDL sul ripristino ne consente l'esecuzione in modalità di ripristino.
Per informazioni sull'installazione del servizio AIDL di integrità per il ripristino, vedere quanto segue:
Caricabatterie
La funzionalità di ricarica in modalità off viene spostata da /system
a /vendor
. Per i dispositivi avviati con Android 13, se supportano la ricarica in modalità off, il file binario del servizio HAL deve supportare la modalità caricabatterie. Per fare ciò, fare riferimento all'implementazione del caricabatterie .
Proprietà del sistema di ricarica
Le proprietà ro.charger.*
non sono più leggibili dal binario charger
in /vendor
. Se il tuo dispositivo ha una delle proprietà di sistema ro.charger.*
impostate, fai riferimento alle proprietà di sistema per il caricabatterie .