Wdróż logowanie ograniczone do dostawcy

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:

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.