Solução de problemas

App de exemplo

Se você tiver problemas ao usar as APIs Home, colete registros para mais depuração. Para coletar registros do dispositivo móvel, é necessário o Android Debug Bridge (adb). Se você precisar de ajuda do Google, colete os registros dos dispositivos Android e do hub e abra um tíquete no rastreador de problemas com as informações e os registros relevantes associados a ele.

Coletar registros do Android

Seu dispositivo móvel precisa estar conectado à máquina local em todas as etapas que envolvem adb.

Instalar o adb

Se ainda não fez isso, configure o Android Debug Bridge na sua máquina local:

  1. Instale o "adb" no seu computador.
  2. Ative as opções do desenvolvedor e a depuração USB no smartphone Android.

Receber o ID do dispositivo móvel

  1. Encontre o ID do seu dispositivo móvel:
    adb devices
    List of devices attached
    device-id    device
  2. Armazene esse valor em uma variável chamada phoneid:
    phoneid=device-id

Informações da versão

Recomendamos coletar todas as informações de versão relacionadas à sua configuração sempre que decidir coletar registros. Isso é necessário se você precisar compartilhar problemas com o Google.

  1. Salve várias informações do dispositivo em variáveis:
    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)
  2. Salve todas as variáveis em um arquivo chamado _versions.txt:

    Expandir para mostrar comandos para salvar variáveis em um arquivo

    Todo o bloco pode ser copiado e colado em um terminal de uma só vez.

    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
  3. Verifique o conteúdo de _versions.txt:
    cat _versions.txt

    Abrir para mostrar a saída do arquivo de amostra

    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...
    Esse arquivo pode ser fornecido ao Google conforme necessário para a solução de problemas.

Ativar flags de depuração detalhada

Antes de coletar registros de dispositivos Android ou executar um relatório de bugs, configure o tamanho do buffer do logger e ative tags de depuração detalhada para componentes do Google Home e do 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

Coletar registros do Android por scripts

Para capturar registros de dispositivos Android ativos durante uma sessão de depuração:

  1. Siga as instruções em Ativar flags de depuração detalhada para limpar os registros atuais, aumentar o tamanho do buffer e definir tags de geração de registros detalhada.
  2. Feche todos os aplicativos em execução no dispositivo móvel.
  3. Limpe o ruído do buffer de registros antes de iniciar o teste:
    adb -s $phoneid logcat -c
  4. Inicie o processo de coleta de registros em uma janela de terminal:
    adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt
    Deixe essa janela do terminal aberta. Isso vai capturar registros do seu dispositivo enquanto o processo estiver em execução.
  5. Execute o app e realize todas as ações da interface do usuário necessárias para reproduzir o problema.
  6. Quando terminar, pressione Ctrl+C (ou Cmd+C no Mac) para interromper o processo logcat no terminal.
  7. Os registros desta sessão são salvos em android-logs_YYYYMMDDmmss.txt. Anexe android-logs_YYYYMMDDmmss.txt e _versions.txt a todos os relatórios de bugs.

Coletar registros do Android com o relatório de bugs do adb

Capture um relatório de bug completo do Android quando precisar compartilhar informações de diagnóstico detalhadas sobre problemas no nível do sistema, despejos de falhas ou depuração de rede e Bluetooth de baixo nível:

  • Provisionamento do Matter BLE:ao informar um problema de provisionamento do Matter relacionado ao BLE, ative o registro de rastreamento do HCI Bluetooth nas Opções do desenvolvedor (Configurações > Opções do desenvolvedor > Ativar registro de rastreamento do HCI Bluetooth) antes de reproduzir o problema.
  • Configuração pré-teste:antes de executar o teste, siga as etapas em Ativar flags de depuração detalhada para ativar as propriedades de depuração detalhada no dispositivo.
  • Capturar relatório do bug:depois de executar o teste e reproduzir o problema, execute o seguinte comando para gerar um arquivo completo de relatório do bug:
    adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip
  • Informações avançadas de depuração:o arquivo android-bugreport_YYYYMMDDmmss.zip gerado contém dados de diagnóstico abrangentes no nível do sistema, incluindo despejos completos do sistema, estatísticas de memória, diagnósticos de bateria e rastreamentos de subsistemas de baixo nível, fornecendo informações mais avançadas para depuração.

Registros de dispositivos do hub do Cast

É possível conferir os registros do dispositivo no Google Nest Hub usando este método, que é compatível com os seguintes modelos:

  • Google Home
  • Google Nest Audio
  • Google Nest Hub
  • Google Nest Mini

Para ativar um hub do Google Cast para recuperação de registros locais:

  1. Configure o Android Debug Bridge.
  2. Consiga o endereço IP do hub:

    • No hub, se ele tiver uma tela:
      1. Deslize de cima para baixo na tela.
      2. Toque no ícone Configurações
      3. Encontre o endereço IP do dispositivo: em um Nest Hub (2nd gen), acesse Informações do dispositivo > Informações técnicas > Endereço IP
    • Em GHA no seu smartphone:
      1. Toque no dispositivo para abrir a página de detalhes.
      2. Toque no ícone Configurações para abrir a página de configurações.
      3. Encontre o endereço IP do dispositivo: acesse Informações do dispositivo > Informações técnicas > Endereço IP
  3. Em um computador na mesma rede Wi-Fi do dispositivo:

      adb connect ip-address
      adb logcat
    

  4. Para fornecer registros a alguém, execute a operação com falha e envie a saída para um arquivo de texto:

      adb logcat -d > platform-logs.txt
    

Automações

Detecção de bordas

As automações no ecossistema do Google Home têm detecção de borda, que é uma lógica que verifica se um gatilho só é ativado quando há uma mudança real de estado, e não uma atualização que apenas repete o estado anterior do dispositivo.

Por exemplo, se acender uma luz for um gatilho, a detecção de borda vai verificar se o gatilho só é ativado se o dispositivo de iluminação passar de desligado para ligado, e não de ligado para ligado (sem mudança).

A automação não se comporta como esperado

Depois de considerar a detecção de bordas, se uma automação não se comportar como esperado:

  1. Verifique cada dispositivo para garantir que ele esteja funcionando corretamente, independente da sua automação.

  2. Confira o gráfico de automação para comparar com a DSL e revelar possíveis suposições incorretas da sua parte.

  3. Observe o estado do dispositivo no app Google Home durante a execução da automação.

  4. Verifique se todos os dispositivos referenciados pela automação estão presentes na estrutura em que você espera que eles estejam. Excluir um dispositivo de que uma automação depende pode ter consequências indesejadas. Consulte Impacto da exclusão de dispositivos nas automações.

A automação é executada quando não deveria

Se a automação for executada quando não deveria, examine os critérios de ativação. Talvez seja necessário adicionar mais lógica para garantir que uma mudança de estado seja capturada e acione a automação apenas uma vez.

A automação não é compilada

Verifique se o app contém todas as importações necessárias, incluindo cada classe correspondente aos diferentes tipos de nós, bem como os traços a que você está fazendo referência.

A criação da automação falha na validação

Se a criação da automação não passar na validação, uma mensagem de aviso ou erro vai fornecer informações sobre o problema. Para mais informações, consulte a referência de ValidationIssueType.

A função de lista gera exceções

Ao chamar a função "List" da API Automation, os manipuladores de leitura podem gerar exceções devido à falta de recursos da API. Para evitar isso, exclua a automação afetada.

Para fazer isto:

  1. Verifique se o adb instalado está instalado. Consulte Instalar o adb.
  2. Recupere o ID da automação nos registros do Android invocando:

    adb logcat -s GhpNative

    Exemplos de registros:

    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"
    ...

    Se for necessário excluir vários IDs de automação, use o pager do terminal para controlar a saída:

    adb logcat -s GhpNative level:debug | less
  3. Exclua a automação usando o ID dela:

    structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
    

A API Discovery registra um aviso quando um traço é cancelado.

Se a API Discovery registrar um aviso para Trait not found, isso significa que a API está tentando usar a característica para candidatos da API Discovery, mas não vai conseguir porque a característica não foi registrada durante a inicialização. Exemplo:

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

O identificador de traço é home.matter.6006.clusters.fc43, que corresponde a RelativeHumidityControl. Para determinar o nome de um traço com base em um ID, consulte o Índice de traços.

Neste exemplo, RelativeHumidityControl precisa ser registrado durante a inicialização do app. Consulte Registrar características para adicionar sua característica ao registro.

OAuth

Se você já tem um cliente OAuth

Se você já tiver um cliente OAuth verificado para um app publicado, use esse cliente para testar as APIs Home.

Não é necessário fazer o registro do Google Home Developer Console para testar e usar as APIs Home. No entanto, você ainda vai precisar de um registro de Developer Console aprovado para publicar seu app, mesmo que tenha um cliente OAuth verificado de outra integração.

As seguintes considerações se aplicam:

  • Há um limite de 100 usuários ao usar um cliente OAuth atual. Para informações sobre como adicionar usuários de teste, consulte Configure a tela de permissão OAuth. Independente da verificação do OAuth, há um limite imposto pelas APIs domésticas de 100 usuários que podem conceder permissões ao seu aplicativo. Essa limitação é removida após a conclusão do registro do Developer Console.

  • ODeveloper Console registro deve ser enviado para aprovação quando você estiver pronto para restringir as concessões de tipo de dispositivo pelo OAuth em preparação para atualizar o app com as APIs Home.

Para apps Google Cloud que ainda estão pendentes de verificação do OAuth, os usuários não podem concluir o fluxo do OAuth até que a verificação seja concluída. As tentativas de conceder permissões vão falhar com o seguinte erro:

Access blocked: <Project Name> has not completed the Google verification process.