apk瘦身的意義我就很少說了,首先讓咱們瞭解一個apk的組成部分,說簡單點,一個apk文件就是包含一些文件的壓縮包。做爲開發者,咱們經過使用 unzip
命令解壓這個apk文件一探apk的內部結構。下面的文件結構就是咱們使用 unzip <your_apk_name>.apk
1這個命令所得到的:java
瞭解完apk的組成部分後,apk瘦身咱們大體能夠從這幾方面下手: 1 減小java代碼 2 減小資源文件 3 減小native_code編程
因此咱們得養成良好的編程習慣,刪除沒必要要的代碼和重複無用的一些資源文件,好比圖片,xml等。儘量重用一些資源。可是若是咱們是接手別人項目或者以前習慣很差,而致使太過臃腫等問題,這時候咱們能夠藉助一些工具。工具
Proguard 是一個很強悍的工具,它能夠幫你在代碼編譯時對代碼進行混淆,優化和壓縮。它有一個專門用來減小apk文件大小的功能叫作 tree-shaking。Proguard 會遍歷你的全部代碼而後找出無用處的代碼。全部這些不可達(或者不須要)的代碼都會在生成最終的apk文件以前被清除掉。Proguard 也會重命名你的類屬性,類和接口,然整個代碼儘量地保持輕量級水平。gradle
也許如今你會認爲 Proguard 是一個至關有效地工具。可是能力越大,責任也就越大。如今許多開發這認爲Proguard有點讓人不省心,由於它會重度依賴反射。哪些類或者屬性須要被處理或者不能處理都要開發者對 Proguard 進行配置。優化
Proguard 只會對 Java 代碼起做用,那麼對哪些資源文件呢?好比一張圖片 my_image
在 res/drawable
文件夾中,沒有被使用,Proguard 只會移除掉 R
類中的引用,可是圖片依然還在文件夾中。spa
Lint 一個靜態的代碼分析器,你只需經過調用 ./gradlew lint
這個簡單地命令它就能幫你檢查全部無用的資源文件。它在檢測完以後會提供一份詳細的資源文件清單,並將無用的資源列在「UnusedResources: Unused resources」 區域之下。只要你不經過反射來反問這些無用資源,你就能夠放心地移除這些文件了。code
Lint 會分析資源文件(好比 /res
文件夾下面的文件) ,可是會跳過 assets 文件 ( /assets
文件夾下面的文件)。事實上assets 文件是能夠經過它們的文件名直接訪問的,而不須要經過Java引用或者XML引用。所以,Lint 也不能斷定某個 asset 文件在項目中是否有用。這全取決於開發者對這個文件夾的維護了。若是你沒有使用某個asset 文件,那麼你就能夠直接清除這個文件。xml
這裏主要涉及到屏幕適配的圖片問題,能夠根據咱們產品用戶的層次來進行適配,如今市場上大多數手機都是1280 * 800 以上的,咱們只需適配一兩套圖片便可,我一般用的都是xhdpi。接口