无法解决:带有 gradle 的 IntelliJ Idea 中的 com.google.android.gms:play-services
Posted
技术标签:
【中文标题】无法解决:带有 gradle 的 IntelliJ Idea 中的 com.google.android.gms:play-services【英文标题】:Failed to resolve: com.google.android.gms:play-services in IntelliJ Idea with gradle 【发布时间】:2018-01-23 08:25:54 【问题描述】:我正在尝试在 IntelliJ Idea 中将 Google Play 服务添加到我的 libGDX 项目中。我已按照此处的设置指南进行操作:https://developers.google.com/android/guides/setup
这看起来很简单。我刚刚将这些行添加到相应部分的 build.gradle 中,所以现在看起来像:
project(":android")
apply plugin: "android"
apply plugin: 'com.android.application'
configurations natives
dependencies
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86"
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64"
compile 'com.google.android.gms:play-services:11.2.0'
然后我尝试在 Idea 中同步我的 gradle 项目,只是为了得到“无法解决”错误。
好吧,设置指南还说“确保每次更新 Google Play 服务时都更新此版本号”,但问题是似乎几乎不可能找到该版本号:我的 Google Play 服务 SDK 版本根据Android SDK 管理器是“43”,到目前为止,我无法将此类“11.2.0”或任何典型版本字符串与“43”版本号相关联。并不是说设置指南对此只字未提。
无论如何,我已经尝试了很多与此相关的问题,但无济于事。具体来说,我必须指出,我的 Android SDK 确实已正确更新,并且我确定它是 Idea 正在使用的 SDK(我已经对此进行了三次检查...):
我使用的是 API 级别 26,但无论如何其他定义确实使用与 Android SDK 完全相同的目录。此外,我在这台笔记本电脑上根本没有安装任何其他 android SDK,所以毫无疑问,Idea 只使用那个和那个。
欢迎提出任何想法。
提前致谢!
【问题讨论】:
我没有看到apply plugin: 'com.google.gms.google-services'
我在设置 Google Play 服务指南中也没有看到它。这是哪里来的?
JFTR,用 11.0.0 而不是 11.2.0 替换版本号似乎可以解决问题,但我仍然在这里做一些测试,所以我不会将它作为答案发布,直到我对此我很确定。
Error:(23, 13) Failed to resolve: com.google.android.gms:play-services:11.2.0 "Install Repository and sync project" dose not work的可能重复
@Darush libGDX 项目中的 build.gradle 文件遵循与标准 Android Studio 项目中不同的结构。具体来说,我的回答中提到的“allprojects”和“project(:android)”部分最后不存在,这是将这些东西放在前者的正确位置。它还提供了其他答案中不存在的其他一般信息(例如整个答案所依据的变更日志文档),因此当两种解决方案都来自同一个问题时,我认为这不是一个真正的骗局。
【参考方案1】:
我在项目级别 build.gradle 中将 jcenter()
放在 google()
之前时遇到了问题。当我更改顺序并在 build.gradle 中将 google()
放在 jcenter()
之前,问题就消失了
这是我最终的 build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript
repositories
google()
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:3.1.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
allprojects
repositories
google()
jcenter()
task clean(type: Delete)
delete rootProject.buildDir
【讨论】:
它起作用了......但是为什么首先会出现这个问题? @PaulMathew :如果我有这个问题/修复的解释,我会把它放在帖子上。在解决此问题并测试大量操作时,我偶然“发现”了修复程序。 这是什么魔法?奇迹般有效。这两个回购之间可能有问题......另一个想知道解释的人。 其中一个原因可能是:它首先尝试在 jcenter() 上找到以下 repo,然后找到一个私有的或因任何其他原因而失败的 repo,然后向您返回错误。然后,如果您将“google()”放在顶部,它首先会在 google repo 上查找,然后(如果没有找到)它会转到 jcenter。 我非常想念 Eclipse,自从 Android Studio 以来,我似乎在“修复”gradle 上花费的时间与我在编程上花费的时间一样多【参考方案2】:我刚刚用 11.0.0 替换了 11.2.0 版本,然后它似乎工作正常,这意味着 11.2.0 不包含在最新的 Android SDK 中。
所以,在与所有可用的零散文档苦苦挣扎之后,我纯粹是偶然发现了这个文档(我猜它没有被 Google 索引到足够高的位置): https://developers.google.com/android/guides/releases
我从那里引用:
Google Play 服务 11.2 版的亮点。谷歌播放 服务依赖项现在可通过 maven.google.com 获得
现在,即使这并不一定意味着下载的 SDK 不再提供它们,但似乎情况确实如此。
无论如何,将 google() 添加到我的 build.gradle 中不起作用(未找到、未定义或其他...),因此我使用了在本文档中找到的另一种方法,该方法参考了上一篇:
https://developer.android.com/studio/build/dependencies.html#google-maven
我修改了我的 build.gradle 文件,将该行添加到 allprojects/repositories,如下所示:
allprojects
...
repositories
...
maven url "https://maven.google.com/"
然后也在同一个 build.gradle 文件中的 android 部分:
project(":android")
...
dependencies
...
compile 'com.google.android.gms:play-services-ads:11.2.0'
这两行足以让 Gradle 同步没有问题。除了已经默认添加到我的 libGDX 项目中的插件之外,我不需要添加任何插件。
在那之后,我得到了一些不同的错误,但没有关于 Gradle 或依赖项的错误。简而言之,JFTR:
首先,我的 minSdkVersion 为 8。通过将其提高到 14 来解决。我想我可以不支持所有低于 14 的设备。
其次,我遇到了 dex 引用上限的问题。我以前从未遇到过这个问题,但也许你已经注意到我使用的解决方案:我没有编译整个 'com.google.android.gms:play-services' 我只使用了 'com.google.android.gms :play-services-ads' 这是我现在真正感兴趣的 API。对于此类解决方案可能无用的其他特殊情况,本文档可以提供一些更好的见解:https://developer.android.com/studio/build/multidex.html
第三,即使在那之后,我在这里描述并回答了这个“巨型”问题:https://***.com/a/26248495/1160360
就是这样。到目前为止,一切都建立起来了,我的游戏终于显示了那些 Admob 横幅。
我已经花了好几个小时来解决这个问题,我想,这让我想知道我们最近使用的所有这些楼宇自动化系统是否值得它们增加的额外负载。
我的意思是,大约五年前我第一次将 Admob 添加到应用程序时,我只需要下载一个 .jar 文件并将其放在我项目的目录中。这很明显,从谷歌搜索“如何在我的 android 项目中设置 Admob”到让我的应用显示 Admob 横幅的整个过程只花了我几分钟。我将把它留在这里,因为这里不是这种辩论的地方。
不过,我希望我自己的经验对其他人有用。
【讨论】:
我有一种感觉,在接下来的几周内,这将是一个受欢迎的答案。 很棒的答案。谢谢! 谢谢@Fran...你是最后期限的救星 这是一个很好的答案:修复、文档、其他问题修复。让我从same linked page 中添加,他们将maven url "https://maven.google.com/"
更新为google()
。 maven 行对于较低的 Gradle 版本是强制性的 [即低于 Gradle 4.1]。干杯伙伴!
您知道为什么必须将 repo 依赖项放在*** build.gradle
文件的 allprojects repositories...
中,而不是放在特定于模块的构建文件中,例如app/build.gradle
的 repositories
?【参考方案3】:
将此添加到您的项目级build.gradle
文件中:
repositories
maven
url "https://maven.google.com"
它对我有用
【讨论】:
请在发布您自己的答案之前阅读之前的答案。 @Fran Ohooo 对不起!【参考方案4】:在我有一段时间没有使用 Android Studio 并且不知道更新后,我尝试解决这个问题几个小时。
重要的是google()
是位于repositories
中的第一个项目,如下所示:
allprojects
repositories
google()
jcenter()
mavenCentral()
不知何故,google()
是 jcenter()
之后的第二个项目,所以一切都搞砸了,没有工作。也许这对某人有帮助。
【讨论】:
【参考方案5】:Google Play 服务 SDK 在 Google Repository
内。
启动 Intellij IDEA。
在“工具”菜单上,单击 Android > SDK 管理器。
更新 Android SDK 管理器:点击 SDK 工具,展开 Support Repository,选择 Google Repository,然后点击 OK。
当前的 Google 存储库版本是 57。
更新后同步您的项目。
编辑
从版本11.2.0
开始,我们必须使用google maven repo,所以在repositories 标签中添加google maven repo 链接。查看来自here 的发行说明。
allprojects
..
repositories
...
maven
url 'https://maven.google.com'
// Alternative URL is 'https://dl.google.com/dl/android/maven2/'
【讨论】:
Google 存储库已安装。我也将添加一个屏幕截图。 也许你指向了错误的 SDK。在 File>ProjectStructure 中检查它,并确保您获得了正确的 SDK。 从问题中引用自己的话:“我必须指出,我的 Android SDK 确实已正确更新,我确信它是 Idea 正在使用的那个(我已经三倍-检查了这个...)”。我将添加另一个屏幕截图以避免进一步混淆,所以没有人必须相信我的话...... 不正确。使用 11.2.0,您必须使用 google maven repo【参考方案6】:更新的答案:
allprojects
repositories
google() // add this
别忘了将 gradle 更新到 4.1+(在 gradle-wrapper.properties 中):
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
来源:https://developer.android.com/studio/build/dependencies.html#google-maven
【讨论】:
【参考方案7】:最迟Google Play Services 15.0.0
,像这样包含整个播放服务时会出现这个错误
implementation 'com.google.android.gms:play‐services:15.0.0'
相反,您必须指定详细服务,例如Google Drive
com.google.android.gms:play-services-drive:15.0.0
【讨论】:
目前最新版本为17.1.0【参考方案8】:我找到了以下解决方案来替换以下代码
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript
repositories
google()
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
allprojects
repositories
google()
jcenter()
task clean(type: Delete)
delete rootProject.buildDir
对我来说很好用
【讨论】:
【参考方案9】:就我而言,我使用的是 17.0.1 版本。它显示错误。
implementation "com.google.android.gms:play-services-location:17.0.1"
将版本更改为17.0.0后,它工作了
implementation "com.google.android.gms:play-services-location:17.0.0"
原因可能是我使用版本 17.0.0 的地图依赖项和位置版本作为 17.0.1。它可能会引发错误。所以,请尽量保持版本号的一致性。
【讨论】:
【参考方案10】:检查你的 gradle 设置,它可能设置为离线工作
【讨论】:
【参考方案11】:我也遇到了这个错误,但原因不同。原来我在尝试将版本号指定为变量时打错了:
dependencies
// ...
implementation "com.google.android.gms:play-services-location:$playServices"
// ...
我在项目根目录的 gradle.properties 中定义了变量 playServices:
playServices=15.0.1
错字是$playServices
,应该这样写$playServices
:
dependencies
// ...
implementation "com.google.android.gms:play-services-location:$playServices"
// ...
这解决了我的问题。
【讨论】:
【参考方案12】:我遇到了这个问题。 我找到了这个解决方案。 在 Android Studio 中,打开文件菜单,然后转到项目结构,在模块应用程序中,转到依赖项选项卡,您可以通过单击 + 按钮添加“com.google.android.gms:play-services:x.x.x”。
【讨论】:
【参考方案13】:这可能是因为你没有输入正确的依赖版本。 你可以从中选择正确的依赖:
file>menu>project structure>app>dependencies>+>Library Dependency>select any thing you need > OK
如果找不到您的需求,您应该从以下方式更新您的 sdk:
tools>android>sdk manager>sdk update>选择你需要的任何东西>ok
【讨论】:
【参考方案14】:我遇到了同样的问题,通过禁用 Gradle 的离线模式解决了,虽然我不记得我什么时候禁用了它!
解决办法如下:
How to disable Gradle 'offline mode' in android studio? [duplicate]
【讨论】:
【参考方案15】:第 1 步: 打开安卓文件夹
第 2 步: 打开 gradlew.bat 文件
第 3 步: 搜索这个(可能的第 74 行) @rem 执行 Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
第 4 步: add --offline 添加结尾喜欢
@rem 执行 Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% --offline
【讨论】:
以上是关于无法解决:带有 gradle 的 IntelliJ Idea 中的 com.google.android.gms:play-services的主要内容,如果未能解决你的问题,请参考以下文章
带有 QueryDSL 和 Gradle 的 IntelliJ 15
Gradle 解决依赖关系并构建/运行良好,但 IntelliJ 没有