如何使用APK 分析器分析你的APK

文章推薦指數: 80 %
投票人數:10人

APK 分析器是Android Studio 自帶的一個APK 分析工具,你可以使用它分析APK 的組成詳情。

APK 分析器在我們開發當中最常見的使用場景是定位APK 組成 ... MdEditor 如何使用APK分析器分析你的APK 語言:CN/TW/HK 時間 2020-07-2920:15:27 Rickon 主題: AndroidStudio APK分析器是AndroidStudio自帶的一個APK分析工具,你可以使用它分析APK的組成詳情。

APK分析器在我們開發當中最常見的使用場景是定位APK組成情況從而減小APK的大小。

除此之外,還可以使用它減少除錯應用的DEX檔案和資源相關問題所用的時間。

下面結合我的使用實踐介紹一下APK分析器的功能和使用方法。

一行配置導致APK變大7倍 前不久,我開發新專案藍芽音樂的過程中,編譯APK完成後突然發現只有一個介面的藍芽音樂APK包竟然有9M。

嚇得我直接開啟build/output/apks/,雙擊APK,開啟APK分析器介面如下。

我發現異常檔案classes2.dex和classes3.dex,可以看到dex檔案下全都是AndroidSDK的內容,WTF?為什麼這些內容會被打包進APK?莫非我build.gradle配置有問題?於是我又仔細檢查了一下build.gradle內容,果然發現了罪魁禍首。

我在已經將framework.jar加入僅編譯的情況下,沒有刪除開頭的這一句配置,導致framework.jar包被打包進APK。

我熟練地刪除這一行,然後迅速進行了sync、CleanProject、BuildAPK這一連環操作。

稍等一會,會看到AndroidStudio貼心的提醒。

點選analyze,我看到了APK終於回到了正常大小:1.3M! 介紹一下APK的這幾個部分: classes.dex:Java檔案編譯生成的可執行檔案,用於在Dalvik虛擬機器上執行。

res資料夾:資原始檔 resources.arsc:Android編譯後生成的產物,主要是用來建立資源對映關係 AndroidManifest.xml:資源清單檔案 META-INF:簡單說就是一個配置檔案 檢視檔案和大小資訊 在上面的圖中,可以看到:APK分析器會顯示每個實體的原始檔案大小和下載檔案大小值,如圖1所示。

RawFileSize表示實體在磁碟上未經壓縮時的大小,而DownloadSize則表示實體由GooglePlay提供時的壓縮後大小的估計值。

%ofTotalDownloadSize表示實體佔APK總下載大小的百分比。

我的APK並沒有經過GooglePlay壓縮,所以兩個SIZE看起來差不多大。

開啟res/drawable你能看到每個圖片資源佔據的大小,如果你發現有些圖尺寸太大,則可以考慮對其進行優化:比如將png資源換成SVG向量圖或者webp。

檢視DEX檔案 DEX檔案檢視器中提供了類、軟體包、總引用和宣告計數,這有助於決定是否使用MultiDex或如何移除依賴項以避免超出64KDEX限制。

所謂64KDEX限制大致介紹一下,就是單個DEX檔案可被引用的方法總數被限制為65536,如果超過這個數,就會無法編譯。

DefinedMethods和ReferencedMethods列中列出了DEX檔案中每個軟體包、類和方法的相關計數。

ReferencedMethods列會統計DEX檔案引用的所有方法。

這通常包括程式碼和依賴項庫中定義的方法,以及在程式碼使用的標準Java和Android軟體包中定義的方法-這些方法計入每個DEX檔案中的64k方法限制。

DefinedMethods列僅統計在某一個DEX檔案中定義的方法,所以此數字是ReferencedMethods的子集。

請注意,如果將某個依賴項打包在APK中,這兩個方法計數都會加上在該依賴項中定義的方法。

比較兩個APK 這個功能可以讓你比較直觀的看到某個APK變大或者變小了,從而方便進行進一步的優化。

選擇上圖中右上角的CompareWithpreviousAPK 可以看到,我這次實踐中apk的減小完全來自dex的縮小。

總結 APK分析器可以幫助你完成以下操作: 檢視APK中的檔案(如DEX和Android資原始檔)的絕對大小和相對大小。

瞭解DEX檔案的組成。

檢視APK中的檔案(如AndroidManifest.xml檔案)。

對兩個APK進行並排比較。

參考資料: developer.android.com/studio/buil… medium.com/androiddeve… 「其他文章」 如何使用APK分析器分析你的APK 「AndroidStudio」 Flutter開發技巧:AndroidStudio快速生成Dart檔案 AndroidStudio實現學生資訊管理系統,基礎入門專案 如何基於ZEGOSDK實現Android一對一音影片聊天應用 藉助MaterialYou動態配色豐富您的應用 歡迎體驗|Android13開發者預覽版2 okhttp檔案上傳失敗,居然是AndroidStudio背鍋?太難了~ 超簡單整合HMSMLKit實現最大臉微笑抓拍 androidstudio程式碼爆紅 HMSCore挑戰賽故事:鞋、街景、手辦、玩具,原來這些都可以3D建模 macJava多版本切換和AndroidStudio新版必須支援Java11



請為這篇文章評分?