

com.android.supportのバージョン差異をresolutionStrategyで強制的に揃える
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
依存しているライブラリごとにcom.android.support系のバージョンがバラバラで、ビルドが通らなくなった。
何が起きたか
複数のライブラリが依存しているcom.android.support系のartifact(support-v4, appcompat-v7とか)のバージョンがそれぞれ違っていて、Gradleの依存解決でコンフリクトする。マニフェストマージやAAPTのタイミングで重複クラスエラーになったりして、地味に面倒。
やったこと
build.gradleにこう書いた。
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '25.3.0' } } }}resolutionStrategy.eachDependencyで依存解決に割り込んで、groupがcom.android.supportのものは問答無用で25.3.0に強制する。これで各ライブラリが要求してくるバージョンがバラバラでも、最終的に1つのバージョンに収束する。
multidexだけ除外している理由
requested.name.startsWith("multidex")のチェックで、multidex系のartifact(multidex, multidex-instrumentation)だけは強制対象から外している。multidex関連はcom.android.supportグループに属してはいるものの、他のサポートライブラリ本体とはバージョニングのサイクルが別になっていて、無理に25.3.0に揃えようとするとむしろ解決できなくなるケースがあったため。ここは実機で挙動を追ったわけではなく、当時の対処療法として外した、という程度の理解。
メモ
- バージョン番号(
25.3.0)は決め打ちなので、依存しているライブラリ側が新しいAPIを要求してきたら都度上げる必要がある - 根本対応ではなく、あくまで「ビルドを通すための強制」なので、依存関係グラフ自体は整理されていない