Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Android Health

Android 9 include android.hardware.health HAL 2.0, un aggiornamento della versione principale di health@1.0 HAL. Questo nuovo HAL presenta i seguenti vantaggi:

  • Separazione più netta tra framework e codice del fornitore.
  • healthd daemon healthd non necessario.
  • Maggiori gradi di libertà per la personalizzazione del fornitore nei report di informazioni sulla salute.
  • Più informazioni sulla salute del dispositivo rispetto alla semplice batteria.

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

  • Più facile da implementare
  • Migliore conformità con le API 2.0 HAL 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

Requisiti

I dispositivi che si avviano con Android 9 devono fornire l'HAL 2.0 (e non devono fornire l'HAL 1.0). I dispositivi che non si avviano con Android 9 ma che intendono aggiornare l'immagine del fornitore a Target Framework Compatibility Matrix versione 3 (rilasciata in Android 9) devono rimuovere le implementazioni HAL 1.0 esistenti e fornire l'HAL 2.0.

I dispositivi che si avviano con Android 11 devono fornire l'HAL 2.1 (e non devono fornire l'HAL 1.0 o 2.0). I dispositivi che non si avviano con Android 11 ma che intendono aggiornare l'immagine del fornitore a Target Framework Compatibility Matrix versione 5 (rilasciata in Android 11) devono rimuovere le implementazioni HAL 2.0 esistenti e fornire l'HAL 2.1. Anche i dispositivi che non si avviano con Android 11 e che non prevedono di aggiornare l'immagine del fornitore sono consigliati per 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.

Terminologia

  • health@1.0 : abbreviazione di android.hardware.health@1.0 . Si riferisce alla salute HIDL HAL versione 1.0 rilasciata in Android 8.0.
  • health@2.0 : abbreviazione di android.hardware.health@2.0 . Si riferisce alla salute HIDL HAL versione 2.0 rilasciata in Android 9.
  • health@2.1 : abbreviazione di android.hardware.health@2.1 . Si riferisce alla salute HIDL HAL versione 2.1 rilasciata su Android 11.
  • caricabatterie : eseguibile in esecuzione in modalità di ricarica off che mostra 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 su Android che recupera le informazioni relative alla salute e le fornisce al framework.
  • storaged : demone in esecuzione su Android che recupera le informazioni di archiviazione e le fornisce al framework.

Salute in Android 8.x

In Android 8.x, il componente di integrità funziona come descritto 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 .
  • health@1.0-impl si collega staticamente a libhealthd. BOARD .

Ogni scheda può personalizzare una diversa libhealthd. BOARD ; al momento della compilazione viene determinato a quale collegamento caricatore, health@1.0-impl e ripristino.

Per altre modalità:

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

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

  • caricabatterie si collega staticamente a libhealthd. BOARD , libhealthd_charger e libbatterymonitor .
  • recovery si collega staticamente a libhealthd. BOARD e libbatterymonitor .

Salute in Android 9

In Android 9, il componente di integrità funziona come descritto nel diagramma seguente: Salute in Android 9

Figura 3 . Salute in Android 9

Il framework tenta di recuperare il servizio hwservicemanager 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 le informazioni da entrambi gli HAL perché sul dispositivo può esistere solo una versione del servizio (1.0 o 2.0).

Per altre modalità:

Caricamento e ripristino in modalità off in Android 9

Figura 4. Salute in Android 9, modalità di ricarica e ripristino in modalità off

Salute in Android 11

In Android 11, il componente di integrità funziona come descritto 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 dell'integrità 2.1 non esiste, il sistema torna al percorso del codice legacy come descritto nelle sezioni precedenti

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

Interfaccia HAL 2.0

L'HAL health@2.0 fornisce al framework le stesse funzionalità del vecchio demone healthd. Fornisce inoltre API simili a quelle fornite in precedenza da healthd come servizio di raccoglitore (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 da storaged per recuperare le informazioni relative allo storage specifiche del fornitore:

  • getStorageInfo
  • getDiskStats

Una nuova struttura, @2.0::HealthInfo , viene restituita tramite callback e getHealthInfo . Questa struttura contiene tutte le informazioni sulla salute del dispositivo disponibili tramite health@2.0 HAL, 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 del disco)

Interfaccia HAL 2.1

Health@2.1 HAL 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 : aggiornamento di una versione minore a getHealthInfo
  • shouldKeepScreenOn : per determinare se lo schermo deve essere tenuto acceso in modalità caricatore

Inoltre, l'implementazione di @2.1::IHealth è richiesta per supportare @2.1::IHealthInfoCallback per le sue funzioni registerCallback e unregisterCallback ereditate. La nuova interfaccia di callback restituisce le informazioni sull'integrità al client utilizzando la sua funzione healthInfoChanged_2_1 invece della funzione healthInfoChanged ereditata.

Una nuova struttura, @2.1::HealthInfo , viene restituita tramite callback e getHealthInfo_2_1 . Questa struttura contiene ulteriori informazioni sulla salute del dispositivo disponibili tramite health@2.0 HAL, tra cui:

  • Livello di capacità della batteria
  • Tempo di ricarica completo della batteria ora (in secondi)
  • Capacità di progettazione della carica completa della batteria (in μAh)

Per informazioni sull'implementazione del servizio Health, vedere Implementing Health .