1、编译资源文件
通过aapt(Android Asset Packaging Toos)工具对资源文件进行编译和打包。aapt会解析资源、为资源编制索引和编译为针对Android平台优化过的二进制文件,其中res/raw文件夹和assets文件夹下的文件还有图片资源不进行编译。编译后会生成R.java和resources.arsc文件,R为资源索引,arsc为资源映射表。
2、aidl文件处理
项目中如果存在aidl的话,会对aidl文件进行处理,生成对应的java文件。
3、编译工程源代码,生成class文件
调用javac编译src目录下的所有java文件,生成对应的.class文件。
4、转换class文件,生成classes.dex文件
使用SDK的dx工具,把class文件转换成dalvik虚拟机可以执行的dex文件。
5、生成apk文件
通过apkbuilder工具,把上面编译好资源文件、dex文件、lib文件打包成apk文件
6、生成签名后的apk文件
使用jarsigner工具,对上面的apk文件进行签名。
7、对apk文件进行字节对齐
使用zipalign对apk中的未压缩文件进行字节对齐,可以通过mmap直接访问这些文件,减少应用的内存使用。
mmap(memory mapping)主要好处是:1. 将文件映射到内存中,相比较文件读写有较高的性能。 2. 实现跨进程数据访问
参考:
https://blog.csdn.net/jason0539/article/details/44917745
https://developer.android.google.cn/studio/command-line/zipalign.html