Integrità del sistema Android

Android 9 include android.hardware.health HAL 2.0, un upgrade della versione principale da health@1.0 HAL. Questo nuovo HAL ha quanto segue vantaggi:

  • Separazione più chiara tra framework e codice del fornitore.
  • Ritira il daemon healthd non necessario.
  • Maggiore libertà per la personalizzazione dei fornitori nelle informazioni sanitarie report.
  • Più informazioni sullo stato del dispositivo oltre alla batteria.

Android 11 include android.hardware.health HAL 2.1, un upgrade della versione secondaria da health@2.0 HAL. Questo nuovo HAL ha quanto segue vantaggi:

  • Maggiore facilità di implementazione
  • Migliore conformità con le API 2.0 HAL esistenti
  • Migliore separazione degli alti nel codice di ricarica in modalità off
  • Migliore supporto del framework per indicare l'integrità della batteria del dispositivo

Android 13 include android.hardware.health AIDL HAL, una conversione da health@2.1 HAL. Questo nuovo HAL ha quanto segue vantaggi:

  • Rimuovi le API relative al caricabatterie inutilizzate
  • Rimuovi l'entità StorageAttribute inutilizzata e i campi correlati
  • Supporta la ricarica della base.

Requisiti

Dispositivi con Android 9 e Android 10

I dispositivi che vengono lanciati con Android 9 devono fornire la versione 2.x HAL (e non deve fornire l'HAL 1.0) o l'AIDL HAL. Dispositivi non avviati con Android 9, ma prevediamo di aggiornare l'immagine del fornitore a Target Framework Compatibility Matrix versione 3 (rilasciata in Android 9) devono rimuovere le implementazioni 1.0 HAL esistenti e l'HAL 2.x o l'AIDL HAL.

AOSP include diverse librerie helper progettate per aiutarti a implementare la versione 2.0 HAL e la transizione dal precedente 1.0 HAL.

Dispositivi con Android 11 e Android 12

I dispositivi che vengono lanciati con Android 11 devono fornire la versione 2.1 HAL (e non deve fornire l'HAL 1.0 o 2.0) o l'AIDL HAL. Dispositivi non verrà lanciato con Android 11, ma abbiamo intenzione di aggiornare dell'immagine del fornitore in Target Framework Compatibility Matrix versione 5 (rilasciata in Android 11) deve rimuovere l'HAL 2.0 esistente implementazioni e fornire l'HAL 2.1 o l'AIDL HAL. Dispositivi non avviati con Android 11 e non ho intenzione di aggiornare il fornitore si consiglia di fornire anche l'HAL 2.1.

AOSP include diverse librerie helper progettate per aiutarti a implementare la versione 2.1 HAL e la transizione dal precedente 1.0 HAL.

Dispositivi con Android 13 e versioni successive

I dispositivi che vengono lanciati con Android 13 devono fornire l'AIDL HAL (e non deve fornire l'HAL HIDL). Dispositivi che non verranno lanciati con Android 13, ma hanno in programma di aggiornare l'immagine del fornitore a Target Framework Compatibility Matrix versione 7 (rilasciata in Android 13) deve rimuovere le implementazioni HIDL HAL esistenti e fornire l'AIDL HAL. Anche i dispositivi che non vengono lanciati con Android 13 e non prevedono di aggiornare l'immagine del fornitore per fornire l'AIDL HAL.

I dispositivi non devono fornire lo standard HIDL 1.0 HAL.

AOSP include diverse librerie helper progettate per aiutarti a implementare il AIDL HAL e la transizione dai vecchi HAL HIDL.

Terminologia

  • health@1.0: abbreviazione di android.hardware.health@1.0. Si riferisce a Health HIDL HAL versione 1.0 rilasciata su Android 8.0.
  • health@2.0: abbreviazione di android.hardware.health@2.0. Si riferisce a Health HIDL HAL versione 2.0 rilasciata su Android 9.
  • health@2.1: abbreviazione di android.hardware.health@2.1. Si riferisce a Health HIDL HAL versione 2.1 rilasciata su Android 11.
  • health AIDL HAL: abbreviazione di android.hardware.health.
    • La versione 1 viene rilasciata in Android 13.
  • charger: eseguibile in esecuzione in modalità di ricarica non attiva che mostra l'animazione di ricarica dello smartphone.
  • Recovery: eseguibile in esecuzione in modalità di ripristino che deve recuperare la batteria. informazioni.
  • healthd: il daemon precedente in esecuzione su Android che recupera i problemi relativi alla salute. informazioni e le fornisce come framework.
  • storaged: daemon in esecuzione su Android che recupera le informazioni sullo spazio di archiviazione e le fornisce come framework.

Salute in Android 8.x

In Android 8.x, il componente relativo alla salute funziona come descritto nel seguente diagramma:

Salute in Android 8.x

Figura 1. Salute in Android 8.x.

In questo diagramma:

  • Il framework utilizza una (1) chiamata a binder e una (1) chiamata hwbinder comunicare con l'hardware.
  • healthd si collega in modo statico a libhealthd_android, libbatterymonitor e libbatteryservice.
  • health@1.0-impl collega staticamente a libhealthd.BOARD.

Ogni bacheca può personalizzare un libhealthd.BOARD diverso; si determina in fase di compilazione quale caricabatterie, health@1.0-impl e link di ripristino a.

Per altre modalità:

Ricarica e Recovery mode in modalità off in Android 8.x

Figura 2. Salute in Android 8.x, ricarica off-mode e Recovery mode.

  • il caricabatterie si collega in modo statico a libhealthd.BOARD, libhealthd_charger e libbatterymonitor.
  • il ripristino si collega in modo statico a libhealthd.BOARD e libbatterymonitor.

Salute in Android 9

In Android 9, il componente relativo alla salute funziona come descritto in dettaglio nel seguente diagramma: Salute in Android 9

Figura 3. Salute in Android 9.

Il framework tenta di recuperare il servizio health@2.0 da hwservicemanager. Se non funziona, chiama health@1.0 (in Android 8.x). Il percorso del codice legacy è mantenuta in modo che l'immagine di sistema Android 9 sia compatibile l'immagine del fornitore Android 8.x. Il framework non recupera informazioni da su entrambi gli HAL perché nel dispositivo può esistere una sola versione del servizio (1.0 o 2.0).

Per altre modalità:

Ricarica e ripristino off-mode in Android 9

Figura 4. Salute in Android 9, ricarica off-mode e Recovery mode.

Salute in Android 11

In Android 11, il componente relativo alla salute funziona come descritto in dettaglio. 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)      ] |
+-------------------------------------+

Se l'implementazione dell'integrità 2.1 non esiste, il sistema utilizza percorso del codice precedente 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)      ] |
+-------------------------------------+

Vedi il seguente diagramma semplificato per le diverse modalità:

Infrastruttura HAL 2.1 per l&#39;integrità

Figura 5. Infrastruttura HAL 2.1 per l'integrità.

Salute in Android 13

In Android 13 viene introdotto l'HAL AIDL per la salute. La componente di salute funziona come descritto nel diagramma seguente:

Infrastruttura HAL AIDL per l&#39;integrità

Figura 6. Infrastruttura HAL AIDL per l'integrità.

Interfaccia HIDL HAL 2.0

L'HAL health@2.0 fornisce al framework le stesse funzionalità del vecchio integro. Fornisce inoltre API simili precedentemente fornito come servizio di legatura (ovvero IBatteryPropertiesRegistrar.

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

  • registerCallback, da sostituire IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback, da sostituire IBatteryPropertiesRegistrar.unregisterListener
  • update, per sostituire IBatteryPropertiesRegistrar.scheduleUpdate
  • I valori 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

Viene restituito un nuovo struct, @2.0::HealthInfo, tramite callback e getHealthInfo. Questo struct contiene tutte le informazioni sullo stato dei dispositivi disponibili tramite health@2.0 HAL, tra cui:

  • Informazioni sulla ricarica (ca/USB/wireless, corrente, tensione, ecc.)
  • Informazioni sulla batteria (presenza, livello della batteria, corrente, tensione, carica, tecnologia e così via)
  • Informazioni sull'archiviazione (informazioni sul dispositivo di archiviazione, statistiche sul disco)

Per informazioni sull'implementazione del servizio Health 2.0, vedi Implementazione dell'integrità 2.0.

Interfaccia HIDL HAL 2.1

L'HAL health@2.1 supporta la ricarica in modalità off 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: upgrade di una versione secondaria a getHealthInfo
  • shouldKeepScreenOn: per stabilire se lo schermo deve rimanere acceso modalità caricabatterie

Inoltre, l'implementazione di @2.1::IHealth è necessaria per supportare @2.1::IHealthInfoCallback per i relativi registerCallback ereditati e Funzioni di unregisterCallback. La nuova interfaccia di callback restituisce l'integrità al client utilizzando la sua funzione healthInfoChanged_2_1 anziché la funzione healthInfoChanged ereditata.

Viene restituito un nuovo struct, @2.1::HealthInfo, tramite callback e getHealthInfo_2_1. Questo struct contiene informazioni aggiuntive sullo stato dei dispositivi disponibile tramite health@2.0 HAL, tra cui:

  • Livello della capacità della batteria
  • Tempo di ricarica della batteria completamente ora (in secondi)
  • Capacità di progetto di ricarica completa della batteria (in μAh)

Vedi il seguente diagramma UML per le classi utili per l'implementazione dell'HAL dell'integrità:

Diagramma UML HAL per l&#39;integrità 2.1

Figura 7. Diagramma UML HAL 2.1 per l'integrità.

Per informazioni sull'implementazione del servizio Health 2.1, vedi Implementazione dell'integrità 2.1.

Interfaccia AIDL HAL versione 1

Modifiche all'API

AIDL versione 1 HAL supporta API simili a HIDL 2.1 HAL. Rispetto a dell'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 nell'AIDL HAL Poiché la funzionalità di ricarica fuori modalità è disponibile solo /vendor, le API nell'interfaccia del fornitore non sono necessarie. A implementa correttamente la ricarica in modalità off, vedi caricatore di seguito.
  • Il tipo StorageAttribute e i campi correlati vengono rimossi perché sono inutilizzati.
  • chargerDockOnline aggiunto a HealthInfo per supportare la ricarica del dock.

Implementazione

Vedi il seguente diagramma UML per le classi utili per l'implementazione dell'HAL dell'integrità:

Diagramma UML di Health AIDL HAL

Figura 8. Diagramma UML di Health AIDL HAL.

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

Ripristino

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

Per informazioni sull'installazione del servizio Health AIDL per il ripristino, consulta seguenti:

Caricabatterie

La funzionalità di ricarica fuori modalità è stata spostata da /system a /vendor. Per dispositivi che vengono lanciati con Android 13, se supportano in modalità off, il file binario del servizio HAL deve supportare la modalità caricabatterie. Per farlo, consulta le implementando il caricabatterie.

Proprietà del sistema di ricarica

Le proprietà ro.charger.* non sono più leggibili dal file binario charger in /vendor. Se sul dispositivo è impostata una delle proprietà di sistema ro.charger.*: consulta le proprietà di sistema del caricabatterie.