Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@sekitaka_1214

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

More than 1 year has passed since last update.

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'
        }
    }
}
2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
runners
スポーツで世界を良くしたいエンジニアチーム。応援navi、.finisher、run&といった製品開発をしています!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?