Предварительные условия и настройка
Прежде чем начать, убедитесь, что ваша среда соответствует следующим требованиям.
Требования к среде выполнения
Для работы 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-alpha010" implementation "androidx.compose.remote:remote-core:1.0.0-alpha010" implementation "androidx.glance.wear:wear:1.0.0-alpha09" implementation "androidx.glance.wear:wear-core:1.0.0-alpha09" implementation "androidx.wear.compose.remote:remote-material3:1.0.0-alpha03" // Tooling for previews (optional, but recommended) implementation "androidx.compose.remote:remote-tooling-preview:1.0.0-alpha010" implementation "androidx.wear.compose:compose-ui-tooling:1.6.1" implementation "androidx.wear.tiles:tiles-tooling-preview:1.6.0" debugImplementation "androidx.wear.tiles:tiles-renderer:1.6.0" }
Котлин
dependencies { // Core Wear Widget and Remote Compose libraries implementation("androidx.compose.remote:remote-creation-compose:1.0.0-alpha010") implementation("androidx.compose.remote:remote-core:1.0.0-alpha010") implementation("androidx.glance.wear:wear:1.0.0-alpha09") implementation("androidx.glance.wear:wear-core:1.0.0-alpha09") implementation("androidx.wear.compose.remote:remote-material3:1.0.0-alpha03") // Tooling for previews (optional, but recommended) implementation("androidx.compose.remote:remote-tooling-preview:1.0.0-alpha010") implementation("androidx.wear.compose:compose-ui-tooling:1.6.1") implementation("androidx.wear.tiles:tiles-tooling-preview:1.6.0") debugImplementation("androidx.wear.tiles:tiles-renderer:1.6.0") }
Создайте виджет "Hello World"
Wear Widget состоит из сервиса, расширяющего GlanceWearWidgetService , и класса виджета, расширяющего GlanceWearWidget . Пользовательский интерфейс определяется с помощью функций, @RemoteComposable @RemoteComposable
Определите услугу
Сервис является точкой входа, к которой привязывается система.
Чтобы определить свой виджет, создайте сервис, расширяющий GlanceWearWidgetService . Поскольку эта библиотека находится в активной разработке, доступ к некоторым API ограничен, пока уточняются их окончательные названия и структуры. Использование аннотации ` @SuppressLint("RestrictedApi") сообщает компилятору, что вы намеренно используете эти новые, развивающиеся функции. Это требование является временным и будет снято после завершения разработки API в будущей стабильной версии.
@SuppressLint("RestrictedApi") class HelloWidgetService : GlanceWearWidgetService() { override val widget: GlanceWearWidget = HelloWidget() }
Определить виджет
Класс виджета предоставляет данные и макет для виджета.
@SuppressLint("RestrictedApi") class HelloWidget : GlanceWearWidget() { override suspend fun provideWidgetData( context: Context, params: WearWidgetParams, ): WearWidgetData { return WearWidgetDocument(background = WearWidgetBrush.color(Color.Blue.rc)) { HelloWidgetContent() } } }
Определите содержание
Контент создается с использованием компонентов Remote Compose.
@SuppressLint("RestrictedApi") @RemoteComposable @Composable fun HelloWidgetContent() { RemoteBox( modifier = RemoteModifier.fillMaxSize(), contentAlignment = RemoteAlignment.Center, ) { RemoteText( text = "Hello World", color = Color.White.rc ) } }
Создайте 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>
Зарегистрируйте в файле 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
В Android Studio также доступны предварительные просмотры, которые помогут вам протестировать ваши макеты на экранах разных размеров.