Android 11 dodaje nowy interfejs HAL, IDumpstateDevice (wersja 1.1). Ta biblioteka HAL udostępnia nowe metody, które umożliwiają bardziej precyzyjne ograniczenie zakresu dzienników dostawcy, które są uwzględniane w standardowych raportach o błędach, a także umożliwia użytkownikom włączanie i wyłączanie rejestrowania przez dostawcę (domyślnie w przypadku kompilacji użytkownika jest ono wyłączone). Dzięki temu OEM-y mają większą kontrolę nad tym, co jest uwzględniane w różnych typach raportów o błędach.
Ta funkcja wpływa na producentów OEM, którzy zdecydują się na wdrożenie tej opcjonalnej listy HAL. SoC może być ograniczony w zależności od tego, co OEM zdecyduje się udostępnić za pomocą tego interfejsu HAL. Nie powinno to mieć wpływu na operatorów.
To, co uwzględniasz w raportach o błędach, zależy od tego, które informacje są istotne na potrzeby debugowania, ale ogólnie im więcej informacji, tym lepiej.
Przykłady i źródło
Domyślna implementacja (wycofana) wersji 1.0 interfejsu IDumpstateDevice zawiera przykład użycia biblioteki dumpstate:frameworks/native/cmds/dumpstate/DumpstateUtil.h
. Dostępna jest też implementacja Cuttlefish dla HAL 1.1:device/google/cuttlefish/guest/monitoring/dumpstate_ext/*
.
Kod źródłowy znajduje się tutaj:
- Pliki HAL znajdują się w lokalizacji
hardware/interfaces/dumpstate/1.1/
. - Kod natywny dumpstate, który kontroluje zawartość raportu o błędach, znajduje się w pliku
frameworks/native/cmds/dumpstate/
.
Implementacja
Aby zaimplementować ten interfejs HAL, zaimplementuj interfejs android.hardware.dumpstate@1.1::IDumpstateDevice
. Istnieje wiele możliwych wartości DumpstateMode
, ale raczej nie wszystkie będą obsługiwane na jednym urządzeniu (np. WEAR w przypadku urządzeń z systemem innym niż Wear OS).
Implementacja danych HAL stanu zrzutu jest opcjonalna. Na wszystkich nowych urządzeniach z Androidem 11 MUSZĄ implementować IDumpstateDevice 1.1, jeśli mają wdrożone HAL Dumpstate. Uaktualnienie urządzeń do wersji 1.0 na urządzeniach, na których zaimplementowano IDumpstateDevice 1.0 przed Androidem 11, powinno być stosunkowo łatwe, dlatego zdecydowanie zalecamy takie rozwiązanie, ponieważ znacznie zmniejsza to ilość zbędnych informacji prywatnych uwzględnianych w raportach o błędach.
Ta funkcja zależy od głównych zmian stanu zrzutu wprowadzonych również w Androidzie 11, które są dostępne w sekcji frameworks/native/cmds/dumpstate
.
Wdrożenie tego interfejsu HAL prawdopodobnie wymaga wprowadzenia pewnych zmian w SEPolicy dotyczących niektórych właściwości systemu, plików itp., aby wszystko działało prawidłowo. Wymaga to też koordynacji z dostawcami w celu zapisania wszystkich istotnych informacji w raportach o błędach.
Dostosowywanie
Użytkownik urządzenia może włączać i wyłączać logowanie przez dostawcę w ustawieniach dewelopera.
Gdy jest wyłączona, dumpstateBoard_1_1
może nadal przekazywać minimalne niezbędne informacje zgodnie z wytycznymi producenta OEM. Wyłączenie rejestrowania przez dostawcę powoduje, że IDumpstateDevice::dumpstateBoard
do raportu o błędach dodawane są tylko najważniejsze informacje, natomiast włączenie rejestrowania powoduje, że do raportu dodawane są wszystkie informacje wybrane przez OEM.
Możesz zmodyfikować funkcję dumpstate.cpp
(która wywołuje metody interfejsu HAL DumpstateDevice), na przykład aby wydłużyć limit czasu oczekiwania na zakończenie działania funkcji dumpstateBoard
.
Podstawowa logika dumpstate.cpp
powinna jednak pozostać niezmieniona.
Limity czasu mogą mieć dowolną wartość, ale nie powinny znacząco wydłużać czasu potrzebnego na wypełnienie raportu o błędzie. Szczególnie ważne jest, aby usługa DumpstateMode::CONNECTIVITY
była bardzo wrażliwa na czas i musi działać jak najszybciej, aby zebrać wszystkie niezbędne dzienniki dotyczące modemu/Wi-Fi/sieci.
Weryfikacja
Dostępne są testy VTS dotyczące implementacji IDumpstateDevice oraz testy jednostkowe ogólnej funkcjonalności BugreportManager
.
Zalecane ręczne testowanie to frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java
.