当前位置: 首页 > news >正文

Gradle打包流程

Gradle打包流程

一、Gradle基础概念

1、是什么

自动化构建工具,通过组织一系列task来最终完成自动化构建的。

2、gradle使用groovy或者kotlin编写。

groovy是DSL。那么什么是DSL?DSL也就是Domain Specific Language的简称,也就是领域特定语言,是为了解决某一类任务专门设计的计算机语言。DSL使用简单,定义比较简洁。

3、无论是基于groovy还是kotlin编写,均是基于jvm的语言。

因此本质上都是面对对象的,面向对象的特点是一切皆为对象,所以,在gradle里,.gradle脚本的本质就是类的定义,一些配置项的本质都是方法调用,参数是后面的{}闭包。比如build.gradle对应Project类,buildScript对应Project.buildScript方法。

二、打包流程

三部曲:初始化、配置、执行

1. 初始化(Initialization)
  • settings.gradle 解析
    确定参与构建的模块(Module),构建多模块工程依赖树。
2. 配置(Configuration)
  • 解析 build.gradle 文件
    • 根项目的 build.gradle:定义全局配置(如仓库地址、依赖版本)。
    • 模块的 build.gradle:配置Android插件、构建类型(Build Types)、依赖项等。
  • 创建Task依赖图
    Gradle根据配置生成所有Task及其依赖关系(不执行Task)。
3. 执行(Execution)

Gradle按依赖顺序执行Task,核心流程如下:

3.1 资源处理
  • 资源合并与编译
    • 合并所有资源(src/main/res、Flavor资源、Build Type资源)。
    • 编译资源为二进制格式(.ap_文件),生成 R.java/R.kt 文件。
3.2 代码编译
  • Java/Kotlin 编译
    • 编译Java/Kotlin源码(包括生成的 R.javaBuildConfig.java)。
    • 输出:.class 文件
3.3 字节码处理
  • Transform API 阶段
    自定义Transform(如字节码插桩)在此介入。
  • Dex/D8转换
    • dexBuilder Task(AGP 3.0+):
      使用D8编译器将 .class 文件转换为Dex格式(Dalvik/ART可执行文件)。
    • 输出:*.dex 文件(或增量处理的 .jar)。
3.4 打包APK
  • 资源、代码、清单合并
    • package[BuildVariant] Task:
      • 合并所有资源、清单文件(Manifest)。
      • 将Dex文件、编译后的资源、原生库(.so)、Assets等打包到未签名的APK中。
3.5 APK签名
  • sign[BuildVariant] Task
    使用调试密钥或发布密钥对APK签名:
    • 调试模式:自动使用 debug.keystore
    • 发布模式:需配置签名信息(在 build.gradle 中定义 signingConfigs)。
3.6 优化与对齐(Release构建)
  • Zipalign优化
    • zipalign Task:
      对齐APK中的资源文件到4字节边界,提升运行时内存访问效率。
  • R8/ProGuard混淆(可选)
    • 在Release构建中启用:
      压缩代码、移除无用资源、混淆类/方法名(生成 mapping.txt)。
4. 输出产物
  • 生成APK文件:位于 app/build/outputs/apk/[variant]/
  • 可选生成AAB(Android App Bundle):用于上传Google Play。

相关文章:

  • 129. 求根节点到叶节点数字之和 --- DFS +回溯(js)
  • 优化TCP/IP协议栈与网络层
  • Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)
  • MO+内核32位单片机的PY32F030单片机开发板
  • Gazebo 仿真环境系列教程(二):在 Gazebo 中构建自己的机器人
  • Spring MVC详解
  • Leetcode hot100 Java刷题
  • Loggers 配置解析(log4j.xml)
  • Vue3 + Axios + Ant Design Vue 请求封装详解教程(含 Token 鉴权、加密、下载)
  • 经典俄罗斯方块微信小游戏流量主小程序开源
  • Vue.js 计算属性详解:核心概念、最佳实践与注意事项
  • 宇鹿家政服务系统小程序ThinkPHP+UniApp
  • 责任链模式详解
  • 音视频之H.264视频编码传输及其在移动通信中的应用
  • [AJAX 实战] 图书管理系统下 编辑图书
  • 锌锭工业相机:迁移科技驱动金属制造自动化新高度
  • CppCon 2017 学习:Everything You Ever Wanted to Know about DLLs
  • 打破物理桎梏:CAN-ETH网关如何用UDP封装重构工业网络边界
  • 破局基建困局:国有平台公司数字化转型的生态重构
  • 网页后端开发(基础5--JDBC VS Mybatis)
  • 帝国做的网站打开速度/怎么给自己的公司建立网站
  • 软膜做网站有用吗/电商培训机构有哪些哪家比较好
  • 网站开发设计步骤/目前最新的营销方式有哪些
  • 怎么做网站搜索引擎/百度风云排行榜
  • 网站快照出现两个/2345网址导航中国最好
  • 空间坐标系做图网站/今日头条热搜