Anbieterprotokollierung mit Begrenzung implementieren

Mit Android 11 wird eine neue HAL-Schnittstelle eingeführt: IDumpstateDevice (Version 1.1). Diese HAL-Schnittstelle bietet neue Methoden, um die in Standardfehlerberichten enthaltenen Anbieterlogs besser einzugrenzen und um zu ermöglichen, dass Nutzer-Builds die Anbieterprotokollierung aktivieren und deaktivieren können. Die Standardeinstellung für Nutzer-Builds ist „Deaktiviert“. So haben OEMs mehr Kontrolle darüber, was in bestimmten Arten von Fehlerberichten enthalten ist.

Diese Funktion hat Auswirkungen auf OEMs, wenn sie diese optionale HAL-Schnittstelle implementieren. SoCs können betroffen sein, je nachdem, was der OEM mit dieser HAL-Schnittstelle verfügbar macht. Es sind keine Auswirkungen auf Mobilfunkanbieter zu erwarten.

Was Sie in Fehlerberichte aufnehmen, hängt davon ab, welche Informationen Sie für das Debugging als relevant erachten. Im Allgemeinen gilt jedoch: Je ausführlicher, desto besser.

Beispiele und Quelle

Es gibt eine Standardimplementierung der (eingestellten) Version 1.0 von IDumpstateDevice, die ein Beispiel für die Verwendung der Dumpstate-Utility-Bibliothek zeigt: frameworks/native/cmds/dumpstate/DumpstateUtil.h. Außerdem gibt es eine Cuttlefish-Implementierung der HAL-Schnittstelle 1.1: device/google/cuttlefish/guest/monitoring/dumpstate_ext/*.

Der Quellcode befindet sich hier:

Implementierung

Implementieren Sie die HAL-Schnittstelle android.hardware.dumpstate@1.1::IDumpstateDevice, um diese HAL-Schnittstelle zu implementieren. Es gibt viele mögliche DumpstateMode-Werte, aber nicht alle werden wahrscheinlich von einem einzelnen Gerät unterstützt (z. B. WEAR für Geräte, die nicht Wear OS verwenden).

Die Implementierung der Dumpstate-HAL-Schnittstelle ist optional. Alle neuen Geräte, die mit Android 11 auf den Markt kommen, MÜSSEN IDumpstateDevice 1.1 implementieren, wenn sie die Dumpstate-HAL-Schnittstelle implementieren. Geräte, die IDumpstateDevice 1.0 bereits vor Android 11 implementiert haben, sollten relativ einfach auf 1.1 aktualisiert werden können. Dies wird dringend empfohlen, da dadurch die Menge an unnötigen privaten Informationen, die in Fehlerberichten enthalten sind, erheblich reduziert wird.

Diese Funktion hängt von den Änderungen an der Dumpstate-Funktion ab, die ebenfalls in Android 11 enthalten sind und sich unter frameworks/native/cmds/dumpstate befinden.

Die Implementierung dieser HAL-Schnittstelle erfordert wahrscheinlich einige SEPolicy-Änderungen an bestimmten Systemeigenschaften, Dateien usw., damit alles einwandfrei funktioniert. Außerdem ist eine Abstimmung mit den Anbietern erforderlich, um alle relevanten Informationen in Fehlerberichte aufzunehmen.

Anpassung

Der Gerätenutzer kann die Anbieterprotokollierung in den Entwickleroptionen aktivieren oder deaktivieren. Wenn sie deaktiviert ist, kann dumpstateBoard_1_1 trotzdem minimale, wichtige Informationen ausgeben, die vom OEM festgelegt wurden. Wenn die Anbieterprotokollierung deaktiviert ist, fügt IDumpstateDevice::dumpstateBoard einem Fehlerbericht nur wichtige Informationen hinzu. Wenn sie aktiviert ist, werden alle vom OEM ausgewählten Informationen hinzugefügt.

Sie können dumpstate.cpp ändern, das die IDumpstateDevice-HAL-Methoden aufruft, um beispielsweise das Timeout für den Abschluss von dumpstateBoard zu verlängern. Die Kernlogik von dumpstate.cpp sollte jedoch unverändert bleiben.

Timeouts können einen beliebigen Wert haben, sollten aber die Zeit, die für die Erstellung eines Fehlerberichts benötigt wird, nicht erheblich verlängern. Insbesondere DumpstateMode::CONNECTIVITY ist sehr zeitkritisch und muss so schnell wie möglich ausgeführt werden, um alle relevanten Modem-, WLAN- und Netzwerklogs zu erfassen.

Validierung

Es gibt einen VTS-Test für die IDumpstateDevice-Implementierung und funktionale Unittests für die allgemeine BugreportManager-Funktionalität.

Der empfohlene manuelle Testfall ist frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java.