无法解决:IntelliJ Idea中带有gradle的com.google.android.gms:play-services


75

我正在尝试在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服务时都更新此版本号”,但是问题在于,几乎找不到该版本号:根据Android SDK我的Google Play服务SDK版本manager是“ 43”,到目前为止,我还无法将“ 11.2.0”或任何典型版本字符串与“ 43”版本号相关联。并非安装指南对此没有说明。

无论如何,我尝试了很多事情,从与此相关的过多问题都无济于事。具体来说,我必须指出,我确实已正确更新了我的Android SDK,并且我确定它是Idea正在使用的版本(我已经对此进行了三遍检查...):

Android SDK管理器 项目结构

我使用的是API级别26,但是无论如何其他定义都使用与Android SDK相同的目录。而且,我在这台笔记本电脑上根本没有安装任何其他的android SDK,所以毫无疑问Idea只能使用一个。

任何想法都非常受欢迎。

提前致谢!


2
我没看到apply plugin: 'com.google.gms.google-services'
蒂姆(Tim)

在“设置Google Play服务”指南中也看不到。那是哪里来的
Fran Marzoa '17

JFTR,用11.0.0而不是11.2.0代替版本号似乎可以解决问题,但是我仍然在这里进行一些测试,因此在我确定之前,我不会将其发布为答案。
Fran Marzoa '17年


1
@Darush libGDX项目上的build.gradle文件采用与标准Android Studio项目上不同的结构。具体来说,我的答案中提到的“ allprojects”和“ project(:android)”部分最后不存在,因此是将这些东西放在前者的正确位置。它还提供了其他答案(例如建立整个答案的变更日志文档)所没有的其他常规信息,因此,当两个解决方案都源自同一个问题时,我认为这并不是真正的重复。
Fran Marzoa '17

Answers:


221

jcenter()之前google()在项目级别build.gradle中遇到问题。当我更改顺序并放在build.gradlegoogle()之前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
}

1
它奏效了...但是为什么这个问题排在首位?
其他高个子男人

1
@PaulMathew:如果我对这个问题/修复有解释,我会把它张贴在帖子上。在解决此问题并测试许多操作时,我偶然发现了修复程序。
穆萨

1
这是什么魔法?奇迹般有效。这两个存储库之间可能有问题。另一个想知道其解释的人。
Pl4yeR

原因之一可能是:它尝试首先在jcenter()上找到以下存储库,找到一个私有的或由于其他原因失败的存储库,并向您返回错误。然后,如果您将“ google()”放在顶部,则它首先会在google存储库上查找,然后(如果未找到任何内容)它将转到jcenter。
A. Kazarovets,

我非常想念Eclipse,因为Android Studio似乎我花费了与编程一样多的时间来“修复” gradle
Martin Belcher-AtWrk

82

我只是用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获得Google Play服务的依存关系

现在,即使这不一定意味着下载的SDK不再提供它们,似乎确实是这种情况。

无论如何,将google()添加到我的build.gradle上是行不通的(未找到,未定义等等),因此我使用了本文档中与上一篇文档不同的方法:

https://developer.android.com/studio/build/dependencies.html#google-maven

我修改了build.gradle文件,将该行添加到所有项目/存储库中,如下所示:

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 : //stackoverflow.com/a/26248495/1160360

就是这样。到目前为止,一切都已构建,我的游戏终于显示了这些Admob标语。

我已经花了几个小时思考,这让我想知道我们最近使用的所有这些楼宇自动化系统是否值得它们添加的额外负载。

我的意思是,大约五年前第一次将Admob添加到应用程序中时,我只需要下载一个.jar文件并将其放在项目的目录中。从谷歌搜索“如何在我的android项目中设置Admob”到让我的应用显示Admob标语的整个过程非常简单,整个过程只花了我几分钟的时间。我要把它留在这里,因为这不是进行此类辩论的地方。

尽管如此,我希望我自己的经验对其他人有用。


6
我感觉这将在接下来的几周内得到广泛访问。

2
很棒的答案。谢谢!
马克·惠特克

1
谢谢@Fran ...您是最后期限的救星
Mushroomzier

4
这是一个很好的答案:修复程序,文档,其他问题修复程序。请允许我在更新到的同一链接页面中添加该链接。对于较低的Gradle版本(即低于Gradle 4.1),必须使用maven行。队友的欢呼声!maven { url "https://maven.google.com/"}google()
Antonino

您是否知道为什么必须将repo依赖项放在顶层build.gradle文件allprojects{ repositories{...}}而不是模块特定的生成文件(例如app/build.gradle)中repositories
stan0'7

17

将此添加到您的项目级build.gradle文件:

repositories {
    maven {
        url "https://maven.google.com"
    }
}

对我有用


请在发布自己的答案之前,先阅读前面的答案。
Fran Marzoa

@Fran Ohooo对不起!
zsubzwary

14

在一段时间未使用Android Studio并且不了解更新之后,我尝试解决了数小时的问题。

重要的google()是,第一个项目应repositories如下所示:

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

不知何故,它google()是第二个项目jcenter(),因此所有内容都混乱了,无法正常工作。也许这可以帮助某人。


11

内置了Google Play服务SDK Google Repository

  1. 启动Intellij IDEA。

  2. 在工具菜单上,单击Android> SDK Manager。

  3. 更新Android SDK Manager:单击“ SDK工具”,展开“支持存储库”,选择“ Google存储库”,然后单击“确定”。

当前的Google Repository版本是57。

更新后,同步您的项目。

编辑

从version开始11.2.0,我们必须使用google maven repo,因此在存储库标签中添加google maven repo链接。从此处查看发行说明。

allprojects {
     ..
     repositories {
     ...
        maven {
            url 'https://maven.google.com'
            // Alternative URL is 'https://dl.google.com/dl/android/maven2/'
        }
     }
}

Google存储库已安装。我也将添加一个屏幕截图。
弗朗·马佐亚

也许您指向错误的SDK。在File> ProjectStructure中检查它,并确保获得正确的SDK。
Abhishek Aryan

引用我自己的问题:“我必须指出,我确实已经正确更新了我的Android SDK,并且我确定它是Idea正在使用的那个(我已经对它进行了三遍检查……)”。我将添加另一个屏幕截图以避免进一步的混乱,因此没有人必须对此
一无所知

这是不正确的。对于11.2.0,您必须使用Google Maven存储库
Gabriele Mariotti


4

我发现以下解决方案来替换以下代码

// 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
}

对我来说很好


3

最迟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


1

我也收到此错误,但原因有所不同。事实证明,当我尝试将版本号指定为变量时,我做了一个错字:

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}"
    // ...
}

那为我解决了问题。


0

我有那个问题。我找到了解决方案。在Android Studio中,打开“文件”菜单,然后转到“项目结构”,在“模块”应用程序中,转到“依赖项”标签,然后您可以通过单击+按钮添加“ com.google.android.gms:play-services:xxx”。


0

这可能是因为您没有输入正确的依赖版本。您可以从中选择正确的依赖项:

file>menu>project structure>app>dependencies>+>Library Dependency>select any thing you need > OK

如果找不到您的需求,则应通过以下方式更新sdk:

工具> android> sdk管理器> sdk更新>选择任何您需要的内容>确定


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.