Google Play服务库更新和缺失符号@integer/google_play_services_version

185

将我的项目升级到最新版本的Google Play服务(v4.0,于2013年万圣节发布)后,现在需要将一个新标签添加到AndroidManifest.xml文件中。

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

很不幸,当我尝试这样做时,我会遇到编译错误:

android-apt-compiler: /blahblah/AndroidManifest.xml:409: error: Error: No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version').

我可以跳转到文件 google-play-services_lib/res/values/version.xml 并查看该符号的原始整数:

<integer name="google_play_services_version">4030500</integer>

然后将其插入回我的 AndroidManifest.xml 文件中:

<meta-data
    android:name="com.google.android.gms.version"
    android:value="4030500" />

这样做完全没有问题,我可以编译和运行项目和应用程序,但这显然不是一个理想的解决方法,存在明显的升级问题。

有什么建议吗?


我现在正好遇到了同样的问题 - 但是找不到整数。 - Björn Hallström
26个回答

256

对于使用Eclipse的所有人,以下是正确的步骤:

Eclipse -> 导入 -> 现有的Android代码 -> 浏览 -> 导航至google-play-services_lib文件夹(android-sdk/extras/google/google_play_services/libproject)。

然后,在你的项目中:

控制点击 -> 属性 -> Android -> 图书馆,添加 -> 选择刚刚导入的项目 -> 确定


我以前没有见过这种情况,所以我不知道如何确切地修复它。考虑到这一点,除非已经明确修改,否则我认为错误不会存在于文件夹中。有可能只是过时了,需要重新下载(这也不太可能是问题,但你永远不知道)。 - PSchuette
你是在尝试添加库还是导入项目时遇到了这个错误? - PSchuette
谢谢 - 在Eclipse上对我有用。我以为我做得对,但重新做了一遍,这解决了编译器问题。 - Anna Billstrom
4
您需要导入的文件夹在这里:extras\google\google_play_services\libproject。 - Kamil Szot
好的做法是检查正确的路径。由于您的帮助,我发现我一直在从第二个Eclipse安装中导入旧版的google_play_services,而不是从我的android-bundle中导入。 - LadyWoodi
显示剩余4条评论

78
请注意,此修复可能仅适用于IntelliJ用户!!(有关应适用于所有人的更多信息,请参见本帖子底部。)
问题已解决!我使用IntelliJ,结果发现我只是错误地配置了将google-play-services_lib模块作为依赖项包含的方式。
由于我完全通过GUI解决了这个问题,而没有编辑任何文件,因此这里有一些屏幕截图: Step 1 - Initial Project Structure 所以我的项目结构起初看起来像这样... Step 2 - Removed google-play-services library 然后,我通过选择它并点击底部的减号按钮,从我的依赖项列表中删除了google-play-services库。请注意对话框底部的错误,因为我的项目绝对需要这个库。但不要担心,我们很快就会重新添加它!

第三步-将google-play-services作为模块依赖项添加 然后我将google-play-services_lib添加为模块依赖项,而不是库依赖项。然后我点击底部的向上箭头按钮几次,将此依赖项移动到列表的顶部。但请注意底部的错误(我们还没有完成!)

第四步-单击灯泡以将google-play-services库添加为依赖项 接着我点击对话框底部的错误消息区域的灯泡,弹出一个小小的弹窗,给出两个选项(添加到依赖项...删除库)。选择添加到依赖项...选项!

第五步-将库添加到google-play-services_lib模块 一个新的小对话框应该会弹出。它给了我两个选择,一个是我的主项目(名称被模糊处理了),另一个是google-play-services_lib项目。根据您的项目,您可能会看到更多选项(例如actionbarsherlock之类的)。选择google-play-services_lib并单击“确定”!

最后,你完成了!我希望这能帮助其他人!

更多信息

我认为这个问题发生的原因是因为我认为我已经正确地将整个google-play-services_lib项目包含在我的总体项目中...但实际上我没有,而是只正确地包含了它的jar文件(google-play-services_lib/libs/google-play-services.jar)。那个jar文件只包括代码,没有Android资源值,因此@integer/google_play_services_version值从来没有真正地出现在我的项目中。但是代码可以在我的项目中使用,所以这使得一切都看起来很好。

作为一个附带说明,解决这个问题似乎也解决了我曾经遇到的GooglePlayServicesUtil.getErrorDialog(...).show()崩溃问题。但这也可能是由于更新修复了该问题,不是很确定。

2
对我不起作用。我没有在错误消息区底部的“灯泡”来弹出这个小弹窗,给出两个选择。 - Vadorequest
2
在您的情况下,我建议尝试完全从项目中删除Google Play服务,然后重新导入。由于如果首次不正确导入Google Play服务,则会出现此缺少整数问题,因此从头开始可能是个好主意。 - Charles Madere
2
除了这个答案(IntelliJ特定),如果您计划实际使用库的方法/类,则必须转到文件>项目结构>选择google-play-services_lib模块>依赖项并检查google-play-services.jar的“导出”。 - Suau
2
概要:将libproject目录添加为模块,并将其作为依赖项添加到主项目中,以从libproject目录获取整数值。 - John61590
1
我已经轻松地做到了,只需添加一个已列为“play-services”(com.google.android.gms:play-services:7.3.0)的“库依赖项”(Maven)。 - Attacktive
显示剩余5条评论

31

我遇到了同样的问题,显然 Eclipse 在复制项目时从原始的 google-play-services_lib 项目中遗留了 /res/values 目录下的 version.xml 文件。我从原始项目中提取了该文件并粘贴到我的项目副本中,问题就解决了。


这是解决我的方案,如果你问我,这是谷歌的一个令人难以置信的疏忽。 - Henrique de Sousa
谢谢,伙计。这解决了我的问题。 - Fabii
1
这解决了我的问题。为什么Eclipse导入跳过了这个文件?有线索吗? - nizam.sp

24
在Eclipse中,将Google Play库导入项目工作区后,我只需复制version.xml文件即可。
google-play-services_lib/res/values/version.xml

to

MyProjectName/res/values/version.xml

3
这样做是可行的,但问题在于它会让升级到较新版本的Google Play Services库变得更加麻烦。你可能需要在每次升级时替换version.xml文件。 - Charles Madere

20

对于使用Gradle的任何人:不要将项目源代码包含在内,而是使用SDK管理器下载并将以下行添加到依赖项中:

compile 'com.google.android.gms:play-services:4.0.30'

只是它找不到它:错误:配置项目':app'时出现问题。
无法解决配置“:app:_debugCompile”的所有依赖项。 找不到与com.google.android.gms:play-services:6.1.+匹配的任何版本。 在以下位置搜索: https://jcenter.bintray.com/com/google/android/gms/play-services/maven-metadata.xml https://jcenter.bintray.com/com/google/android/gms/play-services/
- matteo
文件:/home/teo/Documents/programmi/android-studio-new/sdk/extras/android/m2repository/com/google/android/gms/play-services/maven-metadata.xml 文件:/home/teo/Documents/programmi/android-studio-new/sdk/extras/android/m2repository/com/google/android/gms/play-services/ 要求: xxxxxxx:app:未指定 - matteo
它查找库的路径似乎与sdk管理器实际下载它的位置不匹配,即使创建了符号链接,问题仍未解决。我猜想我无法弄清楚它需要找到哪个文件或文件夹。有任何想法吗? - matteo
1
要查看您拥有的版本,请运行以下命令:"ls -1 $ANDROID_HOME/extras/google/m2repository/com/google/android/gms/play-services"。要获取更新的版本,请运行SDK管理器并更新所需的组件。不要操纵符号链接。 - Sofi Software LLC

12
  1. 从Android SDK管理器安装"Google Play服务"和"Google仓库"。
  2. build.gradle中添加一行compile 'com.google.android.gms:play-services:4.1.32@aar'
  3. 结果将会使资源@integer/google_play_services_version可用。

1
我添加了这个编译 'com.google.android.gms:play-services:4.4.52'。 - powder366
这对我很有帮助。没有人发布build.gradle中依赖项部分的最终结果是什么样子的...那会很有帮助。 - petemyron

10

初步感觉,您的项目似乎连接到了一个旧版本的Play Services库项目。Google推荐的方法是在SDK中找到库项目并制作本地副本。但这也意味着,每当您通过SDK管理器更新Play Services库项目时,都需要用新的副本替换您的副本。


是的,我通过将从Android SDK Manager下载的文件副本放入我的工作目录中来将库集成到我的项目中。此外,我通过执行完全相同的操作(将文件从Android SDK目录复制并覆盖项目中现有的文件)将库更新为这个新版本。 - Charles Madere

7

在更新到最新版本后,我遇到了这个问题,但只需重新添加库引用即可解决:

如果您的Eclipse工作区中没有该库,则可以使用以下方法添加它: 文件 -> 导入 -> 将现有Android代码导入工作区 ->浏览并导航到google-play-services_lib项目库(android-sdk/extras/google/google_play_services/libproject)。

enter image description here

然后删除我的项目的/bin/gen文件夹(类似于清除选项),重新构建我的项目即可。


但这会使apk重5mb。 - Siddharth

7

6

解决Eclipse中的问题

按照以下步骤操作:

  1. 将google-play-services_lib文件夹导入项目,使用 导入->现有Android代码进入工作区
  2. 从项目属性中选择Android部分,在底部的库部分点击添加并选择google-play-services_lib然后应用。请查看http://i.stack.imgur.com/opSeJ.png查看屏幕截图

我的 google-play-services_lib 位于 F:\Android\sdk\extras\google\google_play_services\libproject\google-play-services_lib - Daniel Bonetti

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