| 
 相信很多開發者都知道反編譯APK,正常情況下,如果我們想要看看xml,看看java原始程式碼,是看不了的。用壓縮工具解壓apk得到的檔也都是二進位檔案,打開後全是亂碼。    開發者能夠用的也僅僅是圖片資源,這往往也滿足不了開發者的需求。    下面我就給大家詳細講解一下Android-apk的反編譯步驟:    注意:反編譯的前提是:開發者沒有使用proguard(java代碼混淆的工具)。    1.下載反編譯工具    需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot    dex2jar:將apk中的classes.dex轉化成Jar文件。    JD-GUI:反編譯工具,可以直接查看Jar包的原始程式碼。    apktool:反編譯工具,通過反編譯APK中XML檔,直接可以查看。    apktool-install-windows-r05-ibot:輔助windows批次處理工具。    下載地址:    工具截圖:     2.解壓縮APK包    apk檔也是一種常見的zip,常用的壓縮軟體就可輕鬆地解壓apk檔。用壓縮軟體將apk檔中的檔解壓到一個資料夾中,得到APK中的資源包括 XML檔和classes.dex文件,classes.dex就是java檔編譯再通過dx工具打包而成的。    解壓截圖:    3.反編譯dex檔    解壓apk檔後,你會發現res目錄的圖片沒有加密,但java源碼編譯成了一個classes.dex檔,無法用普通的反編譯class檔的方法來處理,dex2jar可以將dex檔轉換成普通的jar包。    解壓下載的dex2jar,把解壓後的資料夾放到系統磁片跟目錄中並把這個目錄加到系統path變數中,就可以直接用:dex2jar.bat或dex2jar.sh轉換dex檔了。    DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex檔所在的路徑)。    將在同目錄得到普通jar包:classes_dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。    編譯截圖:   生成jar文件的截圖如下:    4.反編譯jar包    得到jar包後,下載自已喜歡的反編譯工具,推薦使用JD-GUI,有比較簡單的圖形介面,可以反編譯單個class檔,也可以反編譯jar包,比較方便。    打開壓縮檔JD-GUI,運行jd-gui.exe,打開上面生成的jar包,即可看到原始程式碼了。    截圖如下:    5.反編譯xml檔    打開解壓的res\layout目錄,有很多xml檔,如果你想看下作者是如何設計介面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要用到的是apktool。    具體操作方法:將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個資料夾下,這個資料夾有三 個檔:aapt.exe,apktool.bat,apktool.jar。把這個資料夾也放到系統磁片的根目錄中並把這個目錄加到path變數中。以 HelloWord.apk為例:    在DOS命令列中輸入:apktool d xx\HelloWord.apk HelloWord得到HelloWord資料夾,此資料夾中的xml檔就是編譯好的可以正常查看的檔。    截圖如下:   生成的檔:  這樣就得到了可以得到編譯的源碼和XML資源。  注意:文件的路径中最好不要出现中文!         apk 還原成java source code 學習最好的方式就是模仿和實踐, 在我們對Android App的開發還不是很熟練的話, 借鑒和學習別人的程式寫法, 可以幫助我們快速地學習, 有條理的進行系統理論、框架...等的學習也是必要的. 
 
下面的範例是把 apk 還原成 java source code, 文中所提供的方式僅僅只是為了學習之便,並無其它意圖. 
 
apk 檔解開後的source code 如下: 說明: 左邊是 jad 把 class 轉成 javasource code, 右邊是我們實際的 source code, 原本寫了5行, java 優化後變成3行指令就解決. 
 
 
前置工作, 要先下載3個檔案: 
以下是我的操作步驟: 
=============================
 Step 1:
解開 apk.  我是用 7z  把 apk  直接當作 zip  檔解開即可.
 Step 2:
透過  AXMLPrinter2.jar把 XML  檔案還原.  說明: AndroidManifest.xml 可以還原, 沒有錯誤訊息, 但我試了 layout 裡的 xml, 卻失敗, 只還原了第1行.   
Ex: 
java -jar ..\AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
   Step 3: 說明: d:\deApk\KgConverter\classes.dex  被還原為 d:\deApk\KgConverter\classes_dex2jar.jar,  直接透過 7z  就可以再把這一個 jar  檔解開,  就可以看到 .class  的檔案.
 Ex:
C:\deApk\dex2jar-0.0.9.13\dex2jar.bat classes.dex
 Step 4:
透過jad把 compiler  過的 .class  還原為 javasource code.   
Ex:
 C:\deApk\dex2jar-0.0.9.13\dex2jar.batclasses.dex  
 |