Android-构建APK的流程

230 阅读2分钟

构建Apk

image.png

整个构建分为两个主要操作:

  • 编译(Compile)

    编译器(Compiler)通过编译 源码 、AIDL文件 、资源文件 、依赖包,最终生成Dex文件和编译后的资源文件。

  • 打包(APK Package)

    打包器(APK Packager)利用签名文件(KeyStore)和上一步编译过程中生成的Dex文件、编译后的资源文件打包成最终的APK文件。

编译流程

aapt2阶段

aapt2将资源文件的编译分为2个步骤:

  • 编译阶段

    解析资源文件并生成扩展名为.flat的中间二进制文件

  • 链接阶段

    将编译阶段生成的所有中间文件(资源表、二进制XML文件和处理过的PNG文件)合并到一个APK中,此外在此资源还可以生成其他辅助文件,如R.java文件和ProGurad规则文件。 此时生成的APK文件并不包含DEX文件。

aidl阶段

这一过程中使用到的工具是aidl,位于android-sdk/platform-tools目录下。 AIDL (Android Interface Definition Language), Android接口定义语言,Android提供的IPC (Inter Process Communication,进程间通信)的一种独特实现。 这个阶段处理.aidl文件,生成对应的.java文件

javaCompiler阶段

将所有.java文件(包括R文件和AIDL生成的.java文件),通过javac工具生成class文件

dex阶段

将生成的.class文件和第三方库的.class文件通过dx工具生成classes.dex文件(如果有分包,那么可能有多个)

打包流程

apkBuilder阶段

aapt阶段中的资源文件、dex文件和第三方的非java资源包(.so),通过apkbuilder工具生成未签名的apk包

jarSigner阶段

签名,jarsigner工具,如果是debug模式用默认签名,release模式用开发者的签名。

zipAligin阶段

对齐,通过zipalign工具对apk中的未压缩资源(图片、视频)进行“对齐操作”,让资源按4字节的边界进行对齐,使得资源访问速度更快。

大致流程

image.png