Android Build Workflow

官方文档中最新版本的图是:

Android Build Workflow
build-process_2x.png
  • 应用的 module (包括源代码、资源文件和 aidl 文件)和依赖(Library module、aar 包、jar 包)统一经过编译器生成 dex 文件。
  • dex 文件和编译后的资源,经过 debug/release Keystore ,打包生成对应的 Apk 文件。

官方的描述

  1. 编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),并将其他所有内容转换成编译后的资源。
  2. 打包器将 DEX 文件和编译后的资源组合成 APK 或 AAB(具体取决于所选的 build 目标)。必须先为 APK 或 AAB 签名,然后才能将应用安装到 Android 设备或分发到 Google Play 等商店。
  3. 打包器使用调试或发布密钥库为 APK 或 AAB 签名:
    1. 如果您构建的是调试版应用(即专门用来测试和分析的应用),则打包器会使用调试密钥库为应用签名。Android Studio 会自动使用调试密钥库配置新项目
    2. 如果您构建的是打算对外发布的发布版应用,则打包器会使用发布密钥库(您需要进行配置)为应用签名。

    1. 在生成最终 APK 之前,打包器会使用  zipalign  工具对应用进行优化,以减少其在设备上运行时所占用的内存。

构建流程结束时,您将获得应用的调试版或发布版 APK/AAB,以用于部署、测试或向外部用户发布。

旧版本的详细流程

Android Build Workflow
buildapk.webp

一张图说明打包流程。

Android 应用模块的构建流程如上面的流程所示,首先介绍几个概念:

  • AAPT :Android Asset Packaging Tool ,Android资源打包工具。会将资源文件(res 文件夹下的文件)打包,并生成 R.java 和 resources.arsc 文件。
  • AIDL工具会将所有的 .aidl 文件编译成 .java 文件
  • Java 编译器将 R.java、AIDL 接口生成的 java 文件、应用代码 java 文件编译成 .class 文件。
  • dex 脚本将 .class 文件转换并打包生成一个 .dex 文件。
  • apkbuilder 脚本将资源文件和 .dex 文件生成未签名的 .apk 文件。
  • jarsigner 用来对 apk 进行签名。
  • zipalign 工具用来对应用进行优化,减少其在设备上运行时占用的内存。

上图的整体流程是:

  1. 应用的资源文件经过 AAPT 生成 R.java 文件;aidl 文件经过 AIDL 工具生成 Java 接口。
  2. R.java 、源码、AIDL 生成的接口,统一经过 Java 编译器编译,生成 class 文件。
  3. class 文件经过 dex 工具将上一步生成的所有 class 文件、和第三方的库和其他 class文件统一转化并打包生成 dex 文件。
  4. dex 文件与一些其他资源和编译后的资源统一经过 apkbuilder 工具生成 apk 文件包。
  5. 此时的 apk 文件还未加密,使用 debug/release Keystore 对 apk 文件进行签名,得到签名后的 apk 文件。
  6. 已签名的 apk 文件最后经过 zipalign 工具对其进行优化,减少其在设备上运行时占用的内存,最终得到了优化后的 Apk 。

Stackoverflow 上的优秀回答

Android Build Workflow
yCaIB.png

基本流程和上面一样,多了对 Manifest 的说明和一些工具的细节。Java 编译器通过 javac 命令编译出 class 文件,然后用 dx 工具生成 classes.dex ,即打包 class 文件成一个 dex 文件。

最详细的流程图

来自 Build Workflow – Android Studio Project Site

Android Build Workflow
Android Build Process.png
  1. Manifest 文件、Resources 文件和 Assets 文件经过合并后统一由 AAPT 工具生成 R.java
  2. aidl 文件经过 AIDL 生成 java 类
  3. R.java 、Java 源代码和 AIDL 生成的 java 文件统一经过 javac 生成 class 文件。
  4. class 文件经过 proguard 根据混淆配置文件进行混淆,生成混淆后的 jar 包和 mapping 文件。
  5. jar 包经过 dex 打包成 dex 文件。
  6. 一些 NDK 生成的 so 库和 dex 文件还有 Java 资源文件一起,经过 apkbuilder 生未签名的 Apk 文件。
  7. 未签名的 Apk 文件使用 Jarsigner 工具根据 KeyStore 进行签名,生成签名后的 Apk 文件。
  8. 最后经过 zipalign 进行优化,产生最终的 Apk 文件。


原文始发于微信公众号(八千里路山与海):Android Build Workflow

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/60217.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!