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

*1:transitive dependencies: 依存ライブラリの依存ライブラリみたいな関係

*2:知らないだけかもしれない。もしご存知でしたら教えて下さい。