DevSupport

编译相关

2019-09-30  本文已影响0人  修塔寻千里

什么是编译,可以简单理解为将高级语言转化为机器或虚拟机所能识别的低级别语言的过程。对于Android来说,这个过程就是把Java或者Kotlin转变为Android虚拟机运行的Dalvik字节码的过程。

Android编译


Gradle是Android官方的编译工具,它是GitHub上的一个开源项目。目前开源的项目有FaceBook的Buck以及Google的Bazel。
自己”造轮子”有如下好处:

编译速度

关于编译速度,我们最关心的可能还是编译Debug包的速度,尤其是增量编译的速度,希望可以做到更加快速的调试。


代码优化

对于debug包编译,我们更关心速度,但对于Release包来说,我们更在意应用的性能,因而代码优化更加重要。

ProGuard

加入ProGuard之后,应用的构建过程如下:



ProGuard主要有混淆、裁剪和优化三大功能,它的整个处理流程是:



其中优化包括内联、修饰符、合并类和方法等30多种。

d8

Android Studio 3.0推出了d8, 并在3.1正式成为默认工具,它的作用是将“.class”文件编译为Dex文件,取代之前的dx工具。



d8除了更快的编译速度之外,还有一个优化是减少生成Dex大小。

R8

R8在Android Studio 3.1中引入,目标是取代ProGuard和d8,R8可以把“.class”文件变成Dex。



同时R8还支持ProGuard中混淆、裁剪、优化三大功能,R8的最终目的,一个是加快编译速度,一个更强大的代码优化。

ReDex

Facebook内部的很多项目都已经全部切换到ReDex,不再使用ProGuard,跟ProGuard不同的是,它直接输入的对象是Dex,而不是“.class”文件,也就是直接针对最终产物的优化。

持续交付

Gradle、Buck、Bazel它们代表的都是狭义上的编译,广义上的编译应该包含打包构建、Code Review、代码工具管理、代码扫描等流程,也就是业界最近经常提起的持续集成。



目前最重用的持续集成工具有Jenkins、GitLab CI、Travis CI等,

上一篇下一篇

猜你喜欢

热点阅读