1. ホーム
  2. アンドロイド

com.android.supportのバージョンの競合に対する解決策

2022-02-23 14:02:55
<パス

com.android.supportライブラリは、すべて全く同じバージョン指定でなければなりません(バージョンが混在するとランタイムクラッシュが発生する可能性があります

アンドロイドスタジオでサードパーティの依存関係を追加すると、上記のようなエラーが表示されることがあるようです。

一般的にはcom.android.supportパッケージのバージョン番号は統一されているはずですが、もしかしたら自分たちの新しいプロジェクトのcom.android.supportパッケージのバージョン番号が高く、com.android.supportの一部の第三者ライブラリはサポートライブラリの更新が間に合わず、このエラーが発生する可能性があります 一部の第三者ライブラリのサポートライブラリの更新が間にあわず、このエラーは発生する可能性があります。

回避策 (他の依存関係の競合も同様です。)

  1. 依存するライブラリのバージョン番号に合わせて、自分たちのプロジェクトの com.android.support のバージョン番号を変更する。ただし、依存するライブラリが com.android.support の複数のバージョンを持っている場合は、変更しない。 (推奨しません)
  2. サードパーティのライブラリに依存する場合、com.android.supportパッケージへの依存を除外することで、プロジェクトは好きなバージョンに依存できるようになりますが、この方法では、どのライブラリが競合しているかを最初に見つける必要があります。
  3. groovyスクリプトを使用して、競合する依存関係のバージョン番号を強制的に変更します。 (推奨)
  4. AndroidXへのプロジェクト移行(推奨)

排他的依存関係解消法

まず、2番目の方法について見てみましょう。

まず、どの在庫が競合しているかを知る必要があります。
ターミナルをクリックし、次のように入力します。 gradlew -q app:dependencies 入力すると、アプリに依存するライブラリが表示されます

ここでは、arouter の依存関係の 1 つにバージョン番号の不一致があることがわかるので、競合する依存関係を除外する必要があります。

exclude group: com.android.supportを含むものを除外するという意味です。
apiはandroid studio 3.0の新しい依存関係です、もしあなたがそれについてよく知らないなら、この記事を読んでください。 Android Studio 3.0の新しい依存関係

    api("com.afollestad.material-dialogs:core:0.9.5.0") {
        exclude group: 'com.android.support'
    }


module: exclude グループから指定されたモジュールを削除します。

    api("com.afollestad.material-dialogs:core:0.9.5.0") {
        exclude group: 'com.android.support', module: 'support-v13'
        exclude group: 'com.android.support', module: 'support-vector-drawable'
    }


もう一つの提案は、他の人が使うために自分自身のライブラリを作成するとき、com.android.supportに依存する必要がある場合です。 提供されている依存関係を使用することをお勧めします (android studio 3.0 で compileOnly に変更されました) これはコンパイル時にのみ機能し、パッケージングには参加しません。ユーザーの不便を避けるためです。

	provided 'com.android.support:appcompat-v7:26.1.0'
    provided 'com.android.support:design:26.1.0'
    provided 'com.android.support:support-vector-drawable:26.1.0'


Grovvyスクリプトによるバージョン番号変更でコンフリクト解消

が存在する場合、そのMODの build.gradle このファイルは、すべての依存関係を繰り返し、指定されたライブラリのバージョン番号を変更することによって動作します。

ここで
requested.group == 'com.android.support' com.android.supportは、変更する依存ライブラリを示す

details.useVersion '28.0.0' 28.0.0は修正するバージョン番号です。

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '28.0.0'
            }
        }
    }
}


そして、リビルドするだけです。


AndroidXへのプロジェクト移行(推奨)

4つ目の方法は、プロジェクトをAndroidXに移行することで、バージョン番号を気にする必要がなくなるというものです。そして、今後のトレンドは間違いなくAndroidXに向かっています。
移行方法は、公式ドキュメントを見るだけで、簡単にできます。 AndroidXへの移行について


この記事があなたのために役立つと思う場合は、この記事の認識として、指を移動してください、テキストに誤りがある場合は、修正してください、から転送を示すために再現されます。 Yu Zhiqiangのブログ ありがとうございました。