之前講過的幾種 apk 瘦身方法里球恤,除了通過 proguard 進(jìn)行混淆壓縮比較常規(guī)外辜昵,其他都是些奇淫技巧,對 apk 進(jìn)行壓縮的大小有限咽斧,適合對 apk 大小進(jìn)行極致優(yōu)化的場景堪置,并且如果對配置不熟悉躬存,很容易出現(xiàn)各種錯(cuò)誤。但其實(shí)瘦身最有效的辦法之一舀锨,就是進(jìn)行圖片壓縮岭洲。
1. 只配置同一種分辨率下的圖片
一般現(xiàn)在我們只配置一種分辨率的圖片,現(xiàn)在主流的有 xhdpi坎匿、xxhdpi盾剩、xxxhdpi,但我們沒必要配置3套圖片替蔬,否則圖片資源的大小呈倍數(shù)增長告私。高分辨的圖片在低分辨率手機(jī)上展示,效果一般沒問題承桥,但是低分辨率的圖片在高分辨率手機(jī)上展示則很可能會(huì)出現(xiàn)模糊驻粟,結(jié)合目前市場上手機(jī)的普通情況,目前我們選擇了 xxhdpi 這套分辨率的圖凶异。也可以只選擇 xhdpi 分辨率上的圖格嗅,效果一般也沒問題,結(jié)合自己的時(shí)實(shí)際情況選擇唠帝。
2. 采用 TinyPng 進(jìn)行圖片壓縮
網(wǎng)站地址:https://tinypng.com/
所用的每一個(gè)圖片屯掖,都通過 TinyPng 進(jìn)行壓縮處理,有的比較大的圖片可以反復(fù)壓縮襟衰,直到?jīng)]有壓縮空間為止贴铜。
3. 使用 xml 定義的 drawable 資源
不要所有的地方都采用 png 圖片,特別是像一些類似圓角背景瀑晒、漸變的顏色背景等绍坝,能通過 xml 來定義成 drawable 的,盡量都不要直接使用 png 圖片苔悦,一個(gè) xml 文件比一個(gè) png 圖片會(huì)小很多轩褐。
4. 使用 .9 png 圖片
有些設(shè)計(jì)師對 Android 不是很熟悉,切圖時(shí)總會(huì)按照效果圖切一張大圖出來玖详。如果能夠使用 .9 圖的把介,盡量跟設(shè)計(jì)師溝通清楚,雖然制作 .9 圖會(huì)稍微麻煩一點(diǎn)蟋座,但是你要想想拗踢,壓縮再多代碼量也比不了一張大圖的大小。
5. 使用 webp 格式的圖片
Android 4.3以上就已經(jīng)全面支持 webp 格式的圖片了向臀,不需要自己再做額外的版本兼容了巢墅。Android Studio 已經(jīng)提供了很方便的工具,可以直接將 png 圖片轉(zhuǎn)換成 webp 格式了,當(dāng)然可能會(huì)有少許的圖片清晰度損耗君纫。一張 100kb 的 png 圖片驯遇,轉(zhuǎn)成 webp 格式化,大小可能只有幾 kb 了蓄髓,壓縮效率驚人妹懒。
那是不是可以將所有的 png 圖片轉(zhuǎn)換為 webp 圖片了,答案是否定的双吆。有的 png 圖片轉(zhuǎn)換后眨唬,圖片大小可能比原圖還大,這顯然是不行的好乐;有些小的 icon匾竿,本身已經(jīng)很小了,再去壓縮降低了清晰度蔚万,大小減少得微乎其微岭妖,似乎也沒這個(gè)必要了;有的 webp 圖片還是有點(diǎn)兼容性問題反璃,曾經(jīng)碰到過在某些手機(jī)上 webp 圖片會(huì)花掉的現(xiàn)象昵慌。所以我們的處理原則是:
- 小的 icon 圖片大小比較小,為了高質(zhì)量不會(huì)去壓縮淮蜈;
- 類似引導(dǎo)圖這種斋攀,都是全屏大小的圖片,全部轉(zhuǎn)換為 webp 格式梧田;
- 一些說明介紹性的 png 圖片淳蔼,如果大小超過 20kb,考慮轉(zhuǎn)換為 webp 格式裁眯;
- 對于 20kb 以下的這些圖片鹉梨,優(yōu)先采用 TinyPng 進(jìn)行壓縮優(yōu)化;
總的來說穿稳,webp 能節(jié)省很大的空間存皂,但它不是萬能的,根據(jù)情況而定逢艘。
6. 合理使用網(wǎng)絡(luò)圖片
對于有些并不是高頻使用的業(yè)務(wù)場景旦袋,這里面的圖片可以考慮使用網(wǎng)絡(luò)加載的方式。將這些圖片存儲(chǔ)到服務(wù)器埋虹,需要用到的時(shí)候再來加載或者是預(yù)加載好猜憎。
7. 小結(jié)
以上是我常用的一些方法娩怎,只要平時(shí)開發(fā)的時(shí)候搔课,注意這些問題就可以實(shí)現(xiàn)了。此外,還有其他的方式爬泥,例如使用矢量圖柬讨,但是矢量圖的定義個(gè)人覺得有點(diǎn)麻煩,為了自己的開發(fā)效率就放棄掉了袍啡。圖片壓縮是減小 apk 大小的最有效方式之一踩官,只有平時(shí)注意這個(gè)問題,后面想為 apk 瘦身的時(shí)候就好辦多了境输。
系列文章
Android apk瘦身最佳實(shí)踐(一):去除R.class
Android apk瘦身最佳實(shí)踐(二):代碼混淆和資源壓縮
Android apk瘦身最佳實(shí)踐(三):資源混淆原理
Android apk瘦身最佳實(shí)踐(四):采用AndResGuard進(jìn)行資源混淆
Android apk瘦身最佳實(shí)踐(五):圖片壓縮
Android apk瘦身最佳實(shí)踐(六):采用D8編譯器