我們知道手機下載的應(yīng)用都是apk格式的,那么你知道它生成的過程嗎蔬将?
1.使用aapt/aapt2編譯資源文件生成resource.arsc和R.java
aapt:aapt是Android Asset Packaging Tool的縮寫,是編譯和打包資源的工具嚼摩。
aapt2:aapt2是在aapt上做了優(yōu)化解恰;
aapt是將所有資源進行merge纳胧,merge完后將所有資源進行編譯霉撵,產(chǎn)生一個資源ap_文件磺浙,該文件是一個壓縮包,這樣帶來的后果就是即使只改變了一個資源文件徒坡,也要進行全量編譯撕氧。而aapt2是將原先資源編譯打包過程拆分成了兩部分,即編譯和鏈接:
編譯:將資源文件編譯為二進制格式文件
鏈接:將編譯后的所有文件合并喇完,打包成一個單獨文件
這種方式可以很好的提升資源的編譯性能伦泥,比如只有一個資源文件發(fā)生改變時,你只需要重新編譯改變的文件锦溪,然后將其與其他未改變的資源進行鏈接即可奄喂。
2.使用AIDL處理aidl文件,生成java文件
這個沒什么好說的海洼,AIDL文件最終還是要轉(zhuǎn)換為java文件。
3.使用javac編譯java文件富腊,生成class文件
javac:是java語言編程編譯器坏逢。全稱java compiler。javac工具讀由java語言編寫的類和接口的定義,并將它們編譯成字節(jié)代碼的class文件是整。
4.使用DX/D8/R8處理class文件肖揣,生成最終需要的dex文件
dx工具把所有的.class文件轉(zhuǎn)換成.dex文件,dx工具的主要工作是將Java字節(jié)碼轉(zhuǎn)成成Dalvik字節(jié)碼浮入、壓縮常量池龙优、消除冗余信息等
5.apkbuilder工具把所有沒有編譯的資源文件,如image等事秀、編譯過的資源文件彤断、.dex文件打包成.apk文件
6.對apk文件進行簽名
7.正式版通過zipalign對簽名后的文件進行對齊處理。目的是通過內(nèi)存隱射訪問apk文件時的速度會更快易迹,對齊的作用是減少運行時內(nèi)存的使用
參考:
https://blog.csdn.net/huangyuan_xuan/article/details/109732513
https://blog.csdn.net/qq_43278826/article/details/86543932