1.每个module中的内容可以分为两部分: resources 资源文件 (包括:XML 动画 DW图片 音视频) Java /Kotlin 源代码()
2.APPT工具负责变异这些资源文件,所有资源文件都会编译处理,XML和DR图片外其都会被编译成二进制文件
assets和raw目录下的文件并不会被编译,会直接打包到Apk到压缩包中.
编译后的文件主要包含:resources.arsc文件(资源索引表) R.Java文件(定义资源ID 常量)
resources文件是一个MAP映射表,MAP的key是R.java的资源ID,value是对应资源所在的路径.
二.编译阶段(源码部分)
源码会通过javac编译为.class字节码文件,.class文件会和库文件中的.class一同被dx工具优化为.dex文件
如果有分包,会生成多个.dex文件 如果包含 .aidl文件,这些文件会被编译成 .java文件
三.打包阶段
1.使用APK Builder 将编译后的resource和.dex文件一起打包到apk中
实际上还有其他资源(androidManifest.xml 和.so文件)
2.apk创建好之后,需要共jarsigner进行签名
签名之后会生成META_INF文件,保存签名相关的文件
CERT.SF :生成每个文件相对的密钥
MACIFEST.MF :数字签名信息
XXX.SF :JAR文件的签名文件
XXX.DSA :输出文件的签名和公钥匙
3.使用Zipalign对APK为压缩的资源进行对齐操作(4字节边界对齐)
目的就是JAVA思想中的加快资源的访问速度 ,不用遍历 直接读取4*N
[完整的apk解压后的内容展示]
androidManifest.xml
assetsclass.dex
class2.dex
META_INF
res
resources.arsc
四.PMS安装过程(拷贝安装包 装载代码)
->点击app安装包(预设的Activity)
->弹出安装界面 (Packageinstalleractivit)
->接着显示安装APK信息(PackageinstallerSession-PMS)