私のAndroidプロジェクトのappモジュールのbuild.gradleに次のコードがあります
implementation('com.google.firebase:firebase-core:16.0.1', {
exclude group: 'com.Android.support'
})
implementation('com.google.firebase:firebase-database:16.0.1', {
exclude group: 'com.Android.support'
})
implementation('com.google.firebase:firebase-auth:16.0.1', {
exclude group: 'com.Android.support'
})
implementation('com.google.firebase:firebase-crash:16.0.1', {
exclude group: 'com.Android.support'
})
すべてのfirebaseライブラリには、使用しているAndroidサポートライブラリの競合するバージョンが含まれているため、ビルド警告を防ぐために除外する必要があります。
All com.Android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 27.1.1, 26.1.0. Examples include com.Android.support:animated-vector-drawable:27.1.1 and com.Android.support:support-media-compat:26.1.0 less... (Ctrl+F1)
There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs. One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion).
これらの実装ステートメントをグループ化できる方法はあるので、excludeステートメントを1つ書くだけで済みますか?
[〜#〜]編集[〜#〜]
クリスの答えに基づく私の特定の解決策
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'com.Android.support') {
details.useVersion '27.1.1'
}
}
}
dependencies {
implementation 'com.Android.support:appcompat-v7:27.1.1'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1'
implementation 'com.google.firebase:firebase-crash:16.0.1'
}
公式 gradle documentation に記載されているように、次のようにしてそれを実現できます。
configurations {
implementation {
exclude group: 'javax.jms', module: 'jms'
exclude group: 'com.Sun.jdmk', module: 'jmxtools'
exclude group: 'com.Sun.jmx', module: 'jmxri'
}
}
別のオプションは、ライブラリのグループの特定のバージョンを強制することです。この場合はサポートします。これは 公式ドキュメント でもカバーされています
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.gradle') {
details.useVersion '1.4'
details.because 'API breakage in higher versions'
//note that details.because requires Gradle version 4.6 or higher
}
}
}
私は通常、これをgradleファイルに入れてこのエラーを処理します:
// use default version for all support repositories
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.Android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion 'PUT_THE_VERSION_YOU_WANT' //latest would be 28.0.0-rc02
}
}
}
}
multiDexEnabled
内にAndroid
trueを追加する必要がある場合があります。これが基本的に行うことは、すべてが特定のバージョンを使用するように強制することです。したがって、競合は発生しません。