Android知识点2--Android如何打包一个apk的?

71 阅读1分钟

apk打包流程图

新版本的apk打包流程图 image.png

旧版本的apk打包流程图

image.png

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字节的边界进行对齐。目的是为了加快资源的访问速度。