未能解决: com.google.android.gms:play-services in IntelliJ Idea with gradle

2022-08-31 12:10:11

我正在尝试将Google Play服务添加到IntelliJ Idea中的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 Services SDK版本是“43”,到目前为止,我无法将此类“11.2.0”或任何典型的版本字符串与“43”版本号相关联。并不是说设置指南对此一无所知。

无论如何,我已经从与此相关的大量问题中尝试了很多东西,但无济于事。具体来说,我必须指出,我确实已经正确更新了我的Android SDK,我确信它是Idea正在使用的那个(我已经对此进行了三重检查...):

Android SDK Manager Project Structure

我使用的是API级别26,但无论如何,其他定义确实为Android SDK使用相同的目录。此外,我根本没有在这台笔记本电脑中安装任何其他Android SDK,因此毫无疑问,Idea只使用那个。

任何想法都是非常受欢迎的。

提前致谢!


答案 1

当我之前在项目级build.gradle中放置之前时,我遇到了这个问题。当我更改了顺序并将之前放在build.gradle中时,问题消失了jcenter()google()google()jcenter()

这是我的最终版本.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
}

答案 2

我刚刚用11.0.0替换了版本11.2.0,然后它似乎工作正常,所以这意味着11.2.0不包括在最新的Android SDK中。

因此,在努力处理所有可用的分散文档之后,我纯粹是偶然地到达了此文档(我猜Google的索引程度不够高):https://developers.google.com/android/guides/releases

我从那里引用:

Google Play 服务 11.2 版本中的亮点。Google Play 服务依赖项现在可通过 maven.google.com

现在,即使这并不一定意味着它们不再可用于下载的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横幅只花了我几分钟。我要把它留在这里,因为这里不是进行这种辩论的地方。

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


推荐