Der gesamte healthd
-Code wurde in health@2.0-impl refaktoriert und
libhealthservice
und anschließend zur Implementierung von health@2.0 HAL geändert. Diese beiden
Bibliotheken werden statisch über health@2.0-service verknüpft,
zuvor von healthd
erledigte Arbeit (d. h. healthd_mainloop
ausführen und
Abfragen). Bei init registriert der health@2.0-Service eine Implementierung der
Schnittstelle IHealth
zu hwservicemanager
. Wenn Sie Geräte mit einem
Anbieter-Image mit Android 8.x und ein Android 9-Framework,
Health@2.0-Dienst wird möglicherweise nicht vom Anbieter-Image bereitgestellt. Dies wird erzwungen
durch die
Zeitplan für die Einstellung.
So lösen Sie dieses Problem:
healthd
registriertIHealth
beihwservicemanager
(obwohl es sich um ein System handelt) Daemon).IHealth
wird dem Systemmanifest mit dem Instanznamen hinzugefügt"backup"
.- Framework und
storaged
kommunizieren mithealthd
überhwbinder
stattbinder
. - Code für Framework und
storaged
wurden geändert, um die Instanz abzurufen"default"
, falls verfügbar, danach"backup"
.- Der C++-Clientcode verwendet die in
libhealthhalutils
definierte Logik. - Der Java-Clientcode verwendet die in
HealthServiceWrapper
definierte Logik.
- Der C++-Clientcode verwendet die in
- Sobald IHealth/default allgemein verfügbar ist und Android 8.1-Anbieter-Images
eingestellt, IHealth/backup und
healthd
können verworfen werden. Weitere Informationen Weitere Informationen finden Sie unter Einstellung von health@1.0.
Board-spezifische Build-Variablen für fehlerfreie
BOARD_PERIODIC_CHORES_INTERVAL_*
sind boardspezifische Variablen, die zum Erstellen von
healthd
. Im Rahmen der Aufteilung zwischen System und Anbieter,
nicht für Systemmodule definiert. In Health@2.0 können Anbieter die
diese beiden Werte in healthd_mode_ops->init
(durch Verwerfen von libhealthservice
Abhängigkeit in health@2.0-service.<device>
und die erneute Implementierung dieser Funktion).
Statische Implementierungsbibliothek
Im Gegensatz zu anderen HAL-Implementierungsbibliotheken Health@2.0-impl ist eine statische Bibliothek, für die Health@2.0-Service, Ladegerät, Wiederherstellung und alten fehlerfreien Link.
Health@2.0.impl implementiert IHealth
wie oben beschrieben und soll umschließen
gegen libbatterymonitor
und libhealthd.BOARD
. Diese
dürfen Nutzer von Health@2.0-impl weder BatteryMonitor
noch die Funktionen in
libhealthd
direkt; sollten diese Aufrufe durch Aufrufe in
Die Health
-Klasse, eine Implementierung des IHealth
-Interface Zur Verallgemeinerung
Außerdem ist der healthd_common
-Code auch in health@2.0-impl enthalten. Das neue
healthd_common
enthält den Rest des gemeinsamen Codes für health@2.0-service.
Ladestation und healthd
und ruft IHealth-Methoden anstelle von BatteryMonitor auf.
Health 2.0-Dienst implementieren
bei der Implementierung des Health@2.0-Dienstes für ein Gerät, wenn die Standardimplementierung lautet:
- Ausreichend für das Gerät, bitte
android.hardware.health@2.0-service
verwenden . Nicht ausreichend für das Gerät, erstellen Sie den
android.hardware.health@2.0-service.(device)
ausführbar und enthält:#include <health2/service.h> int main() { return health_service_main(); }
Dann:
Wenn board-spezifisch
libhealthd:
- Existiert, Link zu ihr.
- Nicht vorhanden, leere Implementierungen für
healthd_board_init
angeben undhealthd_board_battery_update
.
Wenn boardspezifische
BOARD_PERIODIC_CHORES_INTERVAL_*
-Variablen:- Sind definiert, erstellen Sie ein gerätespezifisches
HealthServiceCommon.cpp
(kopiert) vonhardware/interfaces/health/2.0/utils/libhealthservice
) und inhealthd_mode_service_2_0_init
anpassen. - Nicht definiert, Link zu
libhealthservice
statisch.
- Sind definiert, erstellen Sie ein gerätespezifisches
Bei Gerät:
- Für die Implementierung der APIs
getStorageInfo
undgetDiskStats
sollten Sie die -Implementierung inget_storage_info
- undget_disk_stats
-Funktionen. - Diese APIs sollten nicht implementiert werden. Link zu
libstoragehealthdefault
statisch werden.
- Für die Implementierung der APIs
Aktualisieren Sie die erforderlichen SELinux-Berechtigungen.
Implementieren Sie HAL bei der Wiederherstellung, indem Sie eine Passthrough-Implementierung Wiederherstellungsabbild. Beispiel:
// Android.bp cc_library_shared { name: "android.hardware.health@2.0-impl-<device>", recovery_available: true, relative_install_path: "hw", static_libs: [ "android.hardware.health@2.0-impl", "libhealthd.<device>" // Include the following or implement device-specific storage APIs "libhealthstoragedefault", ], srcs: [ "HealthImpl.cpp", ], overrides: [ "android.hardware.health@2.0-impl-default", ], }
// HealthImpl.cpp #include <health2/Health.h> #include <healthd/healthd.h> using android::hardware::health::V2_0::IHealth; using android::hardware::health::V2_0::implementation::Health; extern "C" IHealth* HIDL_FETCH_IHealth(const char* name) { const static std::string providedInstance{"default"}; if (providedInstance != name) return nullptr; return Health::initInstance(&gHealthdConfig).get(); }
# device.mk PRODUCT_PACKAGES += android.hardware.health@2.0-impl-<device>
Weitere Informationen finden Sie unter hardware/interfaces/health/2.0/README.md.
Gesundheitskundschaft
Siehe Health clients for Health 2.1 HAL.
SELinux-Änderungen
Der neue Health@2.0 HAL enthält die folgenden SELinux-Änderungen:
- Fügt Health@2.0-service zu
file_contexts
hinzu. - Erlaubt
system_server
undstoraged
,hal_health
zu verwenden. - Registrierung von
system_server
(BatteryService
) zulassenbatteryproperties_service
(IBatteryPropertiesRegistrar
). - Erlaubt
healthd
,hal_health
bereitzustellen. - Entfernt Regeln, die
system_server
undstoraged
den Aufruf vonhealthd
durch Binder. - Entfernt Regeln, die es
healthd
ermöglichen,batteryproperties_service
zu registrieren (IBatteryPropertiesRegistrar
)
Bei Geräten mit eigener Implementierung können einige SELinux-Anbieteränderungen notwendig ist. Beispiel:
# device/<manufacturer>/<device>/sepolicy/vendor/file_contexts
/vendor/bin/hw/android\.hardware\.health@2\.0-service.<device> u:object_r:hal_health_default_exec:s0
# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
# Add device specific permissions to hal_health_default domain, especially
# if it links to board-specific libhealthd or implements storage APIs.
Kernelschnittstellen
Siehe Kernel-Schnittstellen für Health 2.1 HAL.
Testen
Android 9 enthält neue VTS-Tests
die speziell für die Health@2.0 HAL-Datei entwickelt wurden. Wenn ein Gerät deklariert,
state@2.0 HAL im Gerätemanifest auf, muss es die entsprechenden VTS-Tests bestehen.
Tests werden sowohl für die Standardinstanz geschrieben, um sicherzustellen, dass das Gerät
den HAL korrekt implementiert) und die Sicherungsinstanz, um sicherzustellen, dass healthd
weiterhin ordnungsgemäß funktioniert, bevor es entfernt wird).
Anforderungen an Akkuinformationen
Siehe Anforderungen an Akkuinformationen.