Android依存ライブラリバージョン固定システムの構想
Androidのビルドシステムには、BundlerとかCartonみたいに推移的な依存関係*1のバージョンを固定するものがありません*2。これをなんとかしたいと思っています。
で、メモ。Gradleには「ビルドスクリプトの依存関係(Gradle plugins)」と「モジュールの依存関係」があって、どちらのバージョンも固定する必要があります。
バージョンの固定は、まず依存関係を解決した依存グラフをつくり、そのライブラリを持ったローカルなmaven repoを作ってそちらを参照するようにすればいいはず。このあたりはCartonを参考にすればいいと思っています。
依存関係の可決についてはAndroid用だと"androidDependencies"というタスクが依存グラフを出してくれます。これはDependencyReportTask.groovyが実体なのでこのあたりから掘っていけばいいはず。Gradleスクリプトについては未調査です。
$ ./gradlew androidDependencies :app:androidDependencies debug +--- com.google.android.gms:play-services:6.1.71 | \--- com.android.support:support-v4:20.0.0 | \--- LOCAL: internal_impl-20.0.0.jar \--- com.android.support:appcompat-v7:20.0.0 \--- com.android.support:support-v4:20.0.0 \--- LOCAL: internal_impl-20.0.0.jar (snip)
ちなみに素のGradleにはgradle-dependency-lock-pluginというのがあるけどちょっとイメージが違うしAndroid用には使えなそうです。
See Also