ImagePickerのバージョンを上げたところ以下のエラーを出力してビルドに失敗するようになってしまいました。
* What went wrong:
Execution failed for task ':app:preDebugBuild'.
> Android dependency 'com.android.support:support-v4' has different version for the compile (26.1.0) and runtime (27.1.1) classpath. You should manually set the same version via DependencyResolution
とりあえず依存関係覗いてみようとしたけど以下のコマンド実行しけど見れず、
cd android
cd ./gradlew dependencies
正しいコマンドは次のようなものでした。
cd android
./gradlew app:dependencies
で結果の依存関係のうち問題の有りそうなのはこの部分ぽい
コンパイル時
debugCompileClasspath - Resolved configuration for compilation for variant: debug
+--- com.google.firebase:firebase-core:16.0.4
| +--- com.google.firebase:firebase-analytics:16.0.4
| | +--- com.google.android.gms:play-services-basement:16.0.1
| | | \--- com.android.support:support-v4:26.1.0
略...
+--- project :image_picker
実行時
debugRuntimeClasspath - Resolved configuration for runtime for variant: debug
+--- com.google.firebase:firebase-core:16.0.4
| +--- com.google.firebase:firebase-analytics:16.0.4
| | +--- com.google.android.gms:play-services-basement:16.0.1
| | | \--- com.android.support:support-v4:26.1.0 -> 27.1.1
略...
+--- project :image_picker
| \--- com.android.support:support-v4:27.1.1 (*)
コンパイル時は26.1.0が使われるけど、実行時は27.1.1が使われるよって言われたけど、確かにそんな感じぽい。
でどうしよう?
firebase-coreのコンパイルを27.1.1にするか、image_pickerの実行時を26.1.1にするかの2択っぽい。
firebase-coreに依存しているライブラリが他にもあったので、今回はimage_pickerの依存するサポートライブラリを26.1.0にすることにした。
しかし、自分のbuild.gradleでなくプラグイン内のbuild.gradleを編集しなければならず、その場はいいがライブラリの更新やCIに乗せるときにどうするか考える必要があるなぁ。
とりあえず今回はimage pickerのプラグインのbuild.gradleを次のように修正して一旦解決。
dependencies {
implementation('com.android.support:support-v4:26.1.0')
}
より良い解決方法を質問中。
https://stackoverflow.com/questions/52808690/how-can-i-resolve-conflicting-support-library-version
2018/10/16 追記
android/build.gradleに以下を追記すれば良いという回避方法をStackoverflowの回答でもらった。
試してみるとこれでうまく行った。 なるほど、subprojectsなる指定方法があるんですね。
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "26.1.0"
}
}
}
}
2019/06/11 追記
force
を使ってより完結に記述できることがわかった
subprojects {
project.configurations.all {
configurations.all {
resolutionStrategy.force 'com.google.errorprone:error_prone_annotations:2.3.1'
}
}
}