Как запустить и отладить виджет

Плитки не являются приложениями, поэтому их развертывание и запуск выполняются с помощью других механизмов. Если на устройстве включены параметры разработчика (на эмуляторах они включены по умолчанию), в Android Studio и adb становятся доступны дополнительные функции, которые помогают разрабатывать элементы интерфейса.

Как развернуть элементы

Чтобы развернуть плитку, установите приложение на физическое устройство или эмулятор с помощью Android Studio, как описано в разделе Создание и запуск приложения. Затем, следуя инструкциям для обычных пользователей, вручную добавьте плитку в карусель плиток.

Во время активной разработки вам может быть проще и быстрее использовать функцию Wear OS Tile Run/Debug Configuration в Android Studio. Этот метод автоматически развертывает и активирует карточку, позволяя сразу же взаимодействовать с ней без дополнительных действий.

Как создать конфигурацию автоматически

Самый простой способ развернуть и запустить виджет – использовать значок "Запустить сервис" на полях. Если конфигурация запуска ещё не создана, она будет создана автоматически. Подробнее о конфигурациях запуска и отладки для Wear OS…

Скриншот с красной стрелкой, указывающей на значок "▷" на полях
Нажмите "▷" на полях.
Скриншот, на котором красная стрелка указывает на раскрывающийся список конфигурации запуска, а вариант конфигурации TestTileService выделен красным цветом
Конфигурация запуска будет создана автоматически.

Как создать конфигурацию вручную

Если автоматическая настройка не работает или вы хотите иметь больше контроля над результатом, следуйте приведенным ниже инструкциям. Скриншоты сделаны в Android Studio Meerkat (2024.3.1).

  1. На панели заголовка нажмите на значок меню "⋮" (гамбургер).

    Скриншот с красной стрелкой, указывающей на значок меню "⋮" ("гамбургер") на панели заголовка.
  2. Выберите "Изменить…".

    "Изменить…" – первый вариант в разделе "Конфигурация" раскрывающегося списка.
  3. Нажмите "+" в появившемся диалоговом окне, чтобы добавить конфигурацию.

    Скриншот с красной стрелкой, указывающей на значок "+".
  4. Выберите "Плитка Wear OS" в качестве типа новой конфигурации.

    Скриншот с красной стрелкой, указывающей на параметр конфигурации "Плитка Wear OS".
  5. Введите название конфигурации и выберите модуль и плитку.

    Скриншот с тремя красными стрелками, указывающими на области диалогового окна.
  6. Нажмите "ОК". Ваша конфигурация появится в строке заголовка. Нажмите кнопку "▷" ("Выполнить"), и ваша карточка будет развернута и активирована.

Предпросмотр карточек в Android Studio

Начиная с набора функций Android Studio Koala, вы можете просматривать снимки карточек приложения Wear OS. Эта панель особенно полезна, если внешний вид вашей плитки меняется в зависимости от условий, например если контент различается в зависимости от размера экрана устройства или если спортивное мероприятие достигло перерыва.

Названия групп на панели предварительного просмотра совпадают с названиями групп, указанными в аннотации для предварительного просмотра.
Панель предпросмотра плиток в Android Studio.

Добавьте зависимости

Добавьте в файл build.gradle.kts или build.gradle своего приложения следующие зависимости:

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

Как настроить предпросмотр карточек

Чтобы посмотреть, как будет выглядеть виджет на экранах Wear OS разных размеров, добавьте аннотацию @Preview и передайте параметр device. Обратите внимание, что аннотация @Preview относится к другому пакету, чем тот, который вы используете для составных предварительных просмотров.

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

Как добавить и зарегистрировать ресурсы

Если в вашем виджете используются ресурсы Android, их нужно зарегистрировать в параметре onTileResourceRequest элемента TilePreviewData, как показано в следующем фрагменте кода:

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

Показывать определенные значения из источников данных платформы

Если на виджете используются данные платформы, например о пульсе, калориях, расстоянии и шагах, то на нем будут показаны значения по умолчанию.

Чтобы показать определенное значение, задайте параметр platformDataValues при создании объекта TilePreviewData, как показано в следующем фрагменте кода:

@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(
            buildMyTileLayoutDynamic(context, request.deviceConfiguration)
        ).build()
    }
)

Как управлять карточками с помощью adb

adb можно использовать для программной установки, удаления и активации элементов во время разработки.

В приведенных ниже командах ComponentName – это строка, состоящая из названия пакета и класса внутри этого пакета, например com.example.wear.tiles/com.example.wear.tiles.PreviewTileService.

add-tile

Добавляет фрагмент, предоставленный COMPONENT_NAME, и возвращает индекс.

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

Пример выходных данных:

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

Если параметр уже есть в карусели, он будет удален и добавлен на то же место. В противном случае он будет вставлен в позицию Index[0]. Если карусель заполнена, последняя плитка удаляется, чтобы освободить место для новой.

show-tile

Активировать элемент с индексом TILE_INDEX.

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

Пример выходных данных:

Broadcast completed: result=1

remove-tile

Удаляет все экземпляры карточек, связанные с COMPONENT_NAME, из карусели.

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

Пример выходных данных:

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

Возвращаемые значения

  • result=0 – ни один широковещательный приемник не ответил на эту команду. Скорее всего, это произошло потому, что версия Wear OS слишком старая или процесс отладки не запущен.
  • result=1 – успешное выполнение.
  • result>1: ошибка.