2.29 gradle和打包

less than 1 minute read

2.29.1 gradle

  1. project, gradle待编译过程即project
  2. task, project包含一系列task, 如Java源码编译等
    • task的依赖关系, 定义task, 并指定assemble依赖于task xxx, 当assemble执行时, 就会先处理task xxx
    • task包含若干Action, task包含doFirst, doLast函数, 用于添加最先执行的Action和最后执行的Action, Action即闭包
    • task创建可以指定Type, 表示从哪个基类task派生
  3. plugin, 插件, 可以是xxx.gradle
  4. ext, 设置属性
  5. Multi-Projects Build, 多项目构建, 在根目录创建setting.gradle, 通过include把子项目引入
  6. gradle处理流程 gradle处理流程, 来源于深入理解Android之Gradle
  7. 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-project
    • dependencies{}, Configures the dependencies for this project
  8. Transform, gradle提供构建阶段由class转成dex期间修改class文件的api
    • 可以在自定义task或者plugin中注册Transform, 即android.registerTransform(new xxxTransform(project))

2.29.2 Android打包原理

  1. 构建流程
    • 构建流程图来自Google官网 构建流程图来自Google官网
  • 构建流程图来自Google官网旧图 构建流程图来自Google官网旧图

    1. appt命令打包res资源文件, 生成R.java, resources.arsc和res文件
    2. 处理.aidl文件, 生成java接口文件
    3. Java Compiler编译, R.java, java源文件等编译成.class文件
    4. dex将.class和第三方库的.class处理生成.dex
    5. apkbuilder将resources.arsc和res文件和class.dex打包生成.apk
    6. Jarsigner将.apk签名
    7. zipalign对apk进行对齐处理

参考