web-dev-qa-db-ja.com

Androidアーキテクチャコンポーネント:依存バージョンのGradle同期エラー

ViewModelとLiveDataをKotlinアプリに追加しようとしています。モジュールのbuild.gradleに次の依存関係が追加されています。

implementation "Android.Arch.lifecycle:extensions:1.1.1"
kapt "Android.Arch.lifecycle:compiler:1.1.1"
testImplementation "Android.Arch.core:core-testing:1.1.1"

次のエラーが表示されます。

Androidの依存関係「Android.Arch.lifecycle:runtime」には、コンパイル(1.0.0)クラスパスとランタイム(1.1.1)クラスパスの異なるバージョンがあります。 DependencyResolutionを使用して同じバージョンを手動で設定する必要があります

最初の行(extensions)を削除すると、問題が修正され、そこからエラーが発生していることが示されますが、その理由はわかりません。

18
RedBassett

support-v4が競合を引き起こしているようです。この質問の場合、Gradle依存関係タスクは正しく機能していませんでしたが、この問題に遭遇した他の人にとっては:

./gradlew :app:dependenciesは、依存関係によって使用されるサブ依存関係を表示します。このコマンドの出力を検索し(モジュール名のappを変更)、競合の原因となっている依存関係を探します。

7
RedBassett

@RedBassettが言及しているように、サポートライブラリは Android開発者向けドキュメント で説明されているように、この軽量インポート(ランタイムライブラリ)に依存しています。

これは、Android.Arch.lifecycle:runtime:1.0.0が内部api(推移的)インポートの結果として依存関係ツリーに広がっているため、私の場合、拡張ライブラリを「api」としてではなく「api」として含めるだけでした。実装」を使用して、バージョンを最上位(1.1.1)にオーバーライドします。

結論として、変更

implementation "Android.Arch.lifecycle:extensions:1.1.1"

api "Android.Arch.lifecycle:extensions:1.1.1"
48
Rubén Viguera

メインのbuild.gradleファイル

allprojects {
    ...

    configurations {
        all {
            resolutionStrategy {
                force "Android.Arch.lifecycle:runtime:1.1.1"
            }
        }
    }

}

これにより、バージョン1.1.1が適用されます

20

@RedBassettは正しい。ただし、Android.Arch.lifecycle関連のサブ依存関係を除外する際には、まだ問題がありました。

私の場合、競合はcom.Android.support:appcompat-v7:27.1.1で発生しました。

これは、それを除外した後、私のgradle依存関係がどのように見えるかです。

implementation ('com.Android.support:appcompat-v7:27.1.1') {
    exclude group: 'Android.Arch.lifecycle'
}


api "Android.Arch.lifecycle:runtime:1.1.1"
kapt "Android.Arch.persistence.room:compiler:1.1.1"

また、インポートされたすべてのモジュールにこの除外を追加する必要があります。

1
Sahil Patel

@RedBassettが述べたように、./gradlew :app:dependenciesですべての依存関係を検索しました。 Gradleが不平を言っているAndroid.Arch.core:runtimeの互換性のないバージョンがcom.Android.support:appcompat-v7のバージョンに起因していることに気づいたので、そのバージョンを最新のものに更新し、すべてが機能するようにしました。

0
Adam Johns