在《Android軟件安全與逆向分析》書中看到android apk的打包過程,覺得比較有意思,因此根據(jù)書中內(nèi)容整理了本篇文章。
1)將應(yīng)用源文件打包生成R.java文件,打包工具為aapt(位置為..\sdk\build-tools\android-4.4.2)渤弛。檢查AndroidManifest.xml的合法性,然后檢查res目錄下的資源子目錄內(nèi)資源文件名的合法性甚带、向資源表table添加條目她肯,編譯res和asert下的資源生成resource.arsc佳头,編譯生成R.java文件。并且對res目錄下的xml文件編譯辕宏。最后將所有的資源和resource.arsc文件畜晰,以及編譯過的xml文件打包壓縮為resources.ap_文件。
2)處理aidl(android interface definition language, android接口描述語言)文件生成java文件瑞筐。
3)編譯工程源代碼凄鼻,生成class文件。調(diào)用javac編譯src下的java源文件聚假,生成的class文件位于bin\class下块蚌。
4)將class文件轉(zhuǎn)換,生成classes.dex文件膘格,轉(zhuǎn)換工具為dx峭范。即將字節(jié)碼轉(zhuǎn)換為Dalvik字節(jié)碼,壓縮常量池瘪贱、消除冗余信息纱控。
5)通過apkbuilder打包生成apk文件。首先以resources.arsc文件為基礎(chǔ)生成apk菜秦,接著添加res和assert下的資源甜害,然后寫入依賴庫。
6)對apk文件進行簽名球昨,簽名之后才能在android設(shè)備上安裝尔店。簽名方式有兩種:使用debug.keystore在調(diào)試程序時進行簽名;還有打包發(fā)布時的簽名主慰,需要提供簽名文件嚣州。對于第二種情況打包發(fā)布時的簽名,可以使用JDK提供的jardesigner工具簽名共螺,也可以使用signapk進行簽名该肴。
7)對apk包進行對齊處理,工具為zipalign藐不。對齊處理即使得所有資源文件距離文件起始偏移為4字節(jié)的整數(shù)倍匀哄,這樣通過內(nèi)存映射訪問apk文件時處理速度更快。
本文內(nèi)容均來源于書籍:《Android軟件安全與逆向分析》
歡迎訪問我的博客:www.dzwanli.com.cn