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
)を削除すると、問題が修正され、そこからエラーが発生していることが示されますが、その理由はわかりません。
support-v4
が競合を引き起こしているようです。この質問の場合、Gradle依存関係タスクは正しく機能していませんでしたが、この問題に遭遇した他の人にとっては:
./gradlew :app:dependencies
は、依存関係によって使用されるサブ依存関係を表示します。このコマンドの出力を検索し(モジュール名のapp
を変更)、競合の原因となっている依存関係を探します。
@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"
メインのbuild.gradle
ファイル
allprojects {
...
configurations {
all {
resolutionStrategy {
force "Android.Arch.lifecycle:runtime:1.1.1"
}
}
}
}
これにより、バージョン1.1.1
が適用されます
@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"
また、インポートされたすべてのモジュールにこの除外を追加する必要があります。
@RedBassettが述べたように、./gradlew :app:dependencies
ですべての依存関係を検索しました。 Gradleが不平を言っているAndroid.Arch.core:runtime
の互換性のないバージョンがcom.Android.support:appcompat-v7
のバージョンに起因していることに気づいたので、そのバージョンを最新のものに更新し、すべてが機能するようにしました。