Android基础编译流程

释放双眼,带上耳机,听听看~!

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

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

从谷歌官网上找到一张典型的构建流程图:

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:

配置完成后,在Terminal中使用Gradle命令:

gradlew assembledebug taskTree –no-repeat
1
这个命令在Terminal中打印出Task的依赖树:

可以很清晰的看出来咱们的编译流程是怎么样的。

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

这里提供另外一个可视化工具gradle-visteg,在根目录的build.gradle中配置如下代码:

同步Gradle后,运行gradle build命令,等待片刻后,编译完成后会产生visteg.dot文件:

dot是一种描述文件,可以通过WPS等工具浏览,下面是示例:

可以逐行的看出编译流程。

人已赞赏
Android文章

Android签名概述

2019-11-11 15:04:58

Android文章

Android系统编译所使用的命令

2019-11-12 13:05:32

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索