Android apk 瘦身

apk瘦身的意義我就不多說(shuō)了,首先讓我們了解一個(gè)apk的組成部分,說(shuō)簡(jiǎn)單點(diǎn),一個(gè)apk文件就是包含一些文件的壓縮包。作為開(kāi)發(fā)者,我們通過(guò)使用unzip命令解壓這個(gè)apk文件一探apk的內(nèi)部結(jié)構(gòu)。下面的文件結(jié)構(gòu)就是我們使用unzip .apk1這個(gè)命令所獲得的:


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

所以我們得養(yǎng)成良好的編程習(xí)慣,刪除不必要的代碼和重復(fù)無(wú)用的一些資源文件,比如圖片,xml等。盡可能重用一些資源。但是如果我們是接手別人項(xiàng)目或者之前習(xí)慣不好,而導(dǎo)致太過(guò)臃腫等問(wèn)題,這時(shí)候我們可以借助一些工具。

使用 Proguard

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

也許現(xiàn)在你會(huì)認(rèn)為 Proguard 是一個(gè)相當(dāng)有效地工具。但是能力越大,責(zé)任也就越大。現(xiàn)在許多開(kāi)發(fā)這認(rèn)為Proguard有點(diǎn)讓人不省心,因?yàn)樗鼤?huì)重度依賴反射。哪些類或者屬性需要被處理或者不能處理都要開(kāi)發(fā)者對(duì) Proguard 進(jìn)行配置。

使用 Lint

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

Lint 一個(gè)靜態(tài)的代碼分析器,你只需通過(guò)調(diào)用./gradlew lint這個(gè)簡(jiǎn)單地命令它就能幫你檢查所有無(wú)用的資源文件。它在檢測(cè)完之后會(huì)提供一份詳細(xì)的資源文件清單,并將無(wú)用的資源列在“UnusedResources: Unused resources” 區(qū)域之下。只要你不通過(guò)反射來(lái)反問(wèn)這些無(wú)用資源,你就可以放心地移除這些文件了。

Lint 會(huì)分析資源文件(比如/res文件夾下面的文件) ,但是會(huì)跳過(guò) assets 文件 (/assets文件夾下面的文件)。事實(shí)上assets 文件是可以通過(guò)它們的文件名直接訪問(wèn)的,而不需要通過(guò)Java引用或者XML引用。因此,Lint 也不能判定某個(gè) asset 文件在項(xiàng)目中是否有用。這全取決于開(kāi)發(fā)者對(duì)這個(gè)文件夾的維護(hù)了。如果你沒(méi)有使用某個(gè)asset 文件,那么你就可以直接清除這個(gè)文件。

對(duì)資源文件進(jìn)行取舍:

這里主要涉及到屏幕適配的圖片問(wèn)題,可以根據(jù)我們產(chǎn)品用戶的層次來(lái)進(jìn)行適配,現(xiàn)在市場(chǎng)上大多數(shù)手機(jī)都是1280 * 800 以上的,我們只需適配一兩套圖片即可,我通常用的都是xhdpi。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容