Android 11 dodaje nową warstwę HAL, IDumpstateDevice (wersja 1.1). Ta warstwa HAL udostępnia nowe metody, które pozwalają dokładniej określać zakres dzienników dostawcy uwzględnianych w standardowych raportach o błędach, a także włączać i wyłączać rejestrowanie dzienników dostawcy w wersjach użytkownika (domyślnie jest ono wyłączone). Dzięki temu producenci OEM mają większą kontrolę nad tym, co jest uwzględniane w określonych typach raportów o błędach.
Ta funkcja ma wpływ na producentów OEM, jeśli zdecydują się oni na wdrożenie tego opcjonalnego HAL. Może to mieć wpływ na układy SoC, w zależności od tego, co producent OEM zdecyduje się udostępnić za pomocą tej warstwy HAL. Nie powinno to mieć wpływu na operatorów.
To, co umieścisz w raportach o błędach, zależy od tego, które informacje uważasz za istotne podczas debugowania, ale ogólnie im więcej szczegółów, tym lepiej.
Przykłady i źródło
Istnieje domyślna implementacja (wycofanej) wersji 1.0 interfejsu IDumpstateDevice, która pokazuje przykład użycia biblioteki narzędzi dumpstate:frameworks/native/cmds/dumpstate/DumpstateUtil.h
Dostępna jest też implementacja HAL w wersji 1.1 w Cuttlefish:device/google/cuttlefish/guest/monitoring/dumpstate_ext/*
.
Kod źródłowy znajdziesz tutaj:
- Pliki HAL znajdują się w folderze
hardware/interfaces/dumpstate/1.1/
. - Kod natywny dumpstate, który kontroluje zawartość raportu o błędzie, znajduje się w folderze
frameworks/native/cmds/dumpstate/
.
Implementacja
Aby wdrożyć ten interfejs HAL, zaimplementuj interfejs HAL android.hardware.dumpstate@1.1::IDumpstateDevice
. Istnieje wiele możliwych wartości DumpstateMode
, ale nie wszystkie są prawdopodobnie obsługiwane przez jedno urządzenie (np. WEAR w przypadku urządzeń bez Wear OS).
Implementacja HAL dumpstate jest opcjonalna. Wszystkie nowe urządzenia wprowadzane na rynek z Androidem 11 MUSZĄ implementować interfejs IDumpstateDevice 1.1, jeśli implementują interfejs HAL Dumpstate. Urządzenia, które przed Androidem 11 wdrożyły już interfejs IDumpstateDevice 1.0, powinny stosunkowo łatwo przejść na wersję 1.1. Zdecydowanie zalecamy to zrobić, ponieważ znacznie zmniejsza to ilość zbędnych informacji prywatnych zawartych w raportach o błędach.
Ta funkcja zależy od zmian w zrzucie stanu, które są też dostępne w Androidzie 11 i znajdują się w sekcji frameworks/native/cmds/dumpstate
.
Wdrożenie tej warstwy HAL prawdopodobnie będzie wymagać wprowadzenia pewnych zmian w zasadach SEPolicy dotyczących niektórych właściwości systemu, plików itp., aby wszystko działało prawidłowo. Będzie też wymagać współpracy z dostawcami w celu umieszczenia wszystkich istotnych informacji w raportach o błędach.
Dostosowywanie
Użytkownik urządzenia może włączać i wyłączać rejestrowanie przez dostawcę w ustawieniach dewelopera.
Gdy jest wyłączony, dumpstateBoard_1_1
może nadal wyświetlać minimalne niezbędne informacje określone przez producenta OEM. Wyłączenie rejestrowania danych dostawcy powoduje, że do raportu o błędach dodawane są tylko najważniejsze informacje, a włączenie tej funkcji sprawia, że raport zawiera wszystkie informacje wybrane przez producenta OEM.IDumpstateDevice::dumpstateBoard
Możesz zmodyfikować dumpstate.cpp
(który wywołuje metody IDumpstateDevice HAL), np. aby wydłużyć czas oczekiwania na zakończenie działania dumpstateBoard
.
Podstawowa logika działania dumpstate.cpp
powinna jednak pozostać niezmieniona.
Wartości limitów czasu mogą być dowolne, ale nie powinny znacznie wydłużać czasu potrzebnego na ukończenie raportu o błędzie. W szczególności funkcja
DumpstateMode::CONNECTIVITY
jest bardzo wrażliwa na czas i musi działać jak najszybciej, aby zebrać wszystkie odpowiednie dzienniki modemu, Wi-Fi i sieci.
Weryfikacja
Istnieje test VTS dla implementacji IDumpstateDevice oraz funkcjonalne testy jednostkowe dla ogólnej funkcjonalności BugreportManager
.
Zalecany ręczny przypadek testowy to:frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java