Android Wear:如何在可穿戴和手持模块之间共享代码?

5
我正在制作具有Wear功能的Android应用程序。
我想在可穿戴设备和手持设备模块之间共享一些代码。具体来说,我想共享使用Google Play服务类的通信代码,例如com.google.android.gms.common.api.GoogleApiClient
显然的方法是创建一个模块(我称其为common),并在手持设备和可穿戴设备模块中添加对它的依赖。
由于此公共模块使用Play服务,因此我需要使其依赖于com.google.android.gms:play-services
我不确定版本号应该填什么 - 官方文档here建议使用5.0.77,但这不起作用,因为最新的SDK中没有这个版本号,而是使用了5.0.895.2.08
如果我使用的是版本号为5.0.89,则Wearable应用程序无法正常工作,并出现以下错误:Google Play服务已过期。需要5089000但找到5077534。手表上的版本比我用于编译的版本要旧。

通用模块不应该依赖于com.google.android.gms:play-services,而应该依赖于com.google.android.gms:play-services-wearable,但在构建时会发生冲突,因为手持设备模块依赖于com.google.android.gms:play-services,而这两个构件使用相同的包名(com.google.android.gms),因此gradle构建失败。

解决方案是什么?

.

编辑 经过一些讨论,为了使我的问题更清晰。

为了能够在我的common模块中使用通信API,我有两个选择:

  1. 使common依赖于com.google.android.gms:play-services
  2. 使common依赖于com.google.android.gms:play-services-wear

⇒ 解决方案1不可行,因为开发可用的版本(5.0.89)比手表上的版本(5.0.77)更新。

⇒ 解决方案2不可行,因为handheld模块已经依赖于com.google.android.gms:play-services,这与com.google.android.gms:play-services-wear冲突。

2个回答

5
我几天前遇到了同样的问题。我的共享模块也依赖于com.google.android.gms:play-services,因此Gradle拒绝构建并一直在嘟囔:

Error: more than one library with package name 'com.google.android.gms

我在mobile项目的gradle文件中添加了这行代码,错误神奇地消失了:

compile(project(':sharedModule')) { transitive = false }


3
请看这里:https://github.com/tajchert/SWear_Weather 我创建了一个通用项目,可在移动设备和智能手表之间共享,并包含我的常量。请记得设置虚拟清单文件,并在build.gradle文件中使用apply plugin: 'com.android.library'
我也遇到了play-services版本问题。我通过使用以下代码解决了这个问题: compile 'com.google.android.gms:play-services-wearable:+' compile 'com.google.android.support:wearable:+' 而不是指定特定版本。实际上,这应该是一个单独的问题,因为它超出了前面(在项目之间共享代码)的范围。
更改后可能需要使缓存失效/重启 - 您可以/应该删除项目中的构建路径以摆脱所有其他版本。

谢谢您的回答,这意味着您的公共模块依赖于 play-services-wearable,由于您的移动模块依赖于公共模块,因此它也会传递地依赖于它。因此,它不能再依赖于 play-services。正确吗? - BoD
不,我的普通项目不依赖于“play-services”,因为没有必要。 只有Wear和移动项目需要使用play服务来共享数据。 您可以在上面列出的每个项目的build.gradle文件中进行检查。 - Michał Tajchert
我尝试过了,但就像我在问题中所说的那样:构建时存在冲突,因为手持模块依赖于com.google.android.gms:play-services,而这两个构件使用相同的包名称(com.google.android.gms),因此gradle构建失败。 - BoD
@BoD 我和你的情况一样,看起来将 'com.google.android.gms:play-services-wearable:+' 作为依赖项会包括 'com.google.android.support:wearable:+' - Eliezer
@Eliezer 我实际上对 com.google.android.support:wearable 没有问题。我现在将在原问题中添加澄清,以使其绝对清晰 :) - BoD
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接