前言
今天打开 AS ,弹出了更新,瞅了几眼,有个 R8 引起我的注意。
本人内容来自网络,只是知识的搬运工。 www.guardsquare.com/en/blog/pro…
长久以来的编译流程
很长时间,编译器的编译过程如下:
Source Code (.java)
-(JavaC)-> Java bytecode (.class文件)
-(Proguard)-> 优化的(Optmized)Java bytecode
-(dex)-> 优化后的 Dalvik bytecode (.dex)
- Proguard (混响器)是可选的,可使代码更小更快
- dx 编译器可最后将 Java 字节码转换为 Dalvik 字节码,
昙花一现的 Jack 编译器
Android Team 在2015 推出 Jack 编译器,用来优化编译这步,简述之,就是一步到位
Source Code -(Jack&Jill)-> Optmized Dalvik bytecode
理想很美好,现实很残酷,这个方式虽然构建程序变得线性,但是处于语言考虑,比如不好支持 Java8 新特性,而弃坑了。
新生 D8
上回说到 Android Team 在 2017 年抛弃了 Jack&Jill ,提出了 D8 ,不过这个工具其实是有点倒退的,可能之前步子迈太大闪到腰了。
Source Code (.java)
-(JavaC)-> Java bytecode (.class文件)
-(Proguard)-> 优化的(Optmized)Java bytecode
-(D8)-> 优化后的 Dalvik bytecode (.dex)
我们可以看到,也就替换了 dex。
D8 品质由于 dex, 更少指令更好的注册分配
现在的R8(2019)
D8 有点倒退,但是像 Jack&Jill 一步到位会闪到腰,最好的方式就是寻寻渐进,D8 的进阶 R8 出来喽。
Source Code
-(Javac)-> Java bytecode
-(R8)-> 优化后的 Dalvik bytecode (.dex)
可以看到 R8 做了 ProGuard 和 dex 的工作。
小结
- 技术总是螺旋形进步的
- 期待R8 之后的更牛逼技术,直接一步到位,但闪不到腰,暂且叫 S8 把