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

В Android 11 добавлен новый HAL, IDumpstateDevice (версия 1.1). Этот HAL предоставляет новые методы для более точного определения области действия журналов поставщика, включаемых в стандартные отчеты об ошибках, а также позволяет пользовательским сборкам включать и выключать ведение журналов поставщиком (по умолчанию для пользовательских сборок — выключено). Это дает производителям оборудования больше контроля над тем, что включается в определенные типы отчетов об ошибках.

Эта функция повлияет на производителей оборудования, если они решат внедрить этот необязательный HAL. В зависимости от того, что производитель оборудования решит предоставить с помощью этого HAL, это может повлиять на работу SoC. Для операторов связи ожидаемого влияния не ожидается.

Содержание отчетов об ошибках зависит от того, какую информацию вы считаете важной для отладки, но, как правило, чем подробнее отчет, тем лучше.

Примеры и источник

Существует реализация по умолчанию (устаревшей) версии 1.0 библиотеки IDumpstateDevice, демонстрирующая пример использования библиотеки dumpstate util: 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, если они используют 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/сети.

Проверка

Для реализации IDumpstateDevice есть тест VTS, а для общей функциональности BugreportManager — функциональные модульные тесты.

Рекомендуемый пример ручного тестирования находится в frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java .