Android開發學習總結(六)—— APK反編譯

  學習和開發Android應用有一段時間了,今天寫一篇博客總結一下Android的apk文件反編譯。咱們知道,Android應用開發完成以後,咱們最終都會將應用打包成一個apk文件,而後讓用戶經過手機或者平板電腦下載下來進行安裝。正常狀況下,Android應用打包成apk以後,就沒法再看到開發這個應用時使用的資源文件以及代碼了。可是咱們經過網上提供了一些工具,仍是能夠將apk進行反編譯的,apk反編譯以後,咱們就能夠看到開發這個應用使用的資源文件(圖片)、layout、樣式、相關的實現代碼等,apk反編譯也算是Android開發中一個比較實用的技巧吧,當咱們對別人開發好的應用感興趣時,咱們就能夠經過這種技術手段將別人打包好的apk進行反編譯,繼而能夠看到咱們感興趣的內容,(注:反編譯不是讓各位開發者去對一個應用破解搞重裝什麼的,主要目的是爲了促進開發者學習,借鑑好的代碼,提高自我開發水平。)下面就來講說如何將一個apk反編譯出來。java

1、準備必要工具

  工欲善其事,必先利其器,首先咱們要下載好反編譯apk時須要的相關工具windows

1.一、使用工具

  1. apktool (資源文件獲取) 
  2. dex2jar(源碼文件獲取)
  3. jd-gui  (源碼查看)

1.二、工具介紹

  apktool  編輯器

         做用:資源文件獲取,能夠提取出圖片文件和佈局文件進行使用查看工具

  dex2jar佈局

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

  jd-gui測試

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

1.3工具下載

  apktool下載地址:https://bitbucket.org/iBotPeaches/apktool/downloadsui

  

  下載好以後獲得一個以下圖所示的jar文件spa

  

  dex2jar下載地址:http://sourceforge.net/projects/dex2jar/files/

  

  

  下載完成以後,獲得一個以下圖所示的壓縮包

  

  jd-gui下載地址:http://jd.benow.ca/

  

  下載完成以後,獲得一個以下圖所示的壓縮包:

  

  到此,須要使用到的3個相關工具都下載好了,在這裏說明一下jd-gui的下載,我從官方網站上點擊下載時會常常出現以下圖所示的問題

  

  可是多試幾回又能夠下載了,因此若是有遇到這個問題的朋友們不妨多試幾回,或者從別的地方下載jd-gui,jd-gui算是作Java開發的一個必備工具了,用它來將class反編譯成java源代碼是很是方便的,網上搜索一下通常均可如下載到,只不過版本不必定是最新的。

2、Apk反編譯流程

  爲了方便進行反編譯,咱們將上述下載好的3個工具統一放到一個文件夾中,例如:

  

  而後將【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分別解壓到當前文件夾,以下圖所示:

  

2.一、使用apktool反編譯apk獲得圖片、XML配置、語言資源等文件

  進入CMD命令行,以下:

  

  切換到上述的3個工具的所在目錄,如:E:\AndroidDevelopTool\Android反編譯工具包

  

  接下來咱們要作的就是運行apktool_2.0.1.jar這個jar文件來將apk文件進行反編譯,在java中,運行可執行jar包的命令是:

java -jar jar包名.jar

  使用以下的命令運行apktool_2.0.1.jar反編譯MMTS-release-1.0.2.apk

java -jar apktool_2.0.1.jar d -f E:\AndroidDevelopTool\Android反編譯工具包\測試apk\MMTS-release-1.0.2.apk -o MMTS

  這個命令是啓動apktool_2.0.1.jar將位於【E:\AndroidDevelopTool\Android反編譯工具包\測試apk\】目錄下的"MMTS-release-1.0.2.apk"這個apk反編譯,而後將反編譯生成的文件存放到當前目錄(apktool_2.0.1.jar所在的目錄,也就是"E:\AndroidDevelopTool\Android反編譯工具包"目錄)下的一個【MMTS】文件夾中。這個文件夾的名字是能夠隨便取的,喜歡叫啥都行。

  執行反編譯操做:

  

  反編譯成功後,會在當前目錄(E:\AndroidDevelopTool\Android反編譯工具包)下生成一個MMTS文件夾,打開MMTS裏面就有反編譯後生成的文件,以下圖所示:

  

  打開MMTS文件夾,就能夠看到反編譯後的生成的文件,以下圖所示:

  

  生成的文件和文件夾當中,咱們關心的是【res】文件夾中和AndroidManifest.xml文件,打開res文件夾,裏面就有咱們想要看到的東西了,以下圖所示:

  

  

  

  

  想查看哪一個xml文件就使用文本編輯器打開看看吧,反正所有均可以看到了。以上就是使用apktool這個工具將一個apk反編譯獲得圖片、XML配置、語言資源等文件的過程。

2.二、使用dex2jar反編譯apk獲得Java源代碼

  將要反編譯的APK後綴名改成.rar或者 .zip,並解壓,獲得其中的classes.dex文件(它就是java文件編譯再經過dx工具打包而成的),以下圖所示:

  

  將獲取到的classes.dex放到以前解壓出來的工具【dex2jar-2.0】文件夾內,以下圖所示:

  

  在命令行下定位到dex2jar.bat所在目錄,輸入"d2j-dex2jar classes.dex",效果以下:

  

  命令執行完成以後,在當前目錄下就能夠看到生成的Jar文件了,以下圖所示:

  

  反編譯classes.dex獲得classes-dex2jar.jar文件以後,就可使用【jd-gui】工具將class文件反編譯成java源代碼了

  

  使用jd-gui打開classes-dex2jar.jar就能夠看到源代碼了,以下圖所示:

  

  JD-GUI雖然能夠將class反編譯成java源代碼,可是對於一些被混淆過的class,反編譯的效果就不是那麼理想了,被混淆過的class反編譯後的效果圖(類文件名稱以及裏面的方法名稱都會以a,b,c....之類的樣式命名):

  

  以上步驟是我親自實踐過以後一步步整理出來的,對照着作應該不會有太大問題。

3、Apk反編譯註意問題

3.一、apktool版本太舊致使反編譯失敗的問題

  以前用過了apktool這個工具的一些舊版本,發現老是反編譯不成功,在執行反編譯時會出現以下錯誤:

  Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file

  

  這個問題是由於apktool版本太低致使,而解決這個問題的辦法就是使用最新版本的apktool就能夠了,最新版本的下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads

3.二、apktool執行反編譯命令出現」Input file was not found or was not readable"的問題

  這個問題是由於apktool升級到2.0以上時,使用方式已經替換,格式爲:apktool d [-s] -f <apkPath> -o <folderPath>

  好了,關於反編譯apk的內容就這麼多了。
  最後,給你們分享我下載好的那三個相關工具,下載地址:http://pan.baidu.com/s/1jGKSQyU

相關文章
相關標籤/搜索