You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过App Center分发App Bundle时Wear OS应用找不到配套手机应用

问题根源

你遇到的核心问题是:存放android_wear_capabilities的wear.xml被资源压缩工具判定为“未使用文件”,直接被整体删除了。虽然你在文件里加了tools:keep,但资源压缩的处理逻辑是先扫描未使用文件,再处理单个资源的保留规则——文件都没了,规则自然无效。

解决办法

1. 用全局资源保留文件锁死目标资源

创建res/raw/keep.xml(没有就新建),这是资源压缩的全局配置文件,优先级比单个资源文件里的规则高:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- 强制保留穿戴能力数组 -->
    tools:keep="@array/android_wear_capabilities"
    <!-- 可选:开启严格模式,只保留明确指定的资源,避免误删 -->
    tools:shrinkMode="strict"
</resources>

2. 给资源加个“假引用”骗过程序

因为android_wear_capabilities是系统通过资源ID识别的,不是代码直接调用的,压缩工具会觉得它没用。你可以在Wear应用的任意类里加一行无意义的代码,让工具认为这个资源被使用了:

// Kotlin随便找个类加
private val dummyCap = R.array.android_wear_capabilities
// Java版本
private static final int DUMMY_CAP = R.array.android_wear_capabilities;

这种“假引用”不会影响功能,但能保住资源不被删。

3. 在Build Gradle里直接配置保留规则

在Wear模块的build.gradle的release构建块里,直接告诉构建工具要保留这个数组:

android {
    buildTypes {
        release {
            shrinkResources true
            // 强制保留目标数组
            keepResources.add("@array/android_wear_capabilities")
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

4. 换个地方存能力数组

如果上面的方法都不好使,干脆把android_wear_capabilities数组移到res/values/strings.xml里——这个文件肯定不会被判定为未使用,再加上原来的属性就行:

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- 你的其他字符串资源 -->
    <string-array name="android_wear_capabilities"
        tools:ignore="UnusedResources"
        translatable="false">
        <item>CapabilityName</item>
    </string-array>
</resources>

验证步骤

用bundletool从App Bundle里提取Wear的APK,检查res/values下有没有包含目标数组的文件,或者直接安装测试,确认设备间的能力识别正常。

内容的提问来源于stack exchange,提问作者Mahesh Mohandasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:13:16