В 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 OS).
Реализация HAL для дампа необязательна. Все новые устройства с Android 11 ОБЯЗАНЫ реализовывать IDumpstateDevice 1.1, если они поддерживают Dumpstate HAL. Устройства, на которых IDumpstateDevice 1.0 был реализован до Android 11, должны быть относительно легко обновлены до версии 1.1, и это настоятельно рекомендуется, поскольку это значительно сокращает объём ненужной конфиденциальной информации, включаемой в отчёты об ошибках.
Эта функция зависит от основных изменений dumpstate, также включенных в Android 11, расположенных в frameworks/native/cmds/dumpstate
.
Реализация этого HAL, скорее всего, потребует внесения некоторых изменений в SEPolicy в определенные системные свойства, файлы и т. д., чтобы все работало как надо, а также координации с поставщиками для внесения всей соответствующей информации в отчеты об ошибках.
Настройка
Пользователь устройства может включить или отключить ведение журнала поставщика в настройках разработчика. При отключении ведения журнала поставщика dumpstateBoard_1_1
может по-прежнему выводить минимально необходимую информацию, определяемую производителем. Отключение ведения журнала поставщика позволяет IDumpstateDevice::dumpstateBoard
добавлять в отчёт об ошибке только необходимую информацию, а включение — любую информацию, указанную производителем.
Вы можете изменить 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
.