對Android APK文件反編譯查看其源碼

  • 概述
    作爲android的開發者,相信你會有那麼一刻,比如,對於手機中某一款App,有一項功能或者效果你蠻喜歡的,想學習一下它具體是怎麼實現的。追求高一點的話,我想深究它這個App的項目架構,本着一探究竟的原則,我需要查看工程的源代碼。
  • 所需工具
    apktool:由apk獲得dex文件
    dex2jar:dex文件反編譯成java包
    jd-gui:查看jar文件的java源碼
  • 過程
    網上下載一個**.apk文件,解壓縮後可看到以下幾個目錄
    這裏寫圖片描述
    其中res裏的圖片我們可以拿來用,但是xml等資源文件是經過優化的,我們並不能直接查看,classes.dex是android系統直接運行在dalvik虛擬機上的文件,我們也不能直接查看到裏面的內容。
    目前有很多反編譯apk的工具,我選擇了APKTool,由google提供的反編譯以及回編譯apk,同時安裝反編譯系統apk所需要的framework-res框架,清理上次反編譯文件夾等功能的一款工具。需要java的支持。
    我是在http://ibotpeaches.github.io/Apktool/網站下載的,雖然有很多軟件站有下載,但很難找到最新的,我推薦大家以後下載軟件儘量到官方推薦的網址去下載,有時遇到什麼軟件操作使用問題,版本區別對待問題,官網上都會有一個很好的解釋。我下載的是目前最新版:apktool-2.0.2.jar(不過而2.x和1.x版本安裝是有區別),重命名爲apktool.jar,
    將這段文本 @echo off
    if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
    set PATH=%CD%;%PATH_BASE%;
    java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
    另存爲apktool.bat文件。將這兩個文件放至系統盤或者配置環境變量將文件路徑映射到path,這樣你在cmd裏運行apktool命令就能查看是否配置成功了!(該方式只適用於windows)
    下面我們cd到apk所在路徑並運行apktool d xx.apk命令,此時圖說話這裏寫圖片描述看看與解壓縮後的文件有啥不一樣的,現在你可以看到清單文件和res文件的具體內容了,不過我想看源文件呢,我點進smali文件夾,咦,好熟悉的包名,不過後面咋全是以.smali爲後綴的文件呀(關於smali大家可以自行百度,它是android字節碼的反彙編語言),我想看.java源碼啊(細心的你可能會去看smali文件內容,稍微瞭解語法你就能推測出源碼的大致內容)!好吧,我們還得依靠其它工具,網上工具比較少,沒有具體的官網,比如smali2java,這樣就能看到源碼呢,不過它有侷限性,對於數字型數據的是16進制的,可能還有其他弊端吧,我是用的另外一種方式。
    跳過上一個步驟,我們可直接對classes.dex文件進行反編譯,接下里我們使用dex2jar工具,大家可以去http://sourceforge.net/projects/dex2jar/下載,解壓dex2jar-2.0.zip,運行cmd進入d2j-dex2jar.bat所在目錄,輸入命令:d2j-dex2jar.bat XXX(XXX指的是你要反編譯的apk中的classes.dex文件所在路徑及名稱),命令完成後便會生成classes-dex2jar.jar文件(不同版本名字會有所差異),此時此刻,相信你對jar感到很熟悉,沒錯,對於java包,相信你可以查看了,用JD-JUI工具就可以直接打開並查看整個工程的源碼啦啦啦~~~
    這裏寫圖片描述
  • 總結
    其實吧,反編譯過程算是簡單,只不過看了網上其它的操作流程都是記錄的老版本的操作流程,也沒有具體的彙總,所以自己花了一些時間找資料,找來找去,還是官網靠譜。至此,我希望大家養成一個從官網上去查資料的好習慣,最新的是最好上手的。好吧,第一次寫博客,花的時間有點久,排版什麼的都不熟練,嗯,吾將上下而求索。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章