Как реализовать ведение журнала поставщика с ограниченным доступом

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

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

Вы сами решаете, какую информацию включать в отчеты об ошибках. Как правило, чем больше данных, тем лучше.

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

В устаревшей версии 1.0 интерфейса IDumpstateDevice реализована функция по умолчанию, которая показывает, как использовать библиотеку dumpstate util:frameworks/native/cmds/dumpstate/DumpstateUtil.h. Также есть реализация Cuttlefish для HAL 1.1: device/google/cuttlefish/guest/monitoring/dumpstate_ext/*.

Исходный код находится здесь:

Реализация

Чтобы реализовать этот HAL, реализуйте интерфейс HAL android.hardware.dumpstate@1.1::IDumpstateDevice. Существует множество возможных значений DumpstateMode, но не все они могут поддерживаться одним устройством (например, WEAR для устройств, не работающих на Wear OS).

Реализация HAL dumpstate необязательна. Все новые устройства с Android 11, в которых реализован HAL Dumpstate, ДОЛЖНЫ поддерживать IDumpstateDevice 1.1. Устройства, на которых до Android 11 была реализована версия IDumpstateDevice 1.0, можно относительно легко обновить до версии 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.