1. ホーム
  2. java

[解決済み] IntelliJ Idea with gradleでcom.google.android.gms:play-servicesの解決に失敗した。

2023-07-22 17:26:39

質問

IntelliJ Idea の libGDX プロジェクトに google play services を追加しようとしています。ここのセットアップガイドに従いました。 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プロジェクトを同期させようとすると、"Failed to resolve"というエラーが表示されるだけです。

セットアップ ガイドには、「Google Play サービスが更新されるたびにこのバージョン番号を更新してください」とも書かれていますが、問題は、そのバージョン番号を見つけることがほぼ不可能であることです。Android SDK マネージャーによると私の Google Play サービス SDK バージョンは "43" で、これまでのところ、このバージョン番号と "11.2.0" または任意の典型的なバージョン文字列を関連づけることができません。セットアップ ガイドにそのことについて何も書かれていないわけではありません。

とにかく、私はこれに関する多くの質問から多くのことを試しましたが、無駄でした。特に、私は Android SDK を適切に更新しており、それが Idea で使用されているものであることを確信しています (すでにトリプル チェック済みです...)。

私はAPIレベル26を使用していますが、いずれにせよ、他の定義もAndroid SDKのためにまったく同じディレクトリを使用しています。さらに、このラップトップには他のアンドロイド SDK はまったくインストールされていないので、Idea がその 1 つだけを使用していることに疑問の余地はありません。

どんなアイデアでも大歓迎です。

ありがとうございます。

どのように解決するのですか?

バージョン 11.2.0 を 11.0.0 に置き換えたところ、問題なく動作したようなので、11.2.0 が最新の Android SDK に含まれていなかったということなのでしょう。

そこで、利用可能なすべての散在したドキュメントと格闘した後、まったくの偶然でこのドキュメントにたどり着きました (Googleによって十分に上位にインデックスされていないのでしょう)。 https://developers.google.com/android/guides/releases

そこから引用します。

<ブロッククオート

Google Play サービス 11.2 リリースのハイライトです。Google Play サービスの依存関係が maven.google.com 経由で利用可能になりました。

さて、必ずしもダウンロードした SDK で利用できなくなるわけではないはずなのに、実際にそうなっているようです。

とにかく、私の build.gradle に google() を追加してもうまくいかなかったので (not found, undefined, or whatever...) 、私は前のものから参照したこのドキュメントで見つけた別の方法を使用しました。

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

というように、allprojects/repositoriesにその行を追加して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'
    }
}

この2行でGradleは問題なく同期することができました。libGDXプロジェクトにデフォルトで追加されているプラグインを除けば、何も追加する必要はありませんでした。

その後、いくつかの異なるエラーが表示されましたが、Gradle や依存性についてのものはありませんでした。簡単に言うと、JFTRです。

まず、minSdkVersionが8だったのですが、14まで上げることで解決しました。14以下のデバイスは全部サポートしなくても生きていけると思います。

2 つ目は、dex の参照の上限に関する問題がありました。com.google.android.gms:play-services' 全体をコンパイルする代わりに、私が今実際に興味を持っている API である 'com.google.android.gms:play-services-ads' のみを使用したのです。このようなソリューションが有用でない他の特定のケースについては、このドキュメントがいくつかのより良い洞察を提供することができます。 https://developer.android.com/studio/build/multidex.html

第三に、その後も私はこの"jumbo"事の問題を説明し、ここに答えました。 https://stackoverflow.com/a/26248495/1160360

これで完了です。今現在、すべてがビルドされ、私のゲームはついにAdmobバナーを表示するようになりました。

このために何時間も費やしました。最近使用しているすべてのビルディング オートメーション システムは、余分な負荷を追加する価値があるのだろうかと考えさせられます。

つまり、5 年ほど前に初めて Admob をアプリに追加しなければならなかったとき、私は .jar ファイルをダウンロードして、プロジェクト上のディレクトリに置くだけでした。ググって「Admobをアンドロイドのプロジェクトに設定する方法」を調べ、アプリにAdmobバナーを表示させるまで、ほんの数分しかかからなかったのです。ここはそのような議論をする場所ではないので、ここに残すことにします。

それでも、私自身の経験がさらに誰かの役に立つことを願っています。