apk打包流程图
新版本的apk打包流程图
旧版本的apk打包流程图
2.1. Resource资源文件
包括res目录下的xml文件、动画、drawable图片、音视频等。 AAPT工具负责编译项目中的这些资源文件,所有资源文件被编译处理,XML文件(drawable图片除外)会被编译成二进制文件,所以解压apk后无法打开xml文件。assets和raw目录下的资源并不会被编译,直接打包都apk压缩包中。 资源文件编译后包括两部分:resources.arsc 和 R.java。 resources.arsc 保存资源索引的一个列表,简单的可以理解为map<key,value>,其中key就是R.java中定义的资源ID,value就是资源所在路径。 R.java 定义了各个资源的ID常量 两者结合在一起就能找到对应的资源引用。
2.2. 源码部分
源码(.aidl会编译成.java文件) -> xxx.class + 依赖的三方库.class -> dx工具优化 -> .dex文件。
2.3. 打包阶段
使用ApkBuilder将编译后的resource和.dex文件 -> apk ,实际上apk中还有其他资源,AndroidManifest.xml和三方库中的.so文件。
创建好的apk -> jarsigner 签名 -> 签名后生成META_INF文件夹,此文件夹中保存着跟签名相关的各个文件。
- CERT.SF 生成每个文件相对的密钥
- MANIFEST.MF 数字签名信息
- xxx.SF 这是JAR文件的签名文件
- xxx.DSA 对输出文件的签名和公钥
2.4. 优化
使用zipAlign 对apk中未压缩的资源文件(图片、视频等)进行对齐操作,让资源按照4字节的边界进行对齐。目的是为了加快资源的访问速度。