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

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

Развернуть карточки

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

В процессе разработки вам может быть удобнее и быстрее использовать функцию Конфигурация выполнения/отладки карточки Wear OS в 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 Feature Drop, вы можете просматривать снимки карточек приложения для 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 относится к другому пакету, а не к тому, который вы используете для предварительного просмотра composable-функций.

@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: ошибка.