読者です 読者をやめる 読者になる 読者になる

visible true

技術的なメモを書く

Jack and Jillを試す

Android

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が更新されたら色々試していこうと思う。

sys1yagi/jack-and-jill-sample · GitHub