Android基础编译流程

前言:该文章为学习笔记,记录Android知识点,大家一起学习。

Android工程的构建打包是一个非常复杂的流程,涉及工程源代码、资源文件、AIDL文件,以及工程所依赖的库文件的编译转换。编译流程非常灵活,因此了解它的一些底层工作原理会很有帮助。

从谷歌官网上找到一张典型的构建流程图:
Android基础编译流程_第1张图片

https://developer.android.com/studio/build/index.html?hl=zh-cn

介绍一下编译构建的四个步骤:
代码编译 --> 代码合成 --> 资源打包 --> 签名和对齐
(1)Java编译器对工程对代码资源进行编译,代码资源包括App的源代码、apt编译生成的R文件和AIDL文件生成的Java接口文件。通过Java编译器生成xxx.class文件。
(2)通过dex工具,将xxx.class文件和工程依赖的第三方库文件生成虚拟机可执行的dex文件,如果使用了MultiDex,会产生多个dex文件,包含编译后的所有class文件,也包括自身的.class文件和依赖库的.class文件。
(3)apkbuilder工具将.dex文件、apt编译后的资源文件、依赖中的第三方库内的资源文件打包生成签名对齐的apk文件。
(4)使用Jarsigner和Zipalign对文件进行签名和对齐操作,最终生成apk文件。

通过Gradle工具可以看到每个运行的Task的情况,还可以看到Gradle编译的流程,详细的显示出每个任务的Task耗时。

  • Run init scripts:初始化描述
  • Configure settings:检查settings.gradle的模块配置
  • Configure build:检查build.gradle中引入的classpath
  • Calculate task graph:计算出每个模块的依赖
  • Run tasks:开始构建任务

如果想要查看Task的依赖树,这里推荐使用一个Gradle框架gradle-task-tree,需要配置根目录的build.gradle:
Android基础编译流程_第2张图片
配置完成后,在Terminal中使用Gradle命令:

gradlew assembledebug taskTree --no-repeat

这个命令在Terminal中打印出Task的依赖树:
Android基础编译流程_第3张图片
可以很清晰的看出来咱们的编译流程是怎么样的。

需要注意以下几点:
(1)一定要使用–no-repeat,不然会一直重复打印
(2)Gradle配置需要使用3.3版本以上
(3)工程中全部引用的module都需要配置apply plugin:"com.dorongold.task-tree“。

这里提供另外一个可视化工具gradle-visteg,在根目录的build.gradle中配置如下代码:
Android基础编译流程_第4张图片
同步Gradle后,运行gradle build命令,等待片刻后,编译完成后会产生visteg.dot文件:
Android基础编译流程_第5张图片
dot是一种描述文件,可以通过WPS等工具浏览,下面是示例:
Android基础编译流程_第6张图片
可以逐行的看出编译流程。

你可能感兴趣的:(android开发,技术)