Android新的编译工具Jack and Jill

在android Build Tools 21.1.1之后,增加了新的编译工具Jack 和Jill。要使用Jack还需要android studio 2.1版本以上。

Jack工作原理

JackSitesDiagram.gif
  • Legacy javac toolchain:
    javac (.java → .class) → dx (.class → .dex)

  • New Jack toolchain:
    Jack (.java → .jack → .dex)

编译产生的中间文件为jack,不过从java到dex的编译工程通过jack一个工具就完成了,jar和aar会经过Jill工具生成jack文件,同java文件生成的jack文件一起被编译为dex,在从jack到dex的过程中,会进行混淆操作

Jack的好处

1.可以支持部分Java 8的语法:

  • Default and static interface methods

  • Lambda expressions (also available on API level 23 and lower)

  • Repeatable annotations

  • Method References (also available on API level 23 and lower)

  • Type Annotations (also available on API level 23 and lower)

  • java.lang.FunctionalInterface

  • java.lang.annotation.Repeatable

  • java.lang.reflect.Method.isDefault()

  • java.util.function
  • java.util.stream

2.可以加快编译速度

配置使用Jack

android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

向jack传入参数

android {
...
    defaultConfig {
    ...
        jackOptions {
            enabled true
            additionalParameters("jack.incremental" : "true")
        }
    }
...
}

jack的参数列表可以通过下面的命令获得

java -jar /build-tools//jack.jar --help-properties

已知的问题

1.instant run不能使用

2.需要使用class才能工作的工具不能使用了

  • 比如Jacoco,AOP工具

引用

http://tools.android.com/tech-docs/jackandjill

https://developer.android.com/guide/platform/j8-jack.html

你可能感兴趣的:(Android新的编译工具Jack and Jill)