Integrità del sistema Android

Android 13 include android.hardware.health AIDL HAL, una conversione da health@2.1 HAL. Questa nuova HAL presenta i seguenti vantaggi:

  • Rimuovere le API inutilizzate relative al caricabatterie
  • Rimuovi StorageAttribute non utilizzati e i campi correlati
  • Supporta la ricarica con la base di ricarica.

Android 11 include android.hardware.health HAL 2.1, un aggiornamento della versione secondaria di health@2.0 HAL. Questa nuova HAL presenta i seguenti vantaggi:

  • Separazione più chiara tra il framework e il codice del fornitore.
  • Maggiore libertà per la personalizzazione dei fornitori nei report sulle informazioni sanitarie.
  • Informazioni più complete sullo stato del dispositivo, non solo sulla batteria.

La documentazione per l'implementazione di Health 2.1 HAL è 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 che non vengono lanciati con Android 11 o 12, ma che prevedono di aggiornare l'immagine del fornitore alla matrice di compatibilità del framework di destinazione versione 5 (rilasciata in Android 11) o 6 (rilasciata in Android 12) devono rimuovere le implementazioni HAL 2.0 esistenti e fornire HAL 2.1 o HAL AIDL. I dispositivi che non vengono lanciati con Android 11 e che non prevedono di aggiornare l'immagine del fornitore sono inoltre consigliati per fornire HAL 2.1 o AIDL.

AOSP include più librerie di assistenza progettate per aiutarti a implementare l'HAL 2.1 e 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 target (rilasciata in Android 13), devono rimuovere le implementazioni HIDL HAL esistenti e fornire l'HAL AIDL. È consigliabile fornire l'HAL AIDL anche per i dispositivi che non vengono lanciati con Android 13 e che non prevedono di aggiornare l'immagine del fornitore.

AOSP include più librerie di assistenza progettate per aiutarti a implementare l'HAL AIDL e la transizione dai vecchi HAL HIDL.

Terminologia

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

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

Salute in Android 11 e 12

In Android 11 e 12, il componente di integrità 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)      ] |
+-------------------------------------+

Per le diverse modalità, consulta il seguente diagramma semplificato:

Infrastruttura HIDL HAL 2.1 per la salute

Figura 1. Infrastruttura HAL HIDL per la salute 2.1.

Salute in Android 13

In Android 13 viene introdotto l'HAL AIDL per la salute. La Figura 2 mostra in dettaglio il funzionamento del componente relativo alla salute:

Infrastruttura HAL AIDL per la salute

Figura 2. Infrastruttura HAL AIDL per la salute.

Interfaccia HIDL HAL 2.1

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

L'interfaccia principale, IHealth, fornisce le seguenti funzioni aggiuntive:

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

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

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

  • Livello di capacità della batteria
  • Tempo di ricarica della batteria fino al completamento (in secondi)
  • Capacità di progettazione della ricarica completa della batteria (in μAh)

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

Diagramma UML di Health 2.1 HAL

Figura 3. Diagramma UML di Health HAL 2.1.

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

Versione 1 dell'interfaccia HAL AIDL

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

Modifiche alle API

L'HAL AIDL versione 1 supporta API simili all'HAL HIDL 2.1. Rispetto all'interfaccia HIDL 2.1, nell'API sono state apportate le seguenti modifiche:

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

Implementazione

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

Diagramma UML di Health AIDL HAL

Figura 4. Diagramma UML di Health AIDL HAL.

Per informazioni sull'implementazione del servizio AIDL Health, vedi Implementazione dell'HAL AIDL Health.

Ripristino

Android 13 supporta Binder nel ripristino. L'installazione del servizio AIDL Health per il ripristino consente l'esecuzione in modalità di ripristino.

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

Caricabatterie

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

Proprietà di sistema del caricabatterie

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