1. 程式人生 > >Android Studio 2.2 apk逆向工具--APK Analyzer

Android Studio 2.2 apk逆向工具--APK Analyzer

APK解析器解析APK

Android Studio的APK解析器可以直接檢視打包完成的apk的組成。APK解析器可以減少除錯app內部的DEX檔案和資原始檔的時間,對減小APK的大小也有幫助。通過Android Studio的APK解析器,你可以完成如下功能:

---檢視apk中檔案的大小(如DEX檔案和Android的資原始檔)

---瞭解DEX檔案的組成

---快速檢視版本的檔案(例如AndroidMainfest.xml檔案)

---同時比較兩個apk

當開啟一個工程時,有三種開啟APK分析器的方式

---直接將一個apk拖動到Android Studio的編輯器視窗

---在Project視窗中選擇Project,然後雙擊build/output/apks/目錄下的apk

---在選單欄中選擇選擇Build > Analyze APK,然後選擇要分析的apk

重要:當分析建立的apk時,通過Build>Build APK或者gradle的命令來建立apk。點選工具欄中的Run將會開啟Instant Run,

注:開啟分析器的三種方式

1.在編輯視窗下


將一個apk拖到編輯器區域,如MainActivity所在的區域,從電腦的G盤把facebook拖動到該區域


出現解析出的內容並點選可以檢視相應的內容,如AndroidMainfest.xml檔案


2.選擇Project檢視


雙擊build/output/apks/目錄下的apk,然後出現APK解析器解析出的內容


3.工具欄中選擇Build>Analyze APK


選中所要解析的APK


出現解析器介面


檢視檔案和大小資訊

APK是zip格式的壓縮包。APK解析器按APK的檔案結構對資料夾和檔案進行對映,並且可以檢視每個資料夾和檔案。

APK解析器顯示了原始檔案的大小和下載檔案的大小。1.原始檔案的大小是未經解壓縮的檔案大小,而下載大小是傳送到Google Play時的壓縮後文件的大概大小。總下載大小的%是佔APK總的下載大小的百分比。


圖1:檔案解析器中檔案的大小

檢視AndroidMainfest.xml

如果你的專案包含多個AndroidMainfest.xml檔案(例如多渠道情況下)或者所依賴的libraries中也包含mainfest檔案,在生成的apk中這些mainfest檔案將會被合併到一個檔案中。mainfest檔案在APK中通常是二進位制檔案,但是在APK解析器中檢視時,這個XML檔案將被重建來顯示。檢視器允許你檢視建立過程中的所進行的任何改變。例如,你可以檢視專案所依賴的library中的AndroidMainfest.xml是如何被合併到最終的AndroidMainfest.xml檔案中的.

另外,可以在右上角檢視警告和錯誤。圖5為選中的mainfest檔案中所上報的一個錯誤。


圖5.所選擇的mainfest檔案中右上角有一個錯誤的圖示

檢視程式碼和資源

不同的apk建立方式會影響最終的APK中的檔案。例如,Proguard中配置檔案中刪除無效程式碼(Shrinking rules)生成的最終APK的程式碼會改變,某個渠道中的圖示資源也可能會被覆蓋。通過APK解析器檢視最終版本的apk中的檔案變得更加容易:點選一個實體(解析器中可以點選的任何一項)與其相關的內容將會在下方列出來,如可以預覽檔案的內容、圖片的內容。


圖2.圖片資源的預覽

圖片分析器也可以顯示不同的文字和二進位制檔案。例如,實體resources.arsc的檢視器可以檢視配置中的特定檔案,例如翻譯的String檔案。在圖3中,你可以看見所翻譯的每個String檔案。


圖3.翻譯的String檔案的預覽

檢視DEX檔案

APK解析器的DEX檔案檢視器可以直接檢視app中隱藏的DEX檔案。檢視器中可以檢視類、包、引用和宣告的總數量,對決定是否使用muli-DEX或者如何移除依賴以使DEX檔案在64k之下(64k DEX limit:https://developer.android.com/studio/build/multidex.html)是很有幫助的。

圖4描述了一個大小接近達到“DEX不超過64k”的限制的中型app。每個包、類、方法的數量都可以在Defined Method和Referenced Method的列裡檢視。Referenced Methods列展示了DEX檔案中所有引用的方法的數量。這些是在程式碼中、依賴的libraries、單獨的java和android包中定義的---這些被統計的方法的大小接近DEX檔案的大小限制64k。Defined Methods這列只顯示在DEX檔案中定義的方法,所以數量是Referenced Methods的子集(感覺好像說反了,還是我理解錯了)。需要注意的是當將APK中的依賴打包的時候,兩列的方法數量都會增加。也應該注意到,壓縮率和混淆檔案的刪除無用檔案(Proguard shrinking)都會在編譯原始碼時影響DEX檔案的內容。


圖4.使用了multi-dex的app

比較APK檔案

APK解析器可以比較兩個不同APK中的檔案。對於找到這個版本為什麼比上一個版本的apk的大小增加了的原因很有幫助。

在釋出新的APK之前,從APK解析器中加載出你所要釋出的APK的版本號。然後在APK解析視窗右上角點選Compare with.在彈出的視窗中,選擇上次釋出的最近一個版本的APK然後點選OK.如圖6所示是一個與上一個彈窗類似的小點的彈窗顯示的是可以進行對比的不同的檔案。

圖6顯示了一個app的正式版和測試版之前的不同。不同的建立方式導致不同的建立型別,從而導致實體的不同。


注:

選中所要釋出的apk,然後拖動到編輯區域,然後點選右上角的Compare With


然後彈出框中選擇最近一次釋出的版本的apk(也可以是任何需要比較的apk,我上一個版本的apk儲存在目錄E:\lastversion),然後點選OK


下面是可以對比的檔案,old size是以前的,New Size是現在的


原文地址:https://developer.android.com/studio/build/apk-analyzer.html