Предварительные условия и настройка
Прежде чем начать, убедитесь, что ваша среда соответствует следующим требованиям.
Требования к среде выполнения
Для работы Wear Widgets на целевом устройстве требуется версия 1.6.1 или выше APK-файла com.google.android.wearable.protolayout.renderer .
Получить совместимую версию рендерера можно одним из следующих способов:
- Эмулятор Wear OS 7 : Используйте образ эмулятора Wear OS 7. Версии ниже 7 не подходят. Инструкции по настройке см. в разделе «Настройка эмулятора Wear OS 7» .
- Физическое устройство : Используйте физическое устройство Wear OS, которое получает автоматические обновления из Google Play Store, или устройство разработчика, подключенное к Google Play Store.
Чтобы проверить, какая версия установлена на вашем устройстве, используйте следующую команду:
adb shell dumpsys package com.google.android.wearable.protolayout.renderer | \
grep -m 1 versionName | \
awk -F= '{print $2}'
Конфигурация Gradle
Библиотеки Wear Widget доступны в Google Maven .
1. Настройка версии SDK
Убедитесь, что значения compileSdk и targetSdk установлены на 37 или выше.
android {
compileSdk = 37
// ...
defaultConfig {
targetSdk = 37
// ...
}
}
2. Добавьте зависимости
В файл build.gradle.kts вашего приложения добавьте следующие зависимости:
Классный
dependencies { // Core Wear Widget and Remote Compose libraries implementation "androidx.compose.remote:remote-creation-compose:1.0.0-alpha18" implementation "androidx.compose.remote:remote-core:1.0.0-alpha18" implementation "androidx.glance.wear:wear:1.0.0-alpha17" implementation "androidx.glance.wear:wear-core:1.0.0-alpha17" implementation "androidx.wear.compose.remote:remote-material3:1.0.0-alpha10" // Tooling for previews (optional, but recommended) implementation "androidx.compose.remote:remote-tooling-preview:1.0.0-alpha18" implementation "androidx.wear.compose:compose-ui-tooling:1.6.2" implementation "androidx.wear.tiles:tiles-tooling-preview:1.6.2" debugImplementation "androidx.wear.tiles:tiles-renderer:1.6.2" }
Котлин
dependencies { // Core Wear Widget and Remote Compose libraries implementation("androidx.compose.remote:remote-creation-compose:1.0.0-alpha18") implementation("androidx.compose.remote:remote-core:1.0.0-alpha18") implementation("androidx.glance.wear:wear:1.0.0-alpha17") implementation("androidx.glance.wear:wear-core:1.0.0-alpha17") implementation("androidx.wear.compose.remote:remote-material3:1.0.0-alpha10") // Tooling for previews (optional, but recommended) implementation("androidx.compose.remote:remote-tooling-preview:1.0.0-alpha18") implementation("androidx.wear.compose:compose-ui-tooling:1.6.2") implementation("androidx.wear.tiles:tiles-tooling-preview:1.6.2") debugImplementation("androidx.wear.tiles:tiles-renderer:1.6.2") }
Создайте виджет "Hello World"
Виджет Wear состоит из сервиса, наследующего GlanceWearWidgetService , и класса виджета, наследующего GlanceWearWidget . Пользовательский интерфейс определяется с помощью функций, @RemoteComposable .
Определите услугу
Сервис является точкой входа, к которой привязывается система.
Чтобы определить свой виджет, создайте сервис, который наследует GlanceWearWidgetService .
@AssociateWithGlanceWearWidget(HelloWidget::class) class HelloWidgetService : GlanceWearWidgetService() { override val widget: GlanceWearWidget = HelloWidget() }
Определить виджет
Класс виджета предоставляет данные и макет для виджета.
class HelloWidget : GlanceWearWidget() { override suspend fun provideWidgetData( context: Context, params: WearWidgetParams, ): WearWidgetData { return WearWidgetDocument( background = WearWidgetBrush.color(Color.Blue.rc), ) { HelloWidgetContent() } } }
Определите содержание
Контент создается с использованием компонентов Remote Compose.
@RemoteComposable @Composable fun HelloWidgetContent() { RemoteBox( modifier = RemoteModifier.fillMaxSize(), contentAlignment = RemoteAlignment.Center, ) { RemoteText( text = "Hello World".rs, color = Color.White.rc, ) } }
Предварительный просмотр виджета в Android Studio
Вы можете предварительно просмотреть макеты виджетов непосредственно на панели «Дизайн» в Android Studio, используя androidx.glance.wear:wear-tooling-preview .
Предварительно определенные наборы для предварительного просмотра
Библиотека wear-tooling-preview предоставляет предопределенные наборы PreviewParameterProvider для тестирования ваших макетов в различных формах контейнеров и конфигурациях устройств:
- Squircle Suite (
SquircleAllWidgetPreviewParams): Контейнеры в виде закругленных прямоугольников. - Round Suite (
RoundAllWidgetPreviewParams): Контейнеры в форме таблеток. - Прямоугольный набор (
RectangularAllWidgetPreviewParams): Необрезанные прямоугольные контейнеры с безопасным отступом. Изображения, созданные с этой конфигурацией предварительного просмотра, подходят для использования в качестве встроенных в APK изображений предварительного просмотра, используемых средством выбора виджетов (см. раздел «Создание ресурсов изображений предварительного просмотра» ).
Для предварительного просмотра виджета в Android Studio используйте @WearWidgetPreview :
@Preview @Composable fun HelloWidgetPreview( @PreviewParameter(SquircleAllWidgetPreviewParams::class) params: WearWidgetParams, ) { WearWidgetPreview( widget = HelloWidget(), params = params, ) }
Создайте XML-файл конфигурации виджета.
Создайте новый файл res/xml/hello_widget_info.xml чтобы определить свойства виджета и поддерживаемые размеры. Полный список поддерживаемых XML-атрибутов в теге <wearwidget-provider> см. в документации WearWidgetProviderInfo .
<wearwidget-provider description="@string/hello_widget_description" icon="@mipmap/ic_launcher" label="@string/hello_widget_label" preferredType="SMALL"> <container type="SMALL" previewImage="@drawable/widget_preview_small" /> <container type="LARGE" previewImage="@drawable/widget_preview_large" /> </wearwidget-provider>
Сгенерировать изображения для предварительного просмотра
Атрибут previewImage элемента <container> ссылается на ресурс drawable, отображаемый в системном средстве выбора виджетов. Для генерации ресурсов предварительного просмотра с правильными границами и плотностью используйте Android Studio Previews с параметром RectangularAllWidgetPreviewParams (который генерирует варианты предварительного просмотра как для маленьких, так и для больших контейнеров) и укажите плотность дисплея смарт-часов 320 DPI:
@Preview( name = "Widget Preview Asset", device = "spec:width=1000dp,height=1000dp,dpi=320", ) @Composable fun HelloWidgetCatalogPreview( @PreviewParameter(RectangularAllWidgetPreviewParams::class) params: WearWidgetParams, ) { WearWidgetPreview( widget = HelloWidget(), params = params, ) }
Для извлечения отрендеренных изображений предварительного просмотра выполните следующие шаги:
- В Android Studio откройте панель дизайна для элемента предварительного просмотра.
- В окне предварительного просмотра щелкните правой кнопкой мыши по полученному изображению или воспользуйтесь панелью инструментов предварительного просмотра, чтобы выбрать «Копировать изображение» или сохранить изображение. В качестве альтернативы, используйте инструменты командной строки или автоматизированные скрипты для извлечения изображений из окна Compose.
- Сохраните файлы изображений малого и большого размера в каталог
res/drawable-nodpi/вашего приложения, например,res/drawable-nodpi/widget_preview_small.pngиres/drawable-nodpi/widget_preview_large.png.
Зарегистрируйте в файле AndroidManifest.xml
Зарегистрируйте сервис в файле AndroidManifest.xml указав необходимые фильтры намерений и метаданные.
<service android:name=".snippets.widget.HelloWidgetService" android:exported="true" android:icon="@mipmap/ic_launcher" android:label="@string/hello_widget_label" android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER"> <intent-filter> <action android:name="androidx.glance.wear.action.BIND_WIDGET_PROVIDER" /> <!-- If you already have a Tile, omit the following line. --> <action android:name="androidx.wear.tiles.action.BIND_TILE_PROVIDER" /> </intent-filter> <meta-data android:name="androidx.glance.wear.widget.provider" android:resource="@xml/hello_widget_info" /> <meta-data android:name="androidx.wear.tiles.PREVIEW" android:resource="@drawable/tile_preview" /> </service>
Сборка и развертывание
После определения сервиса и виджета вы можете собрать свой проект и развернуть его на устройстве или эмуляторе.
Сборка и установка
Соберите проект и установите отладочный APK-файл на подключенное устройство или эмулятор:
./gradlew :app:installDebug
Добавьте и просмотрите свой виджет.
После установки приложения используйте adb для программного добавления виджета в карусель и отображения его на экране.
Примечание: Wear Widgets используют базовую инфраструктуру тайлов для целей отладки. В результате команды adb требуют выполнения операций add-tile и show-tile .
1. Добавьте виджет в карусель:
adb shell am broadcast \
-a com.google.android.wearable.app.DEBUG_SURFACE \
--es operation add-tile \
--ecn component <your_package_name>/.HelloWidgetService
2. Отобразить виджет:
adb shell am broadcast \
-a com.google.android.wearable.app.DEBUG_SYSUI \
--es operation show-tile \
--ei index 0