转载

Jack 和 Jill:应该在你的下一个应用使用吗?

2016年Google大会发布了 Android N与新的编译工具 Jack 和 Jill.

Jack是 Android 的编译器,Jill(Jack Intermediate Library Linker) 目的是替代现有的 javac+dx 工具链.

我们看一下在这之前 Android 是如何进行编译工作,在这之后,以及在这之后如何使用 Jack 在你的 Android 应用项目.

Android 编译过程:

让我们看一下现在 android 编辑过程是如何工作的.

我不会详细描述每一个编译链的组成部分.

自 Android 系统发布以来它的编译过程如下:

Jack 和 Jill:应该在你的下一个应用使用吗?

我们将我们的 java 代码写在 .java 文件.当我们开始编译我们的应用源代码,它需要两个步骤.首先,使用java 编译器(javac)将源代码编译成.class 字节码文件.这个常见的过程在 JVM 上运行 java 应用.但是,Android 系统没有使用 JVM 来运行应用.它使用Dalvik (Android L 以上版本使用 ART) 高度优化的移动环境.因此,这个编译已经改变了,从源代码生成字节码需要修改.这就是图片中的第二步.在第二步,-Dx 工具得到Java 编译器生成的. class 文件,然后编译到一个.dex 文件.现在,我们的 Dalvik(或 ART)就可以解析和运行.dex 文件.

###你可能会想关于第三方库,包含在我们的项目吗?

这些第三方库来自. jar 或.arr 格式.

这个.jar 文件只不过是压缩的.class文件.

所以,当你编译那些扩展库到你的项目,-Dx 工具将转换它们到.dex 文件.

Jack 和 Jill:应该在你的下一个应用使用吗?

当我们使用工具操作字节码(如:使用 Proguard 删除没有使用的代码和混淆源文件或 Retrolambda 在 Java7中使用lambda 表达式)它需要输入 .class 文件.修改它们的字节码生成新的.class 文件.之后修改的 class 文件使用-Dx 工具转换到 .dex 文件,产生最终的结果.

Jack 和 Jill:应该在你的下一个应用使用吗?

现在 Jack 与 javac+dx 有什么不同的?

Jack 结合上面编译链的两个步骤 (javac+dx) 为 一个步骤,它输入 .java 文件输出 .dex 文件.很酷,哈!!!我们不需要提供.class 中间文件,所以不需要更多的.Dx 工具.

Jack 和 Jill:应该在你的下一个应用使用吗?

关于第三方扩展?

它们都是. class 文件格式.正如我们讨论的,Jack 编辑器不输入.class 文件.在这里将涉及到Jill. Jill 将处理这些 .class 文件,将他们转换成特殊的 .jack 格式. Jack编辑器读取 .jack 文件然后生成 .dex文件.

Jack 和 Jill:应该在你的下一个应用使用吗?

Proguard 和 Retrolambda 工具将如何工作?

这些扩展处理 .class 文件.现在使用 Jack工具链将不生成 .class 文件.混淆器在 Jack 工具链内部,所以我们在项目中使用它们,不用担忧.而Retrolambda我们不需要了,Jack 可以完美的处理所有的 lambdas表达式(关于这我非常兴奋).当然,现在你不能使用其他的安全工具,像Jacoco.但是,我不关心它们 :-) . 希望Google在未来可以支持它们.

如何在你的项目中启用Jack?

在你的 module目录下的build.gradle 文件中启动Jack工具链.

原文  https://imuhao.github.io/2017/01/07/Jack-And-Jill/
正文到此结束
Loading...