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

В 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).

Реализация дампа 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 .