最近在做APK安装包缩减工作,所以对APK整个打包过程进行了解下。
我们知道APK安装包中包含我们编写的java文件,图片资源, xml文件, AIDL文件等,那么APK打包过程是怎样将这些文件聚合在一起最后安装到用户的手机上面。
整个打包过程具体可以分成如下几个步骤:
一. 资源R文件通过aapt打包成resource.ap_ 和 R.java
二. 将R.java, java 源码, 接口, aidl通过java编译生成.class 文件
三. 将生成的.class文件和第三方库文件通过dex生成android虚拟机运行的.dex文件
四. 将生成的dex文件和apk中的资源文件和系统的资源文件通过apkBuilder生成apk文件
五. 将生成后的apk文件通过通过jarsigner生成带有签名的apk文件
六. 将生成的带有签名的apk文件通过zipalign进行一次压缩和位操作最终生成apk文件
具体的打包过程如下图所示:
第一步:aapt 打包资源文件生成resource.cp_ 和 R.java
这里的资源文件主要包括apk中图片,xml等资源文件,排除assets 和res/raw下面的文件,因为这两个目录下面的文件是原封不动的打包到apk中,这个过程中xml文件会进行简单的加密,图片资源会进行压缩,然后生成R.java
第二步: javac 将R.java 源码 AIDL生成的java文件打包生成.class文件,这个过程中如果配置了混淆,也将在这个过程执行,最后生成.class文件。
第三步: 将生成的.class和第三方库文件通过dex统一生成Android虚拟机执行的dex文件。
第四部: 将.dex文件 resource.ap_和系统资源通过apkBuilder生成apk文件,这个时候整个apk生成工作就完成了,但是apk还没有签名和优化。
第五步:通过jarsigner 将配置的签名信息打包到apk文件中,生成具有签名的apk文件。
第六步:优化apk文件,将apk文件进行zipalign偏移4字节的整数倍,这个操作主要是提高内存映射的访问速度。