Apk打包流程
1.aapt阶段:aapt工具编译res资源文件,把大部分xml文件编译成二进制文件(图片文件除外),同时生成R.Java文件和resources.arsc文件,里面保存了资源的ID和在APK中的路径。
2.aidl阶段:如果项目中有使用AIDL,那么就会把.aidl文件编译成.java文件。
3.javaCompiler阶段:将所有.java文件(包括R文件和AIDL生成的.java文件),通过javac工具生成class文件。
4.dex阶段:将生成的.class文件和第三方库的.class文件通过dx工具生成classes.dex文件(如果有分包,那么可能有多个)。
5.apkBuilder阶段:aapt阶段中的资源文件、dex文件和第三方的非java资源包(.so),通过apkbuilder工具生成未签名的apk包。
6.jarSigner阶段:签名,jarsigner工具,如果是debug模式用默认签名,release模式用开发者的签名。
7.zipAligin阶段:对齐,通过zipalign工具对apk中的未压缩资源(图片、视频)进行“对齐操作”,让资源按4字节的边界进行对齐,使得资源访问速度更快
Apk安装
Adroid的应用安装涉及到如下几个目录:
- /data/app:存放用户安装的APK的目录,安装时,把APK拷贝于此。
- /data/data:应用安装完成后,在/data/data目录下自动生成和APK包名(packagename)一样的文件夹,用于存放应用程序的数据。
- /data/dalvik-cache:存放APK的odex文件,便于应用启动时直接执行。
具体安装过程如下:
- 复制APK安装包到/data/app下,然后校验APK的签名是否正确,检查APK的结构是否正常,进而解压并且校验APK中的dex文件。
- 确定dex文件没有被损坏后,再把dex优化成odex,使得应用程序启动时间加快。
- 同时在/data/data目录下建立于APK包名相同的文件夹,如果APK中有lib库,系统会判断这些so库的名字,查看是否以lib开头,是否以.so结尾,再根据CPU的架构解压对应的so库到/data/data/packagename/lib下。
Ref:
Android APK文件结构 完整打包编译的流程 APK安装过程 详解
(备注:这篇是摘了ref引用到的文章的一些知识点,仅起到做个简单笔记的作用。)