В Android 11 добавлен новый HAL — IDumpstateDevice (версия 1.1). Этот HAL предоставляет новые методы для более точного определения журналов поставщиков, которые включаются в стандартные отчеты об ошибках, а также позволяет пользовательским сборкам включать и выключать ведение журнала поставщиков (по умолчанию для пользовательских сборок отключено). Это дает OEM-производителям больше контроля над тем, что включается в определенные типы отчетов об ошибках.
Эта функция повлияет на OEM-производителей, если они решат реализовать этот дополнительный HAL. Это может повлиять на SoC, в зависимости от того, что OEM-производитель решит предоставить с помощью этого HAL. Никаких ожидаемых последствий для операторов связи не будет.
То, что вы включаете в отчеты об ошибках, зависит от того, какую информацию вы считаете важной для отладки, но, как правило, чем более подробный отчет, тем лучше.
Примеры и источник
Существует стандартная реализация (устаревшей) версии IDumpstateDevice 1.0, в которой показан пример использования служебной библиотеки dumpstate: frameworks/native/cmds/dumpstate/DumpstateUtil.h
. Существует также реализация HAL 1.1 в Cuttlefish: device/google/cuttlefish/guest/monitoring/dumpstate_ext/*
.
Исходный код находится здесь:
- Файлы HAL находятся в папке
hardware/interfaces/dumpstate/1.1/
. - Собственный код dumpstate, который управляет содержимым отчета об ошибках, находится в папке
frameworks/native/cmds/dumpstate/
.
Выполнение
Чтобы реализовать этот HAL, реализуйте интерфейс HAL android.hardware.dumpstate@1.1::IDumpstateDevice
. Существует множество возможных значений DumpstateMode
, но не все они могут поддерживаться одним устройством (например, WEAR для устройств без ОС Wear).
Реализация дампа HAL не является обязательной. Все новые устройства, запускаемые с Android 11, ДОЛЖНЫ реализовывать IDumpstateDevice 1.1, если они реализуют Dumpstate HAL. Устройства, на которых уже реализован IDumpstateDevice 1.0 до Android 11, можно относительно легко обновить до версии 1.1, и это настоятельно рекомендуется, поскольку это значительно уменьшает количество посторонней личной информации, включенной в отчеты об ошибках.
Эта функция зависит от изменений дампа ядра, также включенных в Android 11 и расположенных в папке frameworks/native/cmds/dumpstate
.
Реализация этого HAL, вероятно, потребует некоторых изменений SEPolicy в определенных свойствах системы, файлах и т. д., чтобы все работало полностью, а также потребует координации с поставщиками для внесения всей соответствующей информации в отчеты об ошибках.
Кастомизация
Пользователь устройства может включать или отключать вход в систему поставщика с помощью настроек разработчика. Когда он выключен, dumpstateBoard_1_1
может по-прежнему выводить минимальную важную информацию, определенную OEM-производителем. Отключение ведения журнала поставщика позволяет IDumpstateDevice::dumpstateBoard
добавлять в отчет об ошибке только важную информацию, а его включение включает любую информацию, выбранную OEM.
Вы можете изменить dumpstate.cpp
(который вызывает методы HAL IDumpstateDevice), например, чтобы увеличить время ожидания, отведенное для завершения dumpstateBoard
. Однако основная логика dumpstate.cpp
должна остаться неизменной.
Тайм-ауты могут иметь любое значение, но они не должны существенно увеличивать время, необходимое для завершения отчета об ошибке. В частности, DumpstateMode::CONNECTIVITY
очень чувствителен ко времени и должен работать как можно быстрее для сбора всех соответствующих журналов модема/Wi-Fi/сети.
Валидация
Существует тест VTS для реализации IDumpstateDevice, а также функциональные модульные тесты для общей функциональности BugreportManager
.
Рекомендуемый пример ручного тестирования — frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java
.