运行和调试功能块

卡片不是应用,因此使用不同的机制进行部署和启动。 当设备启用了开发者选项(模拟器默认启用这些功能)时,Android Studio 和 adb 中会提供支持卡片开发的其他功能。

部署功能块

如需部署功能块,您可以使用 Android Studio 在实体设备或模拟器上安装应用,如构建和运行应用中所述。然后,按照与普通用户相同的步骤,手动将功能块添加到功能块轮播界面。

在积极开发期间,您可能会发现使用 Android Studio 的 “Wear OS 卡片”运行/调试配置功能更轻松、更快捷。此方法会自动部署并激活功能块,无需额外的操作步骤即可立即进行互动。

自动创建配置

部署和运行图块的最简单方法是使用边线中的“运行服务”图标。如果运行配置尚不存在,此操作会自动创建运行配置。如需了解详情,请参阅 Wear OS 运行/调试配置。

屏幕截图,其中红色箭头指向边栏中的“▷”
点击边栏中的“▷”
屏幕截图:红色箭头指向运行配置下拉菜单,且“TestTileService”配置选项用红色框标出
系统会自动创建“运行配置”

手动创建配置

如果自动配置不起作用,或者您希望更好地控制结果,请参阅以下说明。这些屏幕截图来自 Android Studio Meerkat (2024.3.1)。

  1. 从标题栏中选择“⋮”(“汉堡”)选项。

    屏幕截图,其中红色箭头指向标题栏中的“⋮”(“汉堡”)选项。
  2. 选择“修改…”。

    “修改…”是下拉列表“配置”部分下的第一个选项。
  3. 在随即显示的对话框中,选择“+”以添加配置。

    屏幕截图,其中红色箭头指向“+”。
  4. 选择“Wear OS Tile”(Wear OS 功能块)作为新配置的类型。

    屏幕截图,其中红色箭头指向“Wear OS Tile”(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 资源,您需要在 TilePreviewData 的 onTileResourceRequest 参数中注册这些资源,如以下代码段所示:

@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()
    }
)

显示平台数据源中的特定值

如果您的功能块使用平台数据(例如心率、卡路里、距离和步数),则功能块会显示这些数据的默认值。

如需显示特定值,请在创建 TilePreviewData 对象时设置 platformDataValues 参数,如以下代码段所示:

@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:错误。