有時候使用apktool反編譯apk修改Smali文件之后再進(jìn)行build會出現(xiàn)錯誤,這種情況下可以換一個更高版本的apktool試試。一個強(qiáng)大的apk文件編輯工具。執(zhí)行成功后你會發(fā)現(xiàn)tools目錄下多了一個classout文件夾,里面就是smali類型的文件,里面是反編譯出的代碼,但是不是java代碼,還是能看出變量和方法的。
smali/baksmali使用方法如下:
首先把baksmali-1.3.2.jar和smali-1.3.2.jar文件放到android sdk安裝路徑下的tools里面,把a(bǔ)pk文件改成rar文件,解壓后取出classes.dex文件,也放入tools里面,然后用命令行,cd tools目錄下,
java -jar baksmali-1.3.2.jar -o classout/ classes.dex
下免就可以使用java命令,tools目錄下多了一個classout文件夾,里面就是smali類型的文件,里面是反編譯出的代碼,但是不是java代碼,還是能看出變量和方法的,
用jd_gui來看反編譯出的Java代碼,這樣便于尋找自己想要改的東西,找到后可以到baksmali classout下去修改相應(yīng)的地方。然后是利用smali編譯回去:
命令如下:java -jar smali-1.3.2.jar classout/ -o classes.dex
把classout下編譯成classes.dex然后把classes.dex放回apk下覆蓋原來的classes.dex文件。
詳細(xì)圖文教程:
遇到比較高級的apk文件可以選擇使用baksmali+smali來進(jìn)行apk的修改及重新打包。
1.首先解壓apk文件,獲得classes.dex文件
2.使用baksmali反編譯classes.dex
命令為: java -jar baksmali.jar -o classout/ classes.dex
3.反編譯的smali文件存在./classout之中。&
4.此時對classout目錄下的smali文件就可以進(jìn)行修改了
修改過之后需要使用smali.jar將smali目錄重新編譯為classes.dex
5.使用壓縮工具將新生成的classes.dex塞入apk包替換原有的classes.dex
這里需要說明的就是使用baksmali.jar反編譯的生成的smali文件使用的是baksmali語法,和apktool反編譯生成的smali語法有些許的區(qū)別。
6.替換apk包中的classes.dex文件之后,需要對apk重新簽名才能安裝