一直在做Android應用開發,但對於從自己手中輸出的apk包,了解並不是很深。最近想研究一下,消除下自己的一些技術盲點。
好吧,廢話少說,先切入主題。這篇文章主要介紹如何獲取apk包中的dex文件,並簡單修改里面的源碼,再重新打包生成apk文件。
下面提供對HelloWorld.apk的解包,修改源碼,重新打包的過程。
1 需要用到的工具:
baksmali:把dex文件轉換成smali文件的工具(dex文件無法修改,要想修改源碼,必須把把dex文件轉換成smali文件)
smali:把smali文件轉換成為dex文件的工具(修改完smali文件,自然需要把它還原到最初的dex文件)
signapk.jar :對apk進行簽名(沒經過簽名的包最終會安裝失敗,提示“解析程序包出現問題”)
工具在文章最后會提供下載鏈接。
2操作步驟:
a 解壓apk文件,(把apk的后綴名改為zip,用普通的解壓工具即可,winrar或者7zip)
b 使用baksmali工具將classes.dex轉為smali文件,在cmd窗口輸入:java -jar baksmali-2.0.3.jar -x classes.dex
執行完后會生成out目錄,目錄結構跟源碼相同,在對應目錄下查找對應的smali文件。

如圖,找到"hello world"字符串,把它修改為"modify successful" ,ctrl+s保存后關閉文件。
c 使用smali-2.0.3.jar工具把smali文件轉為dex文件,cmd中輸入命令: java -jar smali-2.0.3.jar -o classes.dex out
執行完后會生成並替換掉根目錄下的classes.dex文件,這樣就修改成功了。
d 用生成的新的classes.dex文件替換掉原先HelloWorl.apk解壓出來的classes.dex文件,並用壓縮工具把這些文件壓縮為HelloWorld.zip,並把zip后綴改為apk。
此處試驗過壓縮成為HelloWorld.rar,然后改為apk是不可以的。因為在簽名階段會報錯。
此時的apk包無法正常安裝,提示解析程序包錯誤。(原因是只有簽名包才能正常安裝)
e 使用簽名工具對apk進行簽名,把apk拷貝到資源根目錄下的sign_tool目錄,cmd中輸入命令:
java -jar signapk.jar platform.x509.pem platform.pk8 HelloWorld.apk Signed.apk
執行完后會在該目錄下生成Signed.apk文件,這個文件就是最終的文件了
安裝后試驗成功,HelloWorld字符串已被成功替換。因為我們只是做簡單的修改,所以很容易。假如對大程序做比較復雜的修改,那就沒那么容易了。大家有興趣的可以嘗試下,也可以研究下smali的語法。
工具鏈接如下:
http://download.csdn.net/detail/cwx01perfect/9268253
