Help us understand the problem. What is going on with this article?

flutterでプラグインのAndroidのサポートライブラリが競合した場合の対応

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'
        }
    }
}
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away