Android构建流程

  • 前言
  • APK 构建流程
  • AGP(3.2.0)任务列表总览图
  • 参考文献

前言

大家平时开发Android项目时一般都是点击AS run按钮,这样apk会自动安装到手机上,这整个过程到底发生来什么呢?

今天就来梳理下整个流程gradle做了什么,讲解前先来熟悉下apk整体构建流程

APK 构建流程

官方新图

如图 1 所示,典型 Android 应用模块的构建流程通常按照以下步骤执行:

  1. 编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),并将其他所有内容转换成编译后的资源。
  2. APK 打包器将 DEX 文件和编译后的资源合并到一个 APK 中。不过,在将应用安装并部署到 Android 设备之前,必须先为 APK 签名。
  3. APK 打包器使用调试或发布密钥库为 APK 签名:
    • 如果您构建的是调试版应用(即专用于测试和分析的应用),则打包器会使用调试密钥库为应用签名。Android Studio 会自动使用调试密钥库配置新项目。
    • 如果您构建的是打算对外发布的发布版应用,则打包器会使用发布密钥库为应用签名。如需创建发布密钥库,请参阅在 Android Studio 中为应用签名。
  4. 在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,以减少其在设备上运行时所占用的内存。
    构建流程结束时,您将获得应用的调试版 APK 或发布版 APK,以用于部署、测试或发布给外部用户。

上面是官方新图,感觉没有

Android构建流程——篇一相关推荐

  1. Android构建流程——篇二

    文章目录 预操作 任务列表 如何查看一个task类 Task1: checkDebugClasspath 1. input/output 2. 如何找到任务实现类 3. 核心类(AppClasspat ...

  2. Android构建流程——篇七

    文章目录 Task24 transformClassesWithDexBuilderForDebug 1.input/ouput 2. 核心类(DexArchiveBuilderTransform,T ...

  3. Android构建流程——篇四

    文章目录 Task9 generateDebugResValues 1. input/ouput 2. 核心类(GenerateResValues) Task10 generateDebugResou ...

  4. Android构建流程——篇六

    文章目录 Task17: javaPreCompileDebug 1. input/ouput 2. 验证 3. 核心类(JavaPreCompileTask) Task18:compileDebug ...

  5. Android构建流程——篇五

    文章目录 Task13: processDebugManifest 1. input/ouput 2. 整体流程 3. 调用链路 4. 核心类(MergeManifests) 5. AndroidBu ...

  6. Android构建流程——篇三

    文章目录 Task5 checkDebugManifest 1. input/ouput 2. 核心类(CheckManifest) Task6 generateDebugBuildConfig 1. ...

  7. Android构建流程——篇八

    文章目录 Task29 checkDebugLibraries 1. inut/ouput 2. 核心类(CheckMultiApkLibrariesTask) Task30 processDebug ...

  8. 优酷 Android 构建速度优化实践

    作者:苏彦郊(木磊) Android 项目一般使用 gradle 作为构建打包工具,gradle 简洁.动态的功能特性为人津津乐道,同样,构建执行速度缓慢的缺陷也一直为人诟病. 近年来,随着优酷功能特 ...

  9. AndroidStudio目录结构 APP构建流程 Jenkins持续集成构建 Gradle介绍 Proguard混淆

    Android Studio目录结构 通常我们是将工程设置成project模式,这个模式下我们的工程有很多目录: .gradle:包含一些Gradle编译脚本,gradle是Google推荐的编译工具 ...

最新文章

  1. Matlab编程与数据类型 -- 函数M文件的调用
  2. 【python小游戏】据说这是一款还原度超高的小游戏,你感受下......
  3. 简析.NET Core 以及与 .NET Framework的关系
  4. MySQL之优化器、执行计划、简单优化
  5. 奥拉星插件flash下载手机版下载安装_终于等到你!安卓微信7.0.13内测版发布 支持夜间模式 附下载地址!...
  6. Leaflef笔记-使用leaflet-tilelayer-wmts插件获取地图及坐标(含错误分析思路)
  7. 人脸识别算法二:Fisherface(LDA)
  8. linux对磁盘进行分区_如何在Linux中对磁盘进行分区
  9. java实现文件下载的两种方式6_struts2实现文件下载功能
  10. 面试小能手速成,接口测试脚本如何编写?其实很简单
  11. git学习笔记-(3-linux基本命令)
  12. 数据结构c语言版编程软件,数据结构严蔚敏4版PDF下载_数据结构C语言版严蔚敏下载 完整版_当载软件站...
  13. 为什么要分层?数据仓库分层架构深度讲解
  14. Linux参考资料名称,Linux系统管理员必备参考资料下载汇总
  15. 【转】关于在.Net开发中使用Sqlite的版本选择问题
  16. JavaWeb(10.21)
  17. 【数学】用C语言实现函数的定积分—— 把 “定积分定义计算出的值” 和 “牛顿-莱布尼兹公式计算出的值” 两者进行误差比较
  18. Node.js 使用 zlib 内置模块进行 gzip 压缩
  19. 大部分前端都在用的 ES6 代码简化技巧,你都在用吗?
  20. MongoDB高性能、高可用之副本集、读写分离、分片、操作实践

热门文章

  1. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信
  2. 九、玩转JavaScript的数组(五)
  3. 二十一、String、StringBuffer和StringBuilder的区别是什么?
  4. 八、爬虫解析利器 PyQuery 的使用
  5. 四十、Scrapyd的安装及使用
  6. 图马尔可夫网络:融合统计关系学习与图神经网络
  7. 论文解读 | 利用脑功能连接实现疲劳驾驶检测
  8. 复旦大学邱锡鹏教授:NLP预训练模型综述
  9. 追一科技热招职位来袭:AI新世界,不做旁观者
  10. 输入法注入源码_将注入进行到底:利用Mono注入C#游戏脚本