Executar e depurar um bloco

Os blocos não são apps e, portanto, são implantados e iniciados usando mecanismos diferentes. Quando um dispositivo tem as opções do desenvolvedor ativadas (os emuladores têm esses recursos ativados por padrão), outros recursos que oferecem suporte ao desenvolvimento de blocos ficam disponíveis para uso no Android Studio e no adb.

Implantar blocos

Para implantar o bloco, instale o app em um dispositivo físico ou emulador usando o Android Studio, conforme descrito em Criar e executar o app. Depois, seguindo as mesmas etapas dos usuários comuns, adicione manualmente o bloco ao carrossel de blocos.

Durante o desenvolvimento ativo, pode ser mais fácil e rápido usar o recurso "Bloco do Wear OS" de configuração de execução/depuração do Android Studio. Esse método implanta e ativa seu bloco automaticamente, permitindo a interação imediata sem etapas manuais adicionais.

Criar configuração automaticamente

A maneira mais fácil de implantar e executar um bloco é usar o ícone "Executar serviço" na margem. Isso cria automaticamente uma configuração de execução, se ela ainda não existir. Consulte Configurações de execução/depuração do Wear OS para mais informações.

Captura de tela com uma seta vermelha apontando para "▷" na margem
Clique em "▷" na medianiz
Captura de tela mostrando uma seta vermelha apontando para o menu suspenso de configuração de execução e a opção de configuração "TestTileService" destacada em vermelho
Uma "configuração de execução" é criada automaticamente

Criar configuração manualmente

Se a configuração automática não funcionar ou se você quiser ter mais controle sobre o resultado, siga as instruções abaixo. As capturas de tela são do Android Studio Meerkat (2024.3.1).

  1. Selecione a opção "⋮" ("hambúrguer") na barra de título.

    Captura de tela com uma seta vermelha apontando para a opção "⋮" ("hambúrguer") na barra de título.
  2. Selecione "Editar…".

    "Editar…" é a primeira opção na seção "Configuração" da lista suspensa.
  3. Selecione "+" para adicionar uma configuração na caixa de diálogo que aparece.

    Captura de tela com uma seta vermelha apontando para "+".
  4. Selecione "Bloco do Wear OS" como o tipo da nova configuração.

    Captura de tela com uma seta vermelha apontando para a opção de configuração "Bloco do Wear OS".
  5. Insira um nome para sua configuração e selecione o módulo e o bloco conforme necessário.

    Captura de tela com três setas vermelhas apontando para áreas da janela de diálogo.
  6. Toque em "OK". Sua configuração vai aparecer na barra de título. Toque no botão "▷" ("executar"). Seu bloco será implantado e ativado.

Visualizar blocos no Android Studio

A partir do Android Studio Koala Feature Drop, é possível conferir snapshots dos blocos do app Wear OS. Esse painel é útil principalmente se a aparência do bloco mudar em resposta a condições, como conteúdo diferente dependendo do tamanho da tela do dispositivo ou um evento esportivo chegando ao intervalo.

Os nomes dos grupos no painel de visualização correspondem ao nome do grupo na
    anotação de visualização
Painel de visualização de blocos no Android Studio.

Adicionar dependências

Inclua as seguintes dependências no arquivo build.gradle.kts ou build.gradle do app:

dependencies {
    implementation("androidx.wear.tiles:tiles-tooling-preview:1.5.0")
    debugImplementation("androidx.wear.tiles:tiles-tooling:1.5.0")
    implementation("androidx.wear:wear-tooling-preview:1.0.0")
}

Configurar visualizações de bloco

Para ver uma prévia da aparência do bloco em diferentes tamanhos de tela do Wear OS, adicione a anotação @Preview e transmita o parâmetro device. Essa anotação @Preview é de um pacote diferente daquele usado para pré-visualizações combináveis.

import androidx.wear.tiles.tooling.preview.Preview

@Preview(device = WearDevices.SMALL_ROUND)
@Preview(device = WearDevices.LARGE_ROUND)
fun tilePreview(context: Context) = TilePreviewData(
    onTileRequest = { request ->
        TilePreviewHelper.singleTimelineEntryTileBuilder(
            buildMyTileLayout()
        ).build()
    }
)

Adicionar e registrar recursos

Se o bloco usar recursos do Android, será necessário registrá-los no parâmetro onTileResourceRequest de TilePreviewData, conforme mostrado no snippet de código a seguir:

import androidx.wear.tiles.tooling.preview.Preview

@Preview(device = WearDevices.SMALL_ROUND)
fun previewWithResources(context: Context) = TilePreviewData(
    onTileResourceRequest = { request ->
        Resources.Builder()
            .setVersion(myResourcesVersion)
            .addIdToImageMapping(
                    myImageId, getImageById(R.drawable.myDrawableImageId))
            .build()
    },
    onTileRequest = { request ->
        TilePreviewHelper.singleTimelineEntryTileBuilder(
            buildMyTileLayout()
        ).build()
    }
)

fun getImageById(
    @DrawableRes id: Int,
): ImageResource =
    ImageResource.Builder()
        .setAndroidResourceByResId(
            AndroidImageResourceByResId.Builder()
                .setResourceId(id)
                .build(),
        )
        .build()

Mostrar valores específicos de fontes de dados da plataforma

Se o bloco usar dados da plataforma, como frequência cardíaca, calorias, distância e passos, ele vai mostrar os valores padrão.

Para mostrar um valor específico, defina o parâmetro platformDataValues ao criar o objeto TilePreviewData, conforme mostrado no snippet de código a seguir:

import androidx.wear.tiles.tooling.preview.Preview

@Preview(device = WearDevices.SMALL_ROUND)
fun previewWithPlatformOverride(context: Context) = TilePreviewData(
    platformDataValues = PlatformDataValues.of(
        PlatformHealthSources.Keys.HEART_RATE_BPM,
        DynamicDataBuilders.DynamicDataValue.fromFloat(160f)
    ),
    onTileRequest = { request ->
        TilePreviewHelper.singleTimelineEntryTileBuilder(
            buildMyTileLayout()
        ).build()
    }
)

Manipular blocos usando o adb

O adb pode ser usado para instalar, remover e ativar blocos de maneira programática durante o desenvolvimento.

Nos comandos a seguir, ComponentName é uma string composta pelo nome do pacote e uma classe dentro desse pacote, por exemplo com.example.wear.tiles/com.example.wear.tiles.PreviewTileService.

add-tile

Adiciona um bloco fornecido por COMPONENT_NAME e retorna o índice.

adb shell am broadcast -a com.google.android.wearable.app.DEBUG_SURFACE --es operation add-tile --ecn component [COMPONENT_NAME]

Exemplo de saída:

Broadcast completed: result=1, data="Index=[0]"

Se um bloco já existir no carrossel, ele será removido e reinserido no mesmo local. Caso contrário, ele será inserido em Index[0]. Além disso, se o carrossel estiver na capacidade máxima, o último bloco será removido para abrir espaço para o novo.

show-tile

Ativa o bloco no índice TILE_INDEX.

adb shell am broadcast -a com.google.android.wearable.app.DEBUG_SYSUI --es operation show-tile --ei index [TILE_INDEX]

Exemplo de saída:

Broadcast completed: result=1

remove-tile

Remove todas as instâncias de bloco no carrossel associadas a COMPONENT_NAME.

adb shell am broadcast -a com.google.android.wearable.app.DEBUG_SURFACE --es operation remove-tile --ecn component [COMPONENT_NAME]

Exemplo de saída:

result=1, data="Tile(s) removed."

Valores de retorno

  • result=0: nenhum broadcast receiver respondeu a esse comando, provavelmente porque a versão do Wear OS é muito antiga ou o processo de depuração não está em execução.
  • result=1: sucesso.
  • result>1: erro.