Android R8(Android 程序编译工具演变史)

801 阅读1分钟

前言

今天打开 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 把