官方文档中最新版本的图是:
-
应用的 module (包括源代码、资源文件和 aidl 文件)和依赖(Library module、aar 包、jar 包)统一经过编译器生成 dex 文件。 -
dex 文件和编译后的资源,经过 debug/release Keystore ,打包生成对应的 Apk 文件。
官方的描述
-
编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),并将其他所有内容转换成编译后的资源。 -
打包器将 DEX 文件和编译后的资源组合成 APK 或 AAB(具体取决于所选的 build 目标)。必须先为 APK 或 AAB 签名,然后才能将应用安装到 Android 设备或分发到 Google Play 等商店。 -
打包器使用调试或发布密钥库为 APK 或 AAB 签名: -
如果您构建的是调试版应用(即专门用来测试和分析的应用),则打包器会使用调试密钥库为应用签名。Android Studio 会自动使用调试密钥库配置新项目。 -
如果您构建的是打算对外发布的发布版应用,则打包器会使用发布密钥库(您需要进行配置)为应用签名。 -
-
在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,以减少其在设备上运行时所占用的内存。
构建流程结束时,您将获得应用的调试版或发布版 APK/AAB,以用于部署、测试或向外部用户发布。
旧版本的详细流程
一张图说明打包流程。
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 工具用来对应用进行优化,减少其在设备上运行时占用的内存。
上图的整体流程是:
-
应用的资源文件经过 AAPT 生成 R.java 文件;aidl 文件经过 AIDL 工具生成 Java 接口。 -
R.java 、源码、AIDL 生成的接口,统一经过 Java 编译器编译,生成 class 文件。 -
class 文件经过 dex 工具将上一步生成的所有 class 文件、和第三方的库和其他 class文件统一转化并打包生成 dex 文件。 -
dex 文件与一些其他资源和编译后的资源统一经过 apkbuilder 工具生成 apk 文件包。 -
此时的 apk 文件还未加密,使用 debug/release Keystore 对 apk 文件进行签名,得到签名后的 apk 文件。 -
已签名的 apk 文件最后经过 zipalign 工具对其进行优化,减少其在设备上运行时占用的内存,最终得到了优化后的 Apk 。
Stackoverflow 上的优秀回答
基本流程和上面一样,多了对 Manifest 的说明和一些工具的细节。Java 编译器通过 javac 命令编译出 class 文件,然后用 dx 工具生成 classes.dex ,即打包 class 文件成一个 dex 文件。
最详细的流程图
来自 Build Workflow – Android Studio Project Site
-
Manifest 文件、Resources 文件和 Assets 文件经过合并后统一由 AAPT 工具生成 R.java -
aidl 文件经过 AIDL 生成 java 类 -
R.java 、Java 源代码和 AIDL 生成的 java 文件统一经过 javac 生成 class 文件。 -
class 文件经过 proguard 根据混淆配置文件进行混淆,生成混淆后的 jar 包和 mapping 文件。 -
jar 包经过 dex 打包成 dex 文件。 -
一些 NDK 生成的 so 库和 dex 文件还有 Java 资源文件一起,经过 apkbuilder 生未签名的 Apk 文件。 -
未签名的 Apk 文件使用 Jarsigner 工具根据 KeyStore 进行签名,生成签名后的 Apk 文件。 -
最后经过 zipalign 进行优化,产生最终的 Apk 文件。
原文始发于微信公众号(八千里路山与海):Android Build Workflow
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/60217.html