com.android.support.* の dependencies のバージョンが揃わない件

直感的に分かりかねる(分からない)のが「com.android.support.*」の内部的な依存関係.

今や, 下位互換の compat が本流となり, support やら v7 やら v4 やら複雑すぎて.

ふと, RecyclerView のバグらしく.

it is fixed internally, so in the next release it should be fine.

Issue 230295 - android - RecyclerView 25.1.0 StaggeredGridLayoutManager GapWorker prefetch FC with full-span items - Android Open Source Project - Issue Tracker - Google Project Hosting

なので, やむなくバージョンを 25.1.0 から 25.0.1 に下げる.

すると, AndroidStudio が build.gradle の該当行を色変化で「新バージョンがあるよ」と教えてくるが無視.

ところが, 入れ替わってないようで, 同様の Exception.

java.lang.IllegalArgumentException: Pixel distance must be non-negative

プロジェクト自体 clean しても rebuild しても変化なしで

「バージョンがコンフリクト」

と言われまくる.

解決法

ResolutionStrategy で強制.
ResolutionStrategy - Gradle DSL Version 3.3


configurations.all {
  resolutionStrategy {
    force "com.android.support:support-v4:$rootProject.supportLibraryVersion"
    force "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
    force "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
    force "com.android.support:support-compat:$rootProject.supportLibraryVersion"
    force "com.android.support:support-annotations:$rootProject.supportLibraryVersion"
    force "com.android.support:design:$rootProject.supportLibraryVersion"
    force "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
    force "com.android.support:percent:$rootProject.supportLibraryVersion"
  }
}

外部ライブラリからの依存があるようで, androidDependencies に頼りながらシコシコ強制.

25.1.0 が remove されたのはビルド時ログで確認できたが.

グループとかツリーの根本からの指定とかあるのではないかと思いつつ朝.

android-apt が不要となった ButterKnife