Реализовать ведение журнала поставщиков с ограниченной областью действия

В 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-интерфейса необходимо реализовать 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 .