一、所須要的工具
java
1)apktool,功能:反編譯出apk所須要的資源文件和佈局設置文件等,linux
下載地址:https://code.google.com/p/android-apktool/downloads/list
android
須要下載apktool1.5.2.tar.bz2 和apktool-install-Linux-r05-ibot.tar.bz2 這兩個文件,並把解壓後的文件放在同一個文件夾中。app
2)dex2jar,功能:反編譯出jar文件,即apk的源程序文件的字節碼,工具
下載地址:http://code.google.com/p/dex2jar/downloads/list佈局
3)jdgui,功能:查看dex2jar反編譯出的jar文件,使用該工具能夠看到字節碼對應的Java源代碼,這個我在官網上沒有找到,而後本身在網上下載的,但試驗過能用。點擊打開後,以下圖所示:ui
二、反編譯過程
1)反編譯出資源文件
使用apktool工具,進入apktool所在的目錄下,使用以下的命令:
./apktool d ./xxx.apk(apk所在的路徑)
google
d表示decode,在當前目錄下就會生成一個名爲xxx的目錄,裏面就是反編譯出來的各類資源文件,其中res表示資源文件,smali表示源代碼,不過是字節碼,不能直接查看。spa
以本人的實驗爲例子,以下圖所示:.net
此時會在當前目錄下生成一個目錄app-debug。
2)源代碼的反編譯
a)由於apk文件實際上是使用zip進行打包壓縮生成的文件,因此先把xxx.apk文件更名爲xxx.zip文件,並對其進行解壓。
b)進入解壓後的目錄,其中有一個classes.dex文件,這個文件就是java文件編譯再經過dx工具打包而成的,源代碼就包含在這個文件中。
c)把前一步生成的文件classes.dex複製到dex2jar工具的根目錄中,並使用以下命令對其進行反編譯:
./dex2jar.sh d classes.dex
就會在當前目錄下生成一個classes_dex2jar.jar文件
d)點擊打開jdgui工具,這是一個圖形化的工具,而後打開上上述的classes_dex2jar.jar文件就能夠看到apk對應的源代碼。
對於本人的實驗以下:
源代碼與反編譯出來的代碼比較以下(白色爲反編譯內容,黑色爲原內容):