2.29 gradle和打包
2.29.1 gradle
project
, gradle待编译过程即project
task
,project
包含一系列task
, 如Java源码编译等task
的依赖关系, 定义task
, 并指定assemble
依赖于task xxx
, 当assemble
执行时, 就会先处理task xxx
task
包含若干Action
,task
包含doFirst
,doLast
函数, 用于添加最先执行的Action
和最后执行的Action
,Action
即闭包task
创建可以指定Type
, 表示从哪个基类task
派生
plugin
, 插件, 可以是xxx.gradle
ext
, 设置属性- Multi-Projects Build, 多项目构建, 在根目录创建
setting.gradle
, 通过include
把子项目引入 - gradle处理流程
- Build Script(made up of zero or more statements and script blocks, statements can include method calls, property assignments, and local variable definitions, A script block is a method call takes a closure as parameter)
allprojects{}
, Configures project and all sub-projectdependencies{}
, Configures the dependencies for this project
Transform
, gradle提供构建阶段由class转成dex期间修改class文件的api- 可以在自定义
task
或者plugin
中注册Transform
, 即android.registerTransform(new xxxTransform(project))
- 可以在自定义
2.29.2 Android打包原理
- 构建流程
- 构建流程图来自Google官网
-
构建流程图来自Google官网旧图
- appt命令打包res资源文件, 生成R.java, resources.arsc和res文件
- 处理.aidl文件, 生成java接口文件
- Java Compiler编译, R.java, java源文件等编译成.class文件
- dex将.class和第三方库的.class处理生成.dex
- apkbuilder将resources.arsc和res文件和class.dex打包生成.apk
- Jarsigner将.apk签名
- zipalign对apk进行对齐处理