2.29 gradle和打包
2.29.1 gradle
project, gradle待编译过程即projecttask,project包含一系列task, 如Java源码编译等task的依赖关系, 定义task, 并指定assemble依赖于task xxx, 当assemble执行时, 就会先处理task xxxtask包含若干Action,task包含doFirst,doLast函数, 用于添加最先执行的Action和最后执行的Action,Action即闭包task创建可以指定Type, 表示从哪个基类task派生
plugin, 插件, 可以是xxx.gradleext, 设置属性- 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官网
-
构建流程图来自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进行对齐处理