Android编译流程和Gradle使用

Android工程的编译打包是个复杂的过程,期间既涉及到工程自身的源代码、资源文件、AIDL文件,又涉及到工程所依赖的库文件(Library, JAR, AAR)等,需要由多个工具分多个步骤完成。本文将对编译打包的流程进行描述,并对控制这个流程用到的gradle文件体系进行介绍。
打包过程
下图是谷歌官网给出的一个典型的apk构建的过程,比较概括。主要包括两个过程,首先是编译过程,编译的内容包括本工程的文件以及依赖的各种库文件,编译的输出包括dex文件和编译后的资源文件。然后是打包过程。配合Keystore对第一步的输出进行签名对齐,生成最终的apk文件。

下面这张图对上面的步骤以及每步用到的工具进行了细分,概括如下:
1. Java编译器对工程本身的java代码进行编译,这些java代码有三个来源:app的源代码,由资源文件生成的R文件(aapt工具),以及有aidl文件生成的java接口文件(aidl工具)。产出为.class文件。
2. .class文件和依赖的三方库文件通过dex工具生成Delvik虚拟机可执行的.dex文件,可能有一个或多个,包含了所有的class信息,包括项目自身的class和依赖的class。产出为.dex文件。
3. apkbuilder工具将.dex文件和编译后的资源文件生成未经签名对齐的apk文件。这里编译后的资源文件包括两部分,一是由aapt编译产生的编译后的资源文件,二是依赖的三方库里的资源文件。产出为未经签名的.apk文件。
4. 分别由Jarsigner和zipalign对apk文件进行签名和对齐,生成最终的apk文件。
总结为:编译–>DEX–>打包–>签名和对齐

Gradle文件体系
Android工程通过gradle文件管理各项配置,gradle文件利用DSL(Domain Specific Language)语言描述配置,并使用Groovy语言处理编译逻辑。一个典型的Android工程结构如下:

在这里gradle文件分布在几个不同的层级,Project层级以及Module层级。
1. Project层级的settings.gradle描述的是该Project包含哪些Module
include ':presentation', ':qamodel',

本文详细解析了Android应用的编译打包流程,包括编译、DEX生成、打包、签名对齐等步骤,并探讨了Gradle在Android项目中的作用。介绍了Gradle文件体系,如buildTypes用于配置构建类型,productFlavors用于定制产品风味,dependencies用于管理依赖,signingConfigs用于设置签名信息。通过理解这些概念,开发者能更好地掌控Android项目的构建过程。

791

被折叠的 条评论
为什么被折叠?



