Jack and Jillとは
Jack and JillはBuild Tools version 21.1.1以上から追加された新しいAndroid用のコンパイラ群だそうです。
Experimental New Android Tool Chain - Jack and Jill - Android Tools Project Site
jackによって直接.javaを.dexにコンパイルし、jillによって.jarを.jackに変換してjackに渡すという形になるそうです。これによって多分ビルドの時間が短縮できるってことなんだろうなー。
Jack is currently an experimental tool chain.
て事なのでまだ実用段階じゃない様子。
Compilation support
Java programming language 1.7. Repackaging, shrinking, obfuscation and multidex features are supported. Annotation processing is not supported.
java7でproguard的なのをサポートしつつmultidexも出来る、しかしAnnotation Processingはサポートしていない。ここはちょっとキビシイですね。
試す
試すのは非常に簡単でBuild Tools version 21.1.1を入れた上でuseJack = true
をdefaultConfigや任意のflavorに書けばOK
android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { applicationId "com.sys1yagi.jackandjill" minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0" useJack = true //これ } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
./gradlew clean assembleDebug
で実行されるタスクを比べてみると以下の通り。ちょこちょこ違う。っていうかjack and jillの方がビルド遅い。差分ビルドでも同様だった。
default | jack and jill |
---|---|
20.725 secs | 35.109 secs |
:app:clean :app:preBuild :app:compileDebugNdk :app:preDebugBuild :app:checkDebugManifest :app:preReleaseBuild :app:prepareComAndroidSupportAppcompatV72103Library :app:prepareComAndroidSupportSupportV42103Library :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources :app:mergeDebugResources :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:compileDebugJava :app:preDexDebug :app:dexDebug :app:processDebugJavaRes UP-TO-DATE :app:validateDebugSigning :app:packageDebug :app:zipalignDebug :app:assembleDebug |
:app:clean :app:preBuild :app:preDebugBuild :app:checkDebugManifest :app:preReleaseBuild :app:prepareComAndroidSupportAppcompatV72103Library :app:prepareComAndroidSupportSupportV42103Library :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources :app:mergeDebugResources :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:jillDebugPackagedLibraries :app:jillDebugRuntimeLibraries :app:compileDebugJava :app:compileDebugNdk :app:processDebugJavaRes UP-TO-DATE :app:validateDebugSigning :app:packageDebug :app:zipalignDebug :app:assembleDebug |
まとめ
- 導入は手軽
- 開発中なので出来ない事多いぽい
- 今のところ既存の仕組みより遅い
どんどん新しいツール増えて大変だ。.java->.class->.dex
というフローじゃなくなる事で何か色々出来るようになるのかな?
一応リポジトリを作っておいた。jack and jillが更新されたら色々試していこうと思う。