Java CapabilityApi不返回任何节点

Java CapabilityApi不返回任何节点,java,android,wear-os,Java,Android,Wear Os,我正在尝试在我的手持应用程序和可穿戴应用程序之间进行通信,并试图使用功能yapi找到正确的节点。我知道这些设备是连接在一起的——其他应用程序和示例工作正常——但当我运行我的可穿戴应用程序时,既不调用getCapability()也不调用getAllCapabilities()返回任何节点 其他一切似乎都正常工作-事实上,如果我使用NodeApi并使用MessageApi发送消息,我可以发现手持设备很好-但由于某种原因,每个设备的功能都没有被宣传。我已在res/values文件夹中正确设置了wea

我正在尝试在我的手持应用程序和可穿戴应用程序之间进行通信,并试图使用
功能yapi
找到正确的
节点。我知道这些设备是连接在一起的——其他应用程序和示例工作正常——但当我运行我的可穿戴应用程序时,既不调用
getCapability()
也不调用
getAllCapabilities()
返回任何
节点

其他一切似乎都正常工作-事实上,如果我使用
NodeApi
并使用
MessageApi
发送消息,我可以发现手持设备很好-但由于某种原因,每个设备的功能都没有被宣传。我已在res/values文件夹中正确设置了wear.xml,并确保两个应用程序在build.gradle中设置了相同的applicationId

在我的可穿戴应用程序中调用
CapabilityApi
,如下所示:

Wearable.CapabilityApi.getCapability(mGoogleApiClient, SOME_CAPABILITY, CapabilityApi.FILTER_REACHABLE)
        .setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
            @Override
            public void onResult(CapabilityApi.GetCapabilityResult result) {
                if (!result.getStatus().isSuccess()) {
                    return;
                }

                final CapabilityInfo info = result.getCapability();
                updateCapabilities(info);
            }
        });
我已经在我的代码库中搜索错误,但就是找不到。为什么不宣传这些功能是毫无意义的

简短答复: 对手持和可穿戴应用程序使用相同的调试证书,否则
CapabilityApi
将无法工作


长答覆: 这个错误原来很简单!修复它只需要在build.gradle中编辑signingConfig

我使用一个通用调试证书来签署手持应用程序的调试版本:

signingConfigs {
    debug {
        storeFile file("debug.jks")
        storePassword ...
        keyAlias ...
        keyPassword ...
    }
}

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        ...
    }
}
但我的可穿戴应用程序并没有使用相同的调试证书,它显然使用的是IDE提供的默认调试证书。似乎当手持和可穿戴应用程序不使用相同的证书时(即使只是调试版本),另一个设备无法找到设备的功能。这很有道理,事实上,让这整件事让人困惑的是,其他一切似乎都很好,因此很难找出这样的问题

在我的例子中,我从我的手持应用程序的build.gradle中删除了公共调试配置,并且
功能yapi
立即开始工作。我认为为可穿戴和手持应用程序设置相同的调试签名配置也可以解决这个问题,但我现在没有测试

检查是否:

  • 两个模块的build.gradle中的ApplicationId相同
  • 两个模块的包名称相同

我可以确认,为两个模块设置相同的
密钥库也可以使用相同的逻辑,但不要忘记,如果在移动清单中使用:applicationIdSuffix.debug”你也应该在你的可穿戴清单中复制,但是你会导致相同问题的不同包名。我对这两个模块(应用和可穿戴)都使用默认调试签名,但得到相同的空节点集。