Android 构建流程 - 图1

【Android 修炼手册】常用技术篇 — 聊聊 Android 的打包

Android APK 包结构

Android 构建流程 - 图2

  • assets

原生资源文件,不会被压缩或者处理

  • classes.dex

java 代码通过 javac 转化成 class 文件,再通过 dx 文件转化成 dex 文件。如果有多个 dex 文件,其命名会是这样的:
classes.dex classes2.dex classes3.dex …

  • lib/

保存了 native 库 .so 文件,其中会根据 cpu 型号划分不同的目录,比如 ARM,x86 等等

  • res/

保存了处理后的二进制资源文件

  • resources.arsc

保存了资源 id 名称以及资源对应的值/路径的映射

  • META-INF/

用来验证 APK 签名,其中有三个重要的文件 MANIFEST.MT,CERT.SF,CERT.RSA

  • MANIFEST.MF 保存了所有文件对应的摘要
  • CERT.SF 保存了MANIFEST.MF 中每条信息的摘要
  • CERT.RSA 包含了对 CERT.SF 文件的签名以及签名用到的证书
    • AndroidManifest.xml

全局配置文件,此处是编译处理过的二进制的文件

整体流程

.java.kt 代码文件被 Java 编译器和 Kotlin 编译器协作编译为 .class 文件,这些文件又被编译为 .dex 文件,最终被打包进 .apk 文件。

Android 构建流程 - 图3

Android 构建流程 - 图4

主要有下面几个步骤:

  1. 使用 AAPT2 编译资源文件生成 resources.arsc 以及 R.java
  2. 使用 aidl 处理 aidl 文件,生成 java 文件
  3. 使用 JAVAC 编译 java 文件,生成 classes 文件
  4. 使用 DX/D8 处理 class 文件,生成最终需要的 dex 文件
  5. 使用 Android NDK 处理 native 代码生成 .so 文件
  6. 使用 apkbuilder 生成 未签名的 APK
  7. 使用 apksigner 对 Apk 进行签名,生成最终的 APK

签名

APK 签名:v1 v2 v3 v4 · 语雀

多渠道打包

多渠道打包

启动

当你从应用商店下载一个应用的时候,你下载的就是包含了所有 .dex 以及资源的 apk 安装包,并被安装到设备上。当你从 launcher 上点击一个应用图标的时候,系统就会启动一个新的 Dalvik 进程,并将应用包含的 dex 代码加载进来,这些代码进一步在运行时被 Interpreter 解释器解释或者被 JIT 编译器编译。然后你就看到了应用的页面了。

Android 构建流程 - 图5