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

Posted

技术标签:

【中文标题】Google Play 服务库更新和缺少符号 @integer/google_play_services_version【英文标题】:Google Play Services Library update and missing symbol @integer/google_play_services_version 【发布时间】:2013-11-19 13:28:26 【问题描述】:

将我的项目升级到最新版本的 Google Play 服务 (v4.0, released on Halloween 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" />

这样做绝对没问题,然后我可以编译并运行项目和应用程序就好了。但这绝对是一个不受欢迎的解决方案,存在明显的可升级性问题。

有什么想法吗?

【问题讨论】:

现在有完全相同的问题 - 但找不到整数。 【参考方案1】:

即兴发挥,感觉您的项目已连接到旧版本的 Play Services 库项目。 Google 推荐的方法是让您在 SDK 中找到库项目并制作本地副本。不过,这确实意味着,每当您通过 SDK 管理器更新 Play Services 库项目时,您还需要将您的副本替换为新副本。

【讨论】:

是的,我确实通过将使用 Android SDK 管理器下载的文件的副本放入我的工作目录中,将库集成到了我的项目中。我也确实通过做同样的事情将库更新到这个新版本(从 Android SDK 目录复制文件并覆盖我项目中的现有文件)。【参考方案2】:

请注意,此修复可能仅适用于 IntelliJ 用户! (这篇文章底部的更多信息应该适用于所有人。)

解决了这个问题!我使用IntelliJ,结果我只是错误地配置了将google-play-services_lib 模块作为依赖项的方式。

由于我完全通过 GUI 解决了这个问题,而不是通过编辑任何文件,这里有几个屏幕截图:

所以我的项目结构开始看起来像这样......

然后我通过选择它然后单击底部的减号按钮从我的依赖项列表中删除了google-play-services 库。注意对话框底部的错误,因为我的项目确实需要这个库。不过不用担心,我们会尽快重新添加!

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

然后我单击错误消息区域对话框底部的灯泡,弹出这个小弹出窗口,提供两个选择(添加到依赖项...删除库)。点击添加到依赖项...选项!

应该会弹出一个新的小对话框窗口。它给了我两个选择,一个用于我的主要项目(它的名称已模糊),另一个用于google-play-services_lib 项目。根据您的项目,您的可能会有更多(例如您可能会看到actionbarsherlock,类似的东西)。选择google-play-services_lib,点击ok!

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

更多信息

我相信这个问题开始发生的原因是因为我认为我已经将整个google-play-services_lib项目正确地包含在我的整个项目中......但实际上我没有,而是仅正确包含其 jar 文件 (google-play-services_lib/libs/google-play-services.jar)。该 jar 文件仅包含代码,不包含 Android 资源值,因此 @integer/google_play_services_version 值在我的项目中从来没有真正。但是代码能够在我的项目中使用,所以看起来一切都很好。

顺便说一句,修复这个问题似乎也修复了我曾经遇到的GooglePlayServicesUtil.getErrorDialog(...).show() 崩溃问题。但这也可以通过更新修复,并不是 100% 确定。

【讨论】:

不适合我。我没有“错误消息区域对话框底部的灯泡来弹出这个提供两种选择的小弹出窗口” 在您的情况下,我可能会尝试从您的项目中完全删除 Google Play 服务,然后重新导入。由于只有在首先不正确地导入 Google Play 服务时才会出现此整数缺失问题,因此从头开始可能是个好主意。 @Vadorequest 您还可以选择 google-play-services-lib 模块并将 google-play-services.jar 文件添加为模块依赖项(!到 google-play-services-lib 模块!) 除了这个答案(IntelliJ 特定)之外,如果您打算实际使用库方法/类,则必须转到文件 > 项目结构 > 选择 google-play-services_lib 模块> 依赖项并检查 google-play-services.jar 的“已导出” 总结:将libproject目录添加为模块,并使其成为主项目的依赖项,以便从libproject目录中获取整数值【参考方案3】:

对于所有使用 Eclipse 的人来说,这就是你应该这样做的方式。

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

然后,在你的项目上

控制点击->属性->android->库,添加->选择刚才导入的项目->ok

【讨论】:

我已经尝试过了(按照that other question 的说明找到文件夹),但Eclipse 说它无法将.project 文件写入指定的google-play-services_lib 目录中。显然,直接的原因是 Eclipse 无法写入 SDK 所在的 Program Files 目录,但更具体的问题是为什么要修改 .project 文件(显然属于 SDK,因此应该是“正确的” ) 首先是必要的。 我以前没有见过这个,所以我不知道如何修复它。请记住,除非已经明确修改,否则我认为该文件夹中不存在错误。它可能只是过时了,需要重新下载(不太可能也是问题,但你永远不知道)。 您在尝试添加库或尝试导入项目时是否遇到此错误? 谢谢-在 Eclipse 上为我工作。我以为我做对了,但重新做了并修复了编译器问题。 你需要导入的文件夹在这里:extras\google\google_play_services\libproject【参考方案4】:

我遇到了同样的问题,显然 Eclipse 在制作副本时不知何故将 version.xml 文件留在了原始 google-play-services_lib 项目的 /res/values 中。我从原始项目中提取文件并将其粘贴到我的项目副本中,问题已解决。

【讨论】:

这也是解决我问题的解决方案,如果你问我,这是 Google 的一个令人难以置信的疏忽。 谢谢伙计,这解决了我的问题 这解决了我的问题。为什么 eclipse 导入跳过了这个文件?有什么线索吗?【参考方案5】:

对于 Eclipse,我只是在 google-play-services_lib 中添加了项目引用:

属性-Android 在库窗格(底部窗格)中,确保列出了 google-play-services_lib。如果没有,请单击 Add.. 按钮并选择 google-play-services_lib。

【讨论】:

【参考方案6】:

在 Eclipse 上,将 google play 库导入项目工作区后,我只是从

复制了 version.xml 文件
google-play-services_lib/res/values/version.xml

MyProjectName/res/values/version.xml

【讨论】:

这样做会奏效,但问题是升级到新版本的 Google Play 服务库有点烦人。您可能必须在每次升级时替换 version.xml 文件。【参考方案7】:

我在尝试使用 google_play_services_froyo 时也遇到了这个问题。

我提交了这个错误:https://code.google.com/p/google-plus-platform/issues/detail?id=734

【讨论】:

【参考方案8】:

我有同样的问题。问题是 "google-play-services.jar" 没有正确导入到我的项目中,即使它是 google_play_service_lib 项目的一部分。如果您使用的是 Eclipse,请检查您是否可以在 Android Private Libraries 部分看到播放服务 jar 文件,以及该文件是否由库导出。

我正在使用 Android SDK 平台工具版本 17(不是 19)和 Android SDK 工具版本 22.0.1

【讨论】:

【参考方案9】:

以下是在使用 Google play service Lib 时避免很多错误的主要操作:

    确保将 lib 项目复制到 Eclipse 项目工作区。 Google Play 服务库项目的目标 SDK 应为“Google” API" 3- 元数据应添加到清单文件中。 你的项目目标 SDK 应该是 17,除非你已经完全 更新到 19,因为在某些情况下 19 不能正常工作。

【讨论】:

【参考方案10】:

我刚刚在 Android SDK Manager 的 Extras 文件夹下更新了 Google Play 服务

【讨论】:

【参考方案11】:

Google 建议您不要直接从 SDK 目录创建项目。最好将 lib 项目复制到您的应用所在的位置,然后从那里导入。否则下次你为另一个应用导入项目时,它已经在使用中了。

https://developer.android.com/google/play-services/setup.html

注意:您应该引用已复制到开发工作区的库的副本 - 您不应直接从 Android SDK 目录引用该库。

【讨论】:

【参考方案12】:
    从 Android SDK 管理器安装“Google Play Services”和“Google Repository”。 将compile 'com.google.android.gms:play-services:4.1.32@aar' 行添加到您的build.gradle。 因此资源@integer/google_play_services_version 将可用。

【讨论】:

我添加了这个 compile 'com.google.android.gms:play-services:4.4.52' 这是为我做的。没有人公布 build.gradle 中依赖项部分的最终结果是什么样的......这会有所帮助【参考方案13】:

我有同样的问题,version.xml 文件不在 google-play-services_lib 中。 只需启动您的 sdk 管理器并接受更新,尤其是与“附加”相关的内容。

【讨论】:

【参考方案14】:

在导入 google-play-services_lib 时,检查 AndroidManifest.xml 和 version.xml 中定义的版本代码。 我发现了版本代码的差异并将其更改为4242000。进行更改后,@integer/google_play_services_version 中不再出现编译错误。

【讨论】:

这不是一个好方法。每次更新 Google Play 服务时,您都需要手动更新。【参考方案15】:

致任何使用 gradle 的人:不要包含项目源代码,而是使用 SDK Manager 下载它并将这一行添加到依赖项中:

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

【讨论】:

只是没有找到它:错误:配置项目':app'时出现问题。 > 无法解析配置“:app:_debugCompile”的所有依赖项。 > 找不到任何与 com.google.android.gms:play-services:6.1.+ 匹配的版本。在以下位置搜索:jcenter.bintray.com/com/google/android/gms/play-services/…jcenter.bintray.com/com/google/android/gms/play-services 文件:/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:unspecified 它查找库的路径似乎与 sdk 管理器实际下载它的位置不匹配,但即使创建了符号链接,问题也没有得到解决。我想我无法弄清楚它到底需要找到什么文件或文件夹。有什么想法吗? 查看您拥有的版本:“ls -1 $ANDROID_HOME/extras/google/m2repository/com/google/android/gms/play-services”。要获取更新的版本,请运行 SDK 管理器并更新所需的组件。不要乱用符号链接。【参考方案16】:

对我来说问题是库项目和使用播放服务的项目位于不同的目录中。所以只是:

1.将文件添加到同一工作区,然后删除库。 2.重启eclipse 3.再次添加库项目 4.清除

【讨论】:

【参考方案17】:

为 Eclipse 解决

执行后续步骤:

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

【讨论】:

我的google-play-services_libF:\Android\sdk\extras\google\google_play_services\libproject\google-play-services_lib【参考方案18】:

Google 的 Android 开发者网站上有关于如何“将 Google Play 服务添加到您的项目”的说明,它们也与如何升级 Play 服务版本有关。甚至还有一个下拉菜单可以查看 Eclipse、Android Studio 或“其他”的说明。如果指令发生变化,那将是查看指令的最佳位置。页面在这里:

http://developer.android.com/google/play-services/setup.html

但由于这里的大部分答案都是针对 Eclipse 的,所以这里是使用 Android Studio 升级 Play Services 的简要总结

    打开应用程序模块目录中的 build.gradle 文件。 注意:Android Studio 项目包含一个*** build.gradle 文件和每个模块的 build.gradle 文件。请务必为您的应用程序模块编辑文件。 更新“依赖项”下的构建规则以引用您在开发计算机上下载的播放服务版本。

您可以在您的 \sdk\extras\google\m2repository\com\google\android\gms\play-services 文件夹中找到您在开发机器上下载的播放服务版本的版本号,如此处所述:How do I match a Google Play Services revision with an install version?

【讨论】:

终于为 Android 初学者提供了一个好的、清晰的答案。这个答案应该放在更高的位置。【参考方案19】:

我在使用 Maven 和 IntelliJ 的项目中遇到了同样的问题。 Google Play 服务被添加为 Maven 依赖项。 maven 构建在命令行中运行良好,但 IntelliJ 抱怨缺少符号 @integer/google_play_services_version

就我而言,我强制更新 maven POM 文件,它解决了问题。

【讨论】:

【参考方案20】:

在更新到最后一个版本后,我的所有项目都遇到了这个问题,但只需再次添加库引用即可解决:

如果您在 Eclipse 中的工作区中没有该库,您可以添加它: File -> Import -> Existing Android Code Into Workspace -> 浏览并导航到 google-play-services_lib 项目库,(android-sdk/extras/google/google_play_services/libproject)。

然后删除我的项目的 /bin/gen 文件夹(类似于 clean 选项)并再次构建我的项目。

【讨论】:

但这会使 apk 重 5mb【参考方案21】:

就我而言,我需要将 google-play-services_lib 文件夹复制到我的应用程序源代码的同一驱动器中

F:\Products\Android\APP*.java F:\Products\Android\libs\google-play-services_lib

【讨论】:

【参考方案22】:

当不使用 IDE,而是使用命令行构建(使用 ant 和 ndk-build)时,解决方法如下:

使用“android”命令安装所有需要的部件。 然后在您的项目根目录中拥有一份 google-play-service_lib/ 的副本。 编辑 project.properties 以包含这一行:

android.library.reference.1=./google-play-services_lib

【讨论】:

但您首先需要在google-play-services_lib 上使用android update project -p . -t android-22。等效地,将&lt;property name="android.library.reference.1" value="./google-play-services_lib"/&gt; 添加到您的build.xml(我将build.xml 最小化并放弃了.properties)。【参考方案23】:

已通过将 Google Play 服务添加到我的 Module:app gradle 构建文件中进行修复。文档还说要在更新 GMS 时更新版本。

dependencies 

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

 

【讨论】:

【参考方案24】:

各位看2017年的,10.0.1版本的播放服务需要导入play-services-basement(以前是play-services-base)。

【讨论】:

您能再解释一下吗?如何查看当前依赖项以及如何添加更多依赖项? 我在写这个答案时是手动完成的,并且通过反复试验。使用 gradle 让事情变得更容易。【参考方案25】:

Windows 10 下的 Android Studio 3.3.2

文件 -> 使缓存无效/重新启动 然后在出现的对话框中选择invalidate and Restart按钮。

【讨论】:

【参考方案26】:

我有同样的问题,在你的 build.gradle 中添加这 2 行,问题可能会得到解决。 ;)

dependencies   
  implementation 'com.google.android.gms:play-services:12.0.1'  
  implementation 'com.google.android.gms:play-services-vision:10.0.0'    

【讨论】:

以上是关于Google Play 服务库更新和缺少符号 @integer/google_play_services_version的主要内容,如果未能解决你的问题,请参考以下文章

无法将旧 Google Play 服务库更新为较新版本

Google Play 服务库是不是已更新?

更新到修订版 30 后缺少“<sdk>/extras/google/google_play_services/libproject”文件夹

Google Play 定位服务 9.2.0 缺少 Google 归因 Android 资源

Proguard 因 Google Play 服务库而失败

libGDX - Android Studio 中的 Google Play 游戏服务