1、爲何須要對APK包進行反編譯java
公司原有的一個產品包括Android以及iOS兩個版本,Android的源碼不當心遺失了。可是當前這個產品又須要針對某個潛在客戶作一些定製化,重建Android項目看來是必由之路了--總不能再開發一遍吧 :)。還好當時發佈APK包的時候沒有對代碼作混淆,有救了!android
2、開發環境git
如下是我當前使用的開發環境:github
操做系統:Mac OS 10.8.4工具
Android開發環境:ADTui
因爲我使用的是Mac系統,接下來介紹的步驟部分都是Mac系統相關的。對於Windows或者Linux的反編譯步驟,你們能夠參照如下。(從個人觀點看,步驟仍是基本相同的)google
3、反編譯步驟操作系統
下面就直接列舉如下反編譯APK文件的詳細步驟及方法:
第一步:.net
在電腦中建立一個新的目錄並將待反編譯的APK文件放到該目錄中。 將APK文件把文件後綴從.apk改爲.zip,接下來將.zip文件解壓。在解壓出來的目錄中你能夠獲得classes.dex這個文件。到此爲止,你已經能夠看到一些圖形資源,可是xml文件以及java源代碼文件尚未。 因此,得繼續加油!code
第二步:
從如下連接下載dex2jar,並把下載下來執行文件拷貝到.zip文件的解壓目錄。 打開Terminal並切換到.zip的解壓目錄,在Terminal中輸入 ./d2j-dex2jar.sh classes.dex,按回車鍵後,在.zip解壓目錄會生成一個classes.dex.dex2jar文件。 接着經過如下連接下載Mac版的jdgui工具。下載完工具後雙擊改工具,運行工具後選擇打開文件以打開咱們剛生成的classes.dex.dex2jar.jar文件。經過在jd-gui中選中File->Save All Sources便可以將全部的class保存成java源代碼文件。 到此咱們已經獲得想要的Java源代碼了,可是解出來的XML文件仍是不可讀,還得繼續努力!
第三步:
再建立一個新的目錄,並在該目錄中執行如下操做:
一、將須要反編譯的.apk文件放到該目錄
二、下載apktool v1.x以及Mac版的apktool install mac到該目錄
三、下載framework-res.apk文件到該問路(並非全部的待反編譯的APK文件都須要framework-res.apk文件)
四、打開Terminal窗口
五、在Terminal中定位到該目錄並運行如下命令:./apktool if framework-res.apk
六、在Terminal中再輸入以下命令:./apktool d "myapkname".apk。 注:myapkname爲你須要轉換的apk包名稱
執行完命令後,在新目錄中找到新建立的 "myapkname" 目錄,在該目錄中你將獲得可讀的AndroidManifest.xml以及各類drawable資源。
第四步:
接下來就是將第二步以及第三步獲得的Java原文件、資源文件放到同一目錄,配置項目依賴jar包。。。
4、引用地址:
http://stackoverflow.com/questions/3593420/android-getting-source-code-from-an-apk-file
5、其餘參考文章:
Windows環境下Android反編譯詳解
http://blog.csdn.net/ithomer/article/details/6727581
6、參考資源下載鏈接:
dex2jar:
http://code.google.com/p/dex2jar/
jdgui:
http://java.decompiler.free.fr/?q=jdgui
android-apktool:
https://code.google.com/p/android-apktool/downloads/list
工具包集合: