В Android 11 добавлен новый HAL, IDumpstateDevice (версия 1.1). Этот HAL предоставляет новые методы для более узкого охвата журналов поставщиков, которые включаются в стандартные отчеты об ошибках, а также позволяет пользовательским сборкам включать и выключать ведение журнала поставщика (по умолчанию для пользовательских сборок отключено). Это дает OEM-производителям больший контроль над тем, что включается в определенные типы отчетов об ошибках.
Эта функция влияет на OEM-производителей, если они решат реализовать этот необязательный HAL. Это может повлиять на SoC, в зависимости от того, что OEM решит предоставить с помощью этого HAL. Ожидаемого воздействия на перевозчиков не ожидается.
То, что вы включаете в отчеты об ошибках, зависит от того, какую информацию вы считаете важной для отладки, но, как правило, чем больше подробностей, тем лучше.
Примеры и источник
Существует реализация по умолчанию (устаревшей) версии 1.0 IDumpstateDevice, которая показывает пример использования библиотеки утилиты 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, реализуйте интерфейс android.hardware.dumpstate@1.1::IDumpstateDevice
HAL. Существует много возможных значений DumpstateMode
, но не все из них, вероятно, будут поддерживаться одним устройством (например, WEAR для устройств без Wear OS).
Реализация 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
.