构建Apk
整个构建分为两个主要操作:
-
编译(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字节的边界进行对齐,使得资源访问速度更快。