我们知道手机下载的应用都是apk格式的,那么你知道它生成的过程吗?
1.使用aapt/aapt2编译资源文件生成resource.arsc和R.java
aapt:aapt是Android Asset Packaging Tool的缩写,是编译和打包资源的工具。
aapt2:aapt2是在aapt上做了优化;
aapt是将所有资源进行merge,merge完后将所有资源进行编译,产生一个资源ap_文件,该文件是一个压缩包,这样带来的后果就是即使只改变了一个资源文件,也要进行全量编译。而aapt2是将原先资源编译打包过程拆分成了两部分,即编译和链接:
编译:将资源文件编译为二进制格式文件
链接:将编译后的所有文件合并,打包成一个单独文件
这种方式可以很好的提升资源的编译性能,比如只有一个资源文件发生改变时,你只需要重新编译改变的文件,然后将其与其他未改变的资源进行链接即可。
2.使用AIDL处理aidl文件,生成java文件
这个没什么好说的,AIDL文件最终还是要转换为java文件。
3.使用javac编译java文件,生成class文件
javac:是java语言编程编译器。全称java compiler。javac工具读由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件。
4.使用DX/D8/R8处理class文件,生成最终需要的dex文件
dx工具把所有的.class文件转换成.dex文件,dx工具的主要工作是将Java字节码转成成Dalvik字节码、压缩常量池、消除冗余信息等
5.apkbuilder工具把所有没有编译的资源文件,如image等、编译过的资源文件、.dex文件打包成.apk文件
6.对apk文件进行签名
7.正式版通过zipalign对签名后的文件进行对齐处理。目的是通过内存隐射访问apk文件时的速度会更快,对齐的作用是减少运行时内存的使用
参考:
https://blog.csdn.net/huangyuan_xuan/article/details/109732513
https://blog.csdn.net/qq_43278826/article/details/86543932