Android APK反編譯就這麼簡單 具體解釋

在學習Android開發的過程你。你每每會去借鑑別人的應用是怎麼開發的,那些美麗的動畫和精緻的佈局可能會讓你愛不釋手,做爲一個開發人員。你可能會很是想知道這些效果界面是怎麼去實現的,這時,你便可以對改應用的APK進行反編譯查看。如下是我參考了一些文章後簡單的教程具體解釋。java

(注:反編譯不是讓各位開發人員去對一個應用破解搞重裝什麼的,主要目的是爲了促進開發人員學習,借鑑好的代碼。提高自我開發水平。)android


測試環境:工具

        win 7 佈局


使用工具:學習

     CSDN上下載地址:動畫

       apktool (資源文件獲取  下載  ui

       dex2jar(源代碼文件獲取) 下載google

       jd-gui  (源代碼查看) 下載spa

 

       Android反編譯整合工具包(最新) 下載.net

 

     官方最新版本號下載地址:

       apktool(google code)

  dex2jar(google code)  

   jd-gui(google code)最新版請見官方


工具介紹:

apktool  

     做用:資源文件獲取,可以提取出圖片文件和佈局文件進行使用查看

dex2jar

     做用:將apk反編譯成java源代碼(classes.dex轉化成jar文件)

jd-gui

     做用:查看APK中classes.dex轉化成出的jar文件,即源代碼文件


反編譯流程:

1、apk反編譯獲得程序的源碼、圖片、XML配置、語言資源等文件

下載上述工具中的apktool,解壓獲得3個文件:aapt.exeapktool.batapktool.jar 。將需要反編譯的APK文件放到該文件夾下。

打開命令行界面(執行-CMD) 。定位到apktool目錄,輸入下面命令:apktool.bat d -f  test.apk  test    


(命令中test.apk指的是要反編譯的APK文件全名。test爲反編譯後資源文件存放的文件夾名稱,即爲:apktool.bat   d  -f    [apk文件 ]   [輸出目錄]

說明獲取成功。以後發現在目錄下多了個test文件,點擊便可以查看該應用的所有資源文件了。

假設你想將反編譯完的文件又一次打包成apk,那你可以:輸入apktool.bat   b    test(你編譯出來目錄)即可。效果例如如下:


以後在以前的test文件下便可以發現多了2個目錄:

build

dist(裏面存放着打包出來的APK文件)


2、Apk反編譯獲得Java源碼

下載上述工具中的dex2jarjd-gui ,解壓

將要反編譯的APK後綴名改成.rar或則 .zip。並解壓,獲得當中的額classes.dex文件(它就是java文件編譯再經過dx工具打包而成的)。將獲取到的classes.dex放到以前解壓出來的工具dex2jar-0.0.9.15 目錄內。

在命令行下定位到dex2jar.bat所在文件夾,輸入dex2jar.bat   classes.dex效果例如如下:

在改文件夾下會生成一個classes_dex2jar.jar的文件,而後打開工具jd-gui文件夾裏的jd-gui.exe,以後用該工具打開以前生成的classes_dex2jar.jar文件,便可以看到源代碼了。效果例如如下:

被混淆過的效果圖(類文件名以及裏面的方法名稱都會以a,b,c....之類的樣式命名):



3、 圖形化反編譯apk(本人未使用過)

上述步驟1、二講述了命令行反編譯apk。現在提供一種圖形化反編譯工具:Androidfby

首先。下載上述反編譯工具包,打開Androidfby文件夾,雙擊Android反編譯工具.exe,就可以瀏覽打開要反編譯的apk


經過反編譯。你可以獲知該應用用到了什麼第3方的庫文件。它的代碼是怎樣編寫的等等。

然而,假設該APK進行了混淆處理,那麼你看到的類文件名以及裏面的方法名稱都會以a,b,c....之類的樣式命名,因此你可以想找到你所想得知的界面代碼可能會十分費勁。找到了代碼可能看起來也會很是費勁,可是一個大致的思路會得到。有了這個思路,你就可以本身去嘗試了。

本人之前想寫一個相似唱吧的名人界面佈局。可是當初第一次接觸不知道怎樣去寫。進進行了反編譯。即便他的那個代碼是混淆過的,我也看出來他是經過LISTVIEW的TYPE設定不一樣的ITEM佈局實現了。可能好多引用都是採用重寫VIEW來實現效果,你可以獲得他的大致思路對你的開發故意無害。


還有處於一個開發人員辛辛苦苦將本身的應用開發出來被別人一反編譯便成爲了他本身的東西,因此要進行混淆處理:

下面是我轉載的混淆的教程:http://blog.csdn.net/vipzjyno1/article/details/21042823

相關文章
相關標籤/搜索