Salute Android

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 helper 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:

Salute in Android 8.x

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 collega staticamente a libhealthd_android , libbatterymonitor e libbatteryservice .
  • 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à:

Modalità di ricarica e ripristino in modalità off in Android 8.x

Figura 2. Stato in Android 8.x, ricarica in modalità off e modalità di ripristino

  • charger si collega staticamente a libhealthd. BOARD , libhealthd_charger e libbatterymonitor .
  • il ripristino si collega staticamente a libhealthd. BOARD e libbatterymonitor .

La salute su Android 9

In Android 9, il componente integrità funziona come dettagliato nel diagramma seguente: La salute su Android 9

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à:

Carica e ripristino in modalità off in Android 9

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à:

Infrastruttura sanitaria HAL 2.1

Figura 5. Infrastruttura HAL 2.1 sanitaria

La salute su Android 13

In Android 13 viene introdotto l'HAL AIDL per la salute. Il componente sanitario funziona come dettagliato nel diagramma seguente:

Infrastruttura HAL AIDL sanitaria

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 sostituire IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , per sostituire IBatteryPropertiesRegistrar.unregisterListener
  • update , per sostituire IBatteryPropertiesRegistrar.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 a getHealthInfo
  • 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 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à:

Diagramma UML HAL di salute 2.1

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 a HealthInfo per supportare la ricarica tramite dock.

Implementazione

Vedere il seguente diagramma UML per le classi utili all'implementazione dell'HAL di integrità:

Diagramma UML AIDL HAL sanitario

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 del 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 .