Integrità del sistema Android

Android 13 include l'HAL AIDL android.hardware.health, una conversione dall'HAL health@2.1. Questo nuovo HAL presenta i seguenti vantaggi:

  • Rimuovi le API relative ai caricabatterie inutilizzate
  • Rimuovi StorageAttribute e i campi correlati inutilizzati
  • Supporta la ricarica con la base.

Android 11 include android.hardware.health HAL 2.1, un upgrade minore della versione da HAL health@2.0. Questo nuovo HAL presenta i seguenti vantaggi:

  • Separazione più chiara tra il framework e il codice del fornitore.
  • Maggiore libertà di personalizzazione dei fornitori nei report sulle informazioni sanitarie.
  • Più informazioni sull'integrità del dispositivo, non solo sulla batteria.

La documentazione per l'implementazione dell'HAL per la salute 2.1 è disponibile in questa pagina come riferimento.

Requisiti

Questa sezione contiene i requisiti per Android 11, 12 e 13 o versioni successive.

Dispositivi con Android 11 e Android 12

I dispositivi lanciati con Android 11 e 12 devono fornire l'HAL 2.1 o l'HAL AIDL. I dispositivi non avviati con Android 11 o 12, ma che prevedono di aggiornare l'immagine del fornitore alla versione 5 (rilasciata in Android 11) o 6 (rilasciata in Android 12) della matrice di compatibilità del framework di destinazione devono rimuovere le implementazioni HAL 2.0 esistenti e fornire l'HAL 2.1 o l'HAL AIDL. Per i dispositivi che non vengono avviati con Android 11 e che non prevedono di aggiornare l'immagine del fornitore, è consigliabile fornire anche l'HAL 2.1 o AIDL.

AOSP include più librerie di supporto progettate per aiutarti a implementare l'HAL 2.1 e a eseguire la transizione dalle vecchie HAL HIDL.

Dispositivi con Android 13 e versioni successive

I dispositivi lanciati con Android 13 devono fornire l'HAL AIDL (e non devono fornire l'HAL HIDL). I dispositivi che non vengono lanciati con Android 13, ma che prevedono di aggiornare l'immagine del fornitore alla versione 7 della matrice di compatibilità del framework di destinazione (rilasciata in Android 13), devono rimuovere le implementazioni HAL HIDL esistenti e fornire l'HAL AIDL. È inoltre consigliato di fornire l'HAL AIDL ai dispositivi che non vengono lanciati con Android 13 e che non prevedono di aggiornare l'immagine del fornitore.

AOSP include più librerie di supporto progettate per aiutarti a implementare l'HAL AIDL e la transizione dalle vecchie HAL HIDL.

Terminologia

Di seguito sono riportati i termini che devi conoscere prima di leggere il resto della documentazione relativa allo stato del sistema Android:

health@2.1
Abbreviazione di android.hardware.health@2.1. La versione 1 dell'HIDL per la salute è stata rilasciata in Android 11.
HAL AIDL per la salute
Abbreviazione di android.hardware.health. La versione 1 dell'HAL AIDL per la salute è stata rilasciata in Android 13.
caricabatterie
File eseguibile in esecuzione in modalità di ricarica off che mostra l'animazione di ricarica dello smartphone.
recovery
File eseguibile in esecuzione in modalità di ripristino che deve recuperare le informazioni sulla batteria.
storaged
Demone che recupera le informazioni sullo spazio di archiviazione e le fornisce al framework.

Salute in Android 11 e 12

In Android 11 e 12, il componente per la salute funziona come descritto nel seguente diagramma:

[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)      ] |
+-------------------------------------+

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)      ] |
+-------------------------------------+

Consulta il seguente diagramma semplificato per le diverse modalità:

Infrastruttura HAL 2.1 HIDL per la salute

Figura 1. Infrastruttura HAL 2.1 HIDL per la salute.

Salute in Android 13

In Android 13 viene introdotto l'HAL AIDL per la salute. La Figura 2 illustra in dettaglio il funzionamento del componente stato di salute:

Infrastruttura HAL AIDL per la salute

Figura 2. Infrastruttura HAL AIDL per la salute.

Interfaccia HAL HIDL 2.1

L'HAL health@2.1 supporta la ricarica in modalità off e fornisce maggiori informazioni sulla batteria.

L'interfaccia principale, IHealth, offre le seguenti funzioni aggiuntive

  • getHealthConfig: per recuperare la configurazione di questo HAL
  • getHealthInfo_2_1: un upgrade a una versione minore a getHealthInfo
  • shouldKeepScreenOn: per determinare se lo schermo deve rimanere acceso in modalità caricabatterie

Inoltre, l'implementazione di @2.1::IHealth è obbligatoria per supportare @2.1::IHealthInfoCallback per le sue funzioni registerCallback e unregisterCallback ereditate. La nuova interfaccia di callback restituisce al cliente informazioni sullo stato di salute utilizzando la funzione healthInfoChanged_2_1 anziché la funzione healthInfoChanged ereditata.

Viene restituita una nuova struttura, @2.1::HealthInfo, utilizzando i callback e getHealthInfo_2_1. Questa struttura contiene ulteriori informazioni sullo stato del dispositivo disponibile tramite l'HAL health@2.0, tra cui:

  • Livello di capacità della batteria
  • Tempo di ricarica della batteria fino a carica completa (in secondi)
  • Capacità di progetto della batteria a ricarica completa (in μAh)

La Figura 3 mostra un diagramma UML delle classi utili per l'implementazione dell'HAL per la salute:

Diagramma UML HAL di Health 2.1

Figura 3. Diagramma UML di Health HAL 2.1.

Per informazioni sull'implementazione del servizio Salute 2.1, consulta Implementazione di Salute 2.1.

Interfaccia HAL AIDL versione 1

Questa sezione contiene informazioni sulla versione 1 dell'interfaccia HAL AIDL.

Modifiche all'API

L'HAL AIDL versione 1 supporta API simili a quelle dell'HAL HIDL 2.1. Rispetto all'interfaccia HIDL 2.1, nell'API sono stati modificati i seguenti elementi:

  • Le API relative al caricabatterie introdotte in HIDL HAL 2.1 non vengono trasferite all'HAL AIDL. Poiché la funzionalità di ricarica in modalità off è presente solo nella partizione/vendor, le API nell'interfaccia del fornitore non sono necessarie. Per implementare correttamente la ricarica in modalità off, consulta caricabatterie.
  • Il tipo StorageAttribute e i campi correlati vengono rimossi perché non vengono utilizzati.
  • chargerDockOnline viene aggiunto a HealthInfo per supportare la ricarica con la base.

Implementazione

La Figura 4 mostra un diagramma UML delle classi utili per l'implementazione dell'HAL AIDL per la salute:

Diagramma UML HAL AIDL per la salute

Figura 4. Diagramma UML HAL AIDL per la salute.

Per informazioni sull'implementazione del servizio AIDL per la salute, consulta Implementazione dell'HAL AIDL per la salute.

Ripristino

Android 13 supporta il binder in recovery. L'installazione del servizio AIDL per la salute nel recupero consente di eseguirlo in modalità di recupero.

Per informazioni sull'installazione del servizio AIDL per la salute nel recupero, consulta quanto segue:

Caricabatterie

La funzionalità di ricarica in modalità off è stata spostata da /system a /vendor. Per i dispositivi lanciati con Android 13, se supportano la ricarica in modalità off, il file binario del servizio HAL deve supportare la modalità caricabatterie. Per farlo, consulta la sezione sull'implementazione del caricabatterie.

Proprietà del sistema di ricarica

Le proprietà ro.charger.* non sono più leggibili dal file binario charger in /vendor. Se sul tuo dispositivo sono impostate una o più proprietà di sistema ro.charger.*, consulta le proprietà di sistema per il caricabatterie.