Android apk 瘦身

apk瘦身的意義我就不多說了,首先讓我們了解一個apk的組成部分,說簡單點,一個apk文件就是包含一些文件的壓縮包。作為開發者,我們通過使用unzip命令解壓這個apk文件一探apk的內部結構。下面的文件結構就是我們使用unzip .apk1這個命令所獲得的:


了解完apk的組成部分后,apk瘦身我們大致可以從這幾方面下手: 1 減少java代碼 2 減少資源文件 3 減少native_code

所以我們得養成良好的編程習慣,刪除不必要的代碼和重復無用的一些資源文件,比如圖片,xml等。盡可能重用一些資源。但是如果我們是接手別人項目或者之前習慣不好,而導致太過臃腫等問題,這時候我們可以借助一些工具。

使用 Proguard

Proguard 是一個很強悍的工具,它可以幫你在代碼編譯時對代碼進行混淆,優化和壓縮。它有一個專門用來減少apk文件大小的功能叫做 tree-shaking。Proguard 會遍歷你的所有代碼然后找出無用處的代碼。所有這些不可達(或者不需要)的代碼都會在生成最終的apk文件之前被清除掉。Proguard 也會重命名你的類屬性,類和接口,然整個代碼盡可能地保持輕量級水平。

也許現在你會認為 Proguard 是一個相當有效地工具。但是能力越大,責任也就越大。現在許多開發這認為Proguard有點讓人不省心,因為它會重度依賴反射。哪些類或者屬性需要被處理或者不能處理都要開發者對 Proguard 進行配置。

使用 Lint

Proguard 只會對 Java 代碼起作用,那么對哪些資源文件呢?比如一張圖片my_image在res/drawable文件夾中,沒有被使用,Proguard 只會移除掉R類中的引用,但是圖片依然還在文件夾中。

Lint 一個靜態的代碼分析器,你只需通過調用./gradlew lint這個簡單地命令它就能幫你檢查所有無用的資源文件。它在檢測完之后會提供一份詳細的資源文件清單,并將無用的資源列在“UnusedResources: Unused resources” 區域之下。只要你不通過反射來反問這些無用資源,你就可以放心地移除這些文件了。

Lint 會分析資源文件(比如/res文件夾下面的文件) ,但是會跳過 assets 文件 (/assets文件夾下面的文件)。事實上assets 文件是可以通過它們的文件名直接訪問的,而不需要通過Java引用或者XML引用。因此,Lint 也不能判定某個 asset 文件在項目中是否有用。這全取決于開發者對這個文件夾的維護了。如果你沒有使用某個asset 文件,那么你就可以直接清除這個文件。

對資源文件進行取舍:

這里主要涉及到屏幕適配的圖片問題,可以根據我們產品用戶的層次來進行適配,現在市場上大多數手機都是1280 * 800 以上的,我們只需適配一兩套圖片即可,我通常用的都是xhdpi。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文來自尚妝Android團隊青峰發表于尚妝博客 APK瘦身探索 最近幾周一直在研究如何為APK瘦身,折騰了很久,...
    尚妝產品技術刊讀閱讀 1,795評論 1 23
  • Android APK瘦身經驗總結 寫在前面: 無論手機的內存有多大, 我們自然都希望一個應用的安裝包能越小越好,...
    MeloDev閱讀 4,645評論 1 35
  • 互聯網時代是一個追求效率的時代,大部分用戶會因為下載時間、流量消耗、手機存儲空間選擇較小的app,所以apk瘦身至...
    俺叫瓦小力閱讀 2,614評論 1 1
  • 瘦身意味了什么呢?人們瘦身味了更好的身體和更勻稱的身材。那么app呢?提高下載轉化率,用戶在無wifi情況下少用流...
    樂之飛于閱讀 622評論 0 3
  • 翌日,靈影號主甲板,一個高臺在船首搭建而起。雖然看上去用料簡易,但每一個細節做的都很到位。紅色地毯從臺上一直延伸到...
    暄duai閱讀 314評論 2 3