Пример приложения
Если у вас возникнут какие-либо проблемы при использовании API Home, вы можете собрать логи для дальнейшей отладки. Для сбора логов с мобильного устройства требуется Android Debug Bridge ( adb ). Если вам нужна помощь от Google, соберите логи как с устройств Android, так и с хаба и создайте заявку в системе отслеживания ошибок, указав соответствующую информацию и связанные с ней логи.
Собирайте журналы Android.
Для выполнения всех шагов, связанных с adb , ваше мобильное устройство должно быть подключено к локальному компьютеру.
Установите adb
Если вы еще этого не сделали, настройте Android Debug Bridge на своем локальном компьютере:
- Установите на свой компьютер программу "adb" .
- Включите параметры разработчика и отладку по USB на своем Android телефоне.
Получить идентификатор мобильного устройства
- Получите идентификатор вашего мобильного устройства:
adb devicesList of devices attached device-id device
- Сохраните это значение в переменной с именем
phoneid:phoneid=device-id
Информация о версии
Мы рекомендуем собирать всю информацию о версиях вашей системы всякий раз, когда вы решаете собирать журналы. Это необходимо, если вам нужно поделиться информацией о проблемах с Google.
- Сохраняйте различную информацию об устройстве в переменные:
containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep -m 1 "versionName" || true); ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep -m 1 "versionName" || true); androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true); androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true); chimeradump=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider || true); homemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.home" || true); optionalhomemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.optional_home" || true); threadinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.threadnetwork" || true); enabledfeatures=$(echo "$chimeradump" | grep "Enabled features" | grep -i "home" | sort -u || true) - Сохраните все переменные в файл с именем
_versions.txt:Разверните, чтобы отобразить команды для сохранения переменных в файл.
Весь блок можно скопировать и вставить в терминал одновременно.
versionfile="_versions.txt" echo "Saving version info to $versionfile" echo "Container version: $containerinfo" > $versionfile echo "Home Module version: $homemoduleinfo" >> $versionfile echo "Optional Home Module version: $optionalhomemoduleinfo" >> $versionfile echo "Thread Module version: $threadinfo" >> $versionfile echo "GHA version: $ghainfo" >> $versionfile echo "Android version: $androidversion" >> $versionfile echo "Android API version: $androidapiversion" >> $versionfile echo "Found enabled features: $enabledfeatures" >> $versionfile
- Проверьте содержимое файла
_versions.txt:cat _versions.txtТеперь этот файл можно предоставлять Google по мере необходимости для устранения неполадок.Разверните, чтобы показать пример выходного файла.
Container version: versionName=26.26.34 (190400-945364269) Home Module version: com.google.android.gms.home [v262634001] Optional Home Module version: com.google.android.gms.optional_home [262634025] ... Thread Module version: com.google.android.gms.threadnetwork [v262634001] GHA version: versionName=4.22.28.0 Android version: 14 Android API version: 34 Found enabled features: Enabled features: appsearch_impl, brella_dynamite, dck_management...
Включить флаги подробной отладки
Перед сбором логов устройства Android или созданием отчета об ошибке настройте размер буфера логгера и включите подробные отладочные теги для компонентов Google Home и GMS:
# Clear existing device logs and expand logger buffer size
adb -s $phoneid logcat -b all -c
adb -s $phoneid logcat -G 8M
# Enable GMS Service ID verbose flags
adb -s $phoneid shell setprop log.tag.gms_svc_id:168 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:304 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:305 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:319 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:336 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:360 VERBOSE
# Enable GHP and Matter log tags
adb -s $phoneid shell setprop log.tag.CameraCommissioningPlugin VERBOSE
adb -s $phoneid shell setprop log.tag.HomeSdk VERBOSE
adb -s $phoneid shell setprop log.tag.HomeClient VERBOSE
adb -s $phoneid shell setprop log.tag.InteractionApiChimeraService VERBOSE
adb -s $phoneid shell setprop log.tag.MatterCommissioner VERBOSE
adb -s $phoneid shell setprop log.tag.SampleApp VERBOSEСбор логов Android с помощью скриптов
Для захвата логов Android-устройства в режиме реального времени во время отладки:
- Следуйте инструкциям в разделе «Включение флагов подробной отладки» , чтобы очистить существующие журналы, увеличить размер буфера и установить теги для подробного логирования.
- Закройте все приложения, запущенные на мобильном устройстве.
- Перед началом теста удалите существующий шум в буфере логов:
adb -s $phoneid logcat -c - Запустите процесс сбора логов в окне терминала:
Оставьте это окно терминала открытым. Это позволит записывать логи с вашего устройства на протяжении всего процесса.adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt - Запустите приложение и выполните все действия с пользовательским интерфейсом, необходимые для воспроизведения проблемы.
- После завершения процесса остановите работу
logcatв терминале, нажав Ctrl+C (или Cmd+C на Mac). - Журналы этой сессии сохраняются в файле
android-logs_YYYYMMDDmmss.txt. Прикрепляйте файлыandroid-logs_YYYYMMDDmmss.txtи_versions.txtк любым сообщениям об ошибках.
Собирайте логи Android с помощью команды adb bugreport.
Составляйте полные отчеты об ошибках Android, когда вам необходимо поделиться подробной диагностической информацией, охватывающей проблемы системного уровня, дампы сбоев или низкоуровневую отладку сети и Bluetooth:
- Ввод в эксплуатацию BLE в Matter: При сообщении о проблеме с вводом в эксплуатацию BLE в Matter, перед воспроизведением проблемы включите журнал отслеживания Bluetooth HCI в параметрах разработчика ( Настройки > Параметры разработчика > Включить журнал отслеживания Bluetooth HCI ).
- Подготовка к тестированию: Перед запуском теста выполните действия, описанные в разделе «Включение флагов подробной отладки» , чтобы активировать свойства подробной отладки на вашем устройстве.
- Создание отчета об ошибке: После запуска теста и воспроизведения проблемы выполните следующую команду, чтобы создать полный архив отчета об ошибке:
adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip - Расширенная отладочная информация: Сгенерированный файл
android-bugreport_YYYYMMDDmmss.zipсодержит исчерпывающие диагностические данные системного уровня, включая полные дампы системы, статистику памяти, диагностику батареи и трассировку подсистем на низком уровне, что предоставляет более подробную информацию для отладки.
Журналы устройства Cast Hub
Просматривать журналы работы устройства Google Nest Hub можно следующим способом, который поддерживается для следующих моделей:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
Для включения концентратора Cast для получения локальных логов:
- Настройте Android Debug Bridge .
Получите IP-адрес вашего хаба:
- Если у центрального блока есть экран:
- Проведите пальцем вниз от верхнего края экрана.
- Нажмите на «Настройки»
- Найдите IP-адрес устройства: на Nest Hub (2nd gen) перейдите в раздел «Информация об устройстве» > «Техническая информация» > «IP-адрес».
- С сайта GHA на вашем телефоне:
- Коснитесь устройства, чтобы открыть страницу с подробными сведениями о нем.
- Нажмите на значок « », чтобы открыть страницу настроек.
- Чтобы узнать IP-адрес устройства, перейдите в раздел «Информация об устройстве» > «Техническая информация» > «IP-адрес».
- Если у центрального блока есть экран:
На компьютере, подключенном к той же сети Wi-Fi, что и устройство:
adb connect ip-addressadb logcatЧтобы предоставить кому-либо журналы, выполните операцию, которая завершается с ошибкой, и перенаправьте вывод в текстовый файл:
adb logcat -d > platform-logs.txt
Автоматизация
Обнаружение границ
В экосистеме Google Home в функциях автоматизации используется обнаружение изменений состояния , то есть логика, которая проверяет, что запуск устройства происходит только при фактическом изменении состояния, в отличие от обновления состояния, которое просто повторяет предыдущее состояние устройства.
Например, если включение света является запуском, то обнаружение фронта сигнала подтверждает, что запуск срабатывает только в том случае, если световой прибор переходит из выключенного состояния во включенное, а не из включенного в включенное (без изменений).
Автоматизация работает не так, как ожидалось.
Если автоматизация работает не так, как ожидалось, с учетом обнаружения границ, после этого:
Проверьте каждое устройство, чтобы убедиться в его исправной работе независимо от вашей системы автоматизации.
Внимательно изучите график автоматизации для вашей системы автоматизации и сравните его с вашим DSL-языком автоматизации, чтобы выявить любые потенциально неверные предположения с вашей стороны.
Отслеживайте состояние устройства в приложении Google Home во время выполнения автоматизации.
Убедитесь, что все устройства, на которые ссылается автоматизация, присутствуют в структуре там, где вы ожидаете их увидеть. Удаление устройства, от которого зависит автоматизация, может иметь непредвиденные последствия. См. раздел «Влияние удаления устройства на автоматизацию» .
Автоматизация запускается тогда, когда не должна.
Если ваша автоматизация запускается тогда, когда не должна, проверьте критерии запуска. Возможно, потребуется добавить дополнительную логику, чтобы гарантировать, что изменение состояния будет зафиксировано только один раз и запустит автоматизацию только один раз.
Автоматизация не компилируется
Убедитесь, что ваше приложение содержит все необходимые импорты, включая каждый класс, соответствующий различным типам узлов, а также трейты, на которые вы ссылаетесь.
Создание автоматизации не проходит проверку.
Если автоматизация не проходит проверку, появляется предупреждение или сообщение об ошибке, содержащее информацию о проблеме. Для получения дополнительной информации обратитесь к справочнику ValidationIssueType .
Функция List генерирует исключения.
При вызове функции «Список API автоматизации» обработчики чтения могут генерировать исключения из-за отсутствия необходимых функций API. Для предотвращения этого удалите соответствующую автоматизацию.
Для этого:
- Убедитесь, что
adbустановлен. См. раздел «Установка adb» . Получите идентификатор автоматизации из логов Android, вызвав:
adb logcat -s GhpNativeПримеры логов:
adb logcat -s GhpNative level:debug | grep -A 10 -B 10 AutomationManagerTrait\.ListResponse INTERACTION RESPONSE -> SendCommandsResponse: 1 { 1: "automation@global" 3 { 1: "home.internal.traits.automation.AutomationManagerTrait.ListResponse" 2: 5 { 1: "type.googleapis.com/home.internal.traits.automation.AutomationManagerTrait.ListResponse" 1 { 1: "1111-2222-3333-44444-55555" // Automation ID to delete 2: "structure@2222-3333-4444-5555-6666" ...Если необходимо удалить несколько идентификаторов автоматизации, вы можете использовать пейджер терминала для управления выводом:
adb logcat -s GhpNative level:debug | lessУдалите автоматизацию, используя её идентификатор:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
API обнаружения регистрирует предупреждение, если признак не зарегистрирован.
Если API Discovery выдает предупреждение " Trait not found , это означает, что API пытается использовать трейт для кандидатов Discovery, но безуспешно, поскольку трейт не был зарегистрирован во время инициализации. Например:
09-03 17:45:20.578 10646 10646 W AutomationSdk: trait_id: "home.matter.6006.clusters.fc43" and Exception occurred com.google.home.HomeException: 18: Trait not found: home.matter.6006.clusters.fc43
09-03 17:45:20.578 10646 10646 W AutomationSdk: While converting candidate: # com.google.home.platform.traits.AutomationCandidateNode@76f0b582
Идентификатор признака — home.matter.6006.clusters.fc43 , что соответствует RelativeHumidityControl . Чтобы определить имя признака по идентификатору, см. индекс признаков .
В этом примере компонент RelativeHumidityControl необходимо зарегистрировать во время инициализации приложения. Для добавления компонента в реестр обратитесь к разделу «Регистрация характеристик» .
OAuth
Если у вас уже есть клиент OAuth
Если у вас уже есть проверенный OAuth-клиент для опубликованного приложения, вы можете использовать его для тестирования API Home.
Регистрация Google Home Developer Console не требуется для тестирования и использования API Home. Однако вам все равно потребуется подтвержденная регистрация Developer Console для публикации вашего приложения, даже если у вас есть проверенный клиент OAuth из другой интеграции.
Принимаются во внимание следующие факторы:
При использовании существующего OAuth-клиента действует ограничение в 100 пользователей. Информацию о добавлении тестовых пользователей см. в соответствующем разделе.Настройте экран согласия OAuth .Независимо от аутентификации OAuth, существует ограничение, установленное Home APIs, — не более 100 пользователей, которые могут предоставлять разрешения вашему приложению. Это ограничение снимается после завершения регистрации в Developer Console .
Регистрация Developer Console Этот документ следует отправить на утверждение, когда вы будете готовы ограничить предоставление доступа к определенным типам устройств через OAuth в рамках подготовки к обновлению вашего приложения с использованием Home API.
Для приложений Google Cloud , ожидающих проверки OAuth, пользователи не смогут завершить процесс OAuth до завершения проверки. Попытки предоставить разрешения завершатся ошибкой:
Access blocked: <Project Name> has not completed the Google verification process.