Wdrożenie ograniczonego rejestrowania dostawcy

Android 11 dodaje nowy interfejs HAL, IDumpstateDevice (wersja 1.1). Ta usługa 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 ma wpływ na producentów OEM, jeśli zdecydują się wdrożyć opcjonalny interfejs HAL. SoC może być ograniczony w zależności od tego, co producent OEM zdecyduje się udostępnić w ramach 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:

Implementacja

Aby zaimplementować ten interfejs HAL, zaimplementuj interfejs android.hardware.dumpstate@1.1::IDumpstateDevice. Istnieje wiele możliwych wartości DumpstateMode, ale nie wszystkie z nich są obsługiwane przez pojedyncze urządzenie (na przykład WEAR w przypadku urządzeń bez Wear OS).

Wdrożenie interfejsu dumpstate HAL jest opcjonalne. Wszystkie nowe urządzenia z Androidem 11 MUSZĄ implementować interfejs IDumpstateDevice 1.1, jeśli implementują interfejs Dumpstate HAL. Urządzenia, które przed Androidem 11 już wdrożyły IDumpstateDevice 1.0, powinny stosunkowo łatwo przejść na wersję 1.1. Zdecydowanie zalecamy to, ponieważ znacznie zmniejsza to ilość zbędnych informacji prywatnych zawartych w raportach o błędach.

Ta funkcja wymaga zmian w core dumpstate, które są też dostępne w Androidzie 11 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łączyć lub wyłączyć rejestrowanie danych dostawcy za pomocą ustawień dewelopera. Po wyłączeniu 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 niezbędne 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), aby na przykład wydłużyć czas oczekiwania na zakończenie działania funkcji dumpstateBoard. Jednak główna logika dumpstate.cpp powinna pozostać niezmieniona.

Limity czasu mogą mieć dowolną wartość, ale nie powinny znacząco wydłużać czasu, jaki zajmuje wypełnienie raportu o błędzie. W szczególności DumpstateMode::CONNECTIVITY jest bardzo czasochłonny i musi być wykonywany tak szybko, jak to możliwe, aby zebrać wszystkie istotne logi modemu, Wi-Fi i sieci.

Weryfikacja

W przypadku implementacji interfejsu IDumpstateDevice dostępny jest test VTS, a funkcje ogólne BugreportManager są testowane za pomocą testów jednostkowych funkcjonalności.

Zalecane ręczne testowanie to frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java.