手机移动程序开发程序员

javac和jack,Android编译器的演进

2017-02-28  本文已影响441人  super_shanks

http://taobaofed.org/blog/2016/05/05/new-compiler-for-android/

javac

在没有jack以前,google一直使用的sun/oracle的java编译器javac用作android的官方编译器。
javac是jdk中的java编译器,将java文件编译成class文件,那么我们来看一下之前的Android的java文件是怎么一步一步变成可以在dalvik虚拟机中运行的dex文件的。

之前的Android编译流程

我们看到之前的整个流程大致如上图描述的


jack

而我们新的编译的流程直接把之前的javac,proguard工具都摒弃掉,直接用jack把.java文件转成.jack文件再通过pre-dex处理转成.dex文件

而Android库和通用库以及第三方库的.class文件怎么办的,jill工具会把这些class文件和resource文件进行分离,然后把.class文件编译成.jayce文件,再把这个.jayce文件交给jack进行处理。完全跳过了class文件。

那么这样一来我们经常使用那些基于class文件的工具就将无法使用了,比如retrolambda、以及proguard等

但是根据最新版本,jack已经可以处理lambda语法,并且混淆和代码优化也不是问题,以及注解问题也可以很好的处理,具体的问题我们继续保持关注

相比之前的编译方式,这种最新的编译方式首先是google自己的自我保护,拿起枪杆子。其次优势还是很多的,比如采用pre-dex的方式编译,那么久相当于增量编译,只要变化不大,那么编译速度就会有明显的提高。jack文档还申明jack在编译的过程中还会另外开启一个编译器,进行并行编译。

上一篇 下一篇

猜你喜欢

热点阅读