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


Android-Studio dependencies のバージョン記述を「+ (プラス) のみ」で常に最新バージョンに対応させる

MavenRepository 経由でライブラリを追加するとして, 最近の Android-Studio では, GUI上の選択操作から build.gradle に書き込んでくれる.

Choose_Library_Dependency_と_Project_Structure

サポートライブラリや GooglePlay ライブラリのバージョン記述の形式が

「19.x.x」( x: 数字 )

でもなく

「19.x.+」

でもなく

「+」

のみだったりする.

これまで書いてた dependencies の記述

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.11.+'
    }
}

とか

dependencies {
    compile 'com.android.support:support-v4:19.1.0'
    compile 'com.android.support:appcompat-v7:19.1.0'
    compile 'com.google.android.gms:play-services:48.0.3'
}

などは, すべて「+ ( プラス ) 」のみの記述にして,

続きを読む >>


Support Library のバージョンを最新版にするいまどきの dependencies 記述 (AndroidStudio + gradle)

いろいろ記述方法が変わっているようにみえる.

最近, 遭遇したのは play-service ライブラリの

dependencies 部分のバージョン記述でこんなことが.

...
dependencies {
    ...
    compile 'com.google.android.gms:play-services:+'
    ...
}
...

Google Analytics SDK v4 for Android を実装する

いまどきの開発で一番の依存頻度が多いライブラリといえば

バージョン付きの「Support Library」なのですが,

公式リファレンスを見ると, こうなっています.

Support_Library_Setup___Android_Developers

Support Library Setup | Android Developers

一方, AndroidStudioの機能を使って, ライブラリの依存を追加すると,

続きを読む >>