Android APK瘦身經(jīng)驗總結(jié)

Android APK瘦身經(jīng)驗總結(jié)

寫在前面:

無論手機的內(nèi)存有多大, 我們自然都希望一個應(yīng)用的安裝包能越小越好,更小的APK標(biāo)示著更多地用戶愿意去下載和體驗。本文借鑒張明云、胡凱等老師的博客,對常規(guī)的APK瘦身方法進(jìn)行歸納和總結(jié)并附上資料的鏈接。如果能對你有所幫助,那真的再好不過了。

零:瘦身的指標(biāo)

是什么造成了APK越來越大呢? 先來看一張解壓之后的APK的目錄圖:

解壓APK之后的目錄

應(yīng)該從哪些方面入手對APK進(jìn)行瘦身呢?

  • 冗余的代碼,不必要的jar包;

  • 未使用的靜態(tài)資源,libs;

  • 屏幕適配時,資源的重復(fù)使用;

  • 錯誤地預(yù)置數(shù)據(jù)

  • native code

  • 未進(jìn)行圖片資源的優(yōu)化與壓縮(重點)

如果看到這里感覺還沒形成相應(yīng)的概念,沒關(guān)系,接下來對這些指標(biāo)進(jìn)行逐個分析,相信你很快就能明了。

一:剔除冗余代碼

  • Proguard

    Proguard是編譯時對java代碼進(jìn)行壓縮,混淆,優(yōu)化,預(yù)編譯等操作的集成化工具。Proguard
    會遍歷你的所有代碼然后找出無用處的代碼。所有這些不可達(dá)(或者不需要)的代碼都會在生成最終的apk文件之前被清除掉。Proguard
    也會重命名你的類屬性,類和接口,然整個代碼盡可能地保持輕量級水平。

    Android代碼混淆規(guī)則設(shè)置

    使用Proguard混淆Android代碼

    有關(guān)Proguard的配置和使用,網(wǎng)上有很多資料,以上兩個是我認(rèn)為還不錯的,通過Proguard工具通常能使你的APK減小200K左右。

  • AndResGuard

    AndResGuard是微信客戶端高級工程師 shwen 的開源項目,可以做到直接處理安裝包.
    不依賴源碼,不依賴編譯過程,僅僅輸入一個安裝包,得到一個混淆包。AndResGuard的功能還是非常強大,騰訊多個產(chǎn)品都使用到了它,具體的源碼和使用方法移步到Github上學(xué)習(xí),已開源。

    AndResGuard--github

二:剔除無用的資源

  • Lint

    Proguard它只會對代碼進(jìn)行分析,對比如圖片之類的資源就束手無策了,不過這個時候Lint就可以發(fā)揮非常大的作用了。

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

    Android Studio中Lint的使用

值得注意的是,Lint 會分析資源文件(比如 /res 文件夾下面的文件) ,但是會跳過 assets 文件 ( /assets 文件夾下面的文件)。事實上 assets 文件是可以通過它們的文件名直接訪問的,而不需要通過Java引用或者XML引用。因此,Lint 也不能判定某個 asset 文件在項目中是否有用。這全取決于開發(fā)者對這個文件夾的維護(hù)了。所以你要去人工排查一下assets文件夾下有沒有無用的資源,如果有就移除它。

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

其實這步操作更多的針對是屏幕適配的知識,曾經(jīng)聽說一個開發(fā)者對Android所有屏幕密度下的文件夾都提供了一套圖片資源(ldpi, mdpi, tvdpi, hdpi, xhdpi, xxhdpi and xxxhdpi),這是非常不理智的行為,雖然Android支持這么多的屏幕密度,但是不代表你需要為每一個都提供一套資源,下面對資源取舍的一些建議

  • 盡量使用一套圖片資源,對于一些圖片在不同分辨率手機上變現(xiàn)差異過大的情況,再考慮去相應(yīng)文件夾下放入這個特定的圖片

  • 使用一套圖、一套布局,多套dimens.xml文件,在使用最小資源的情況下搞定多分辨率適配

  • 盡量重用圖片,例如對稱的圖片,只需要提供一張,另外一張圖片可以通過代碼旋轉(zhuǎn)的方式實現(xiàn)

  • 去除無用的庫,功能上重復(fù)的庫,使用更輕量級的庫,比如你僅僅是想做一些網(wǎng)絡(luò)請求,使用volley即可,沒必要去引入xutils,這就要根據(jù)你項目的情況去具體分析了。

  • 錯誤的預(yù)置一些圖片資源,有一些沒必要跟隨程序展示的圖片就在需要加載它的時候再加載它,將程序與資源盡可能的分離。

四:對圖片資源進(jìn)行優(yōu)化

好了終于來到本篇博客的重頭戲,其實上對一個APK大小的優(yōu)化更多的就是對圖片資源的一些處理技巧,我們應(yīng)該在不降低圖片的顯示效果、保證APK顯示效果的前提下壓縮圖片文件的大小。

  • tinypng

    圖片壓縮利器tinypng

    據(jù)官網(wǎng)介紹,它的原理是通過合并圖片中相似的顏色,通過將 24 位的 PNG 圖片壓縮成小得多的 8 位色值的圖片,并且去掉了圖片中不必要的
    metadata(元數(shù)據(jù),從 Photoshop 等工具中導(dǎo)出的圖片都會帶有此類信息),這種方式幾乎能完美支持原圖片的透明度。

    拖拽圖片即可使用,壓縮率甚至達(dá)到了70%,感嘆它強大的同時,有精力的同學(xué)可以去研究研究它的算法

    壓縮率達(dá)到了70%

    開源的tinypng插件

webP

有關(guān)webP的簡介

WEBP 是google推出的意圖改變web圖片JPG、PNG、GIF三分天下局勢的一種圖片格式。它不僅支持無損或有損壓縮、alpha通道,還支持動畫演示。在同畫質(zhì)的情況下,webp格式圖片占用體積相較于jpg圖片大約減少40%,相較于無損png圖片大約減少30%。具不完全統(tǒng)計,互聯(lián)網(wǎng)流量中60%都產(chǎn)生于圖片,如果能用上webp格式,網(wǎng)站的訪問速度將會大大提升。

不過android 4.0+才原生支持webp, 但是我們的app是兼容2.3+,所以4.0以下的設(shè)備將無法看到圖片。但是引入兼容的SO文件,APK也會變大,這時候自己做個取舍吧!

寫在最后:

其實還有一些給APK瘦身的技巧和細(xì)節(jié),并沒有一一列舉出,而且有些新的優(yōu)化技巧涉及到一些兼容性的問題,大家多查閱資料就能明白了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內(nèi)容