? ? ? ? 首先來說一下APK小的好處,APK小就意味著下載耗流量少,下載速度快。站在用戶的角度上想一下就知道,用戶更愿意下容量小,更精致的APK。當(dāng)然APK小并不就是意味著功能少,這是站在同樣功能的基礎(chǔ)上來說的。分析apk的工具h(yuǎn)ttps://nimbledroid.com/?spm=5176.100239.blogcont57284.8.aVVWAv
????? ? 首先來說一下圖標(biāo)篇,做開發(fā)的都知道為了圖片設(shè)配,圖標(biāo)大小占APK的比重是很大的。從圖標(biāo)出發(fā),思路有二:
? ? ? 1.壓縮圖標(biāo):使用tinypng優(yōu)化Android的資源圖片,tinypng能在不失真的前提下極大的壓縮圖標(biāo)。官網(wǎng):https://tinypng.com/
??? 2.減少圖標(biāo):
? ? ? a.隨著app版本的迭代,實(shí)際上有很多圖片已經(jīng)是用不上了的,但是又沒有及時(shí)的刪除。Android Studio自帶的Lint工具能分析出未使用的資源,在AndroidStudio的菜單中選擇Analyze->Inspecting Code即可進(jìn)入Lint工具分析。

?????? 當(dāng)然也可以直接在build中配置去除無用資源,記得配合代碼混淆一起使用

??????? b.我們會(huì)為了設(shè)配手機(jī)分辨率而讓美工切出多套圖片,其實(shí)并不是每張圖片都需要適配多套分辨率的,眾所周知drawable下有l(wèi)dpi、mdpi、hdip、xhdpi、xxhdpi、xxxhdpi來適配不同分辨率的手機(jī),按我個(gè)人經(jīng)驗(yàn),大多數(shù)圖標(biāo)只要設(shè)計(jì)720分辨率(即xhdpi)下一套,自己設(shè)置尺寸來適配。
此外,我們所引入的第三方包中可能也引用了資源圖片,但是其中的某些我們可能是不想要的,比如ldpi和xxxhdpi,那么是否可以設(shè)置什么東西來讓打包的時(shí)候剔除他們呢?是可以的,可以配置下build.gradle
defaultConfig {resConfigs"en","de","fr","it"resConfigs"hdpi","xhdpi","xxhdpi"}
??????? c.多用.9圖,9.png格式的圖片在android 環(huán)境下具有自適應(yīng)調(diào)節(jié)大小的能力。記住左上右下,左邊和上方是設(shè)置.9圖橫向和縱向可以拉伸的區(qū)域,右邊和下方是設(shè)配橫縱向內(nèi)容的顯示區(qū)域。

??????? d.覆蓋第三方庫里的大圖,很多時(shí)候我們引入了大量的第三方庫,這些第三方庫里又引用了一些大圖但是實(shí)際上并不會(huì)被我們用到,刪除又怕出錯(cuò),這時(shí)候我們就可以考慮用1x1的透明圖片覆蓋,已達(dá)到減少圖片資源空間占用的問題。
????? e.用代碼代替圖片,很多情況下一些簡(jiǎn)單的圖標(biāo)用shap都能制作,要懂得靈活運(yùn)用shap。

????? f.用layer-list來制作多層圖片從而達(dá)到復(fù)用。

?????? g.用一張圖來制作selector效果,使用selector做遮罩,原圖做background。


???????? h.用圖標(biāo)字體來代替圖標(biāo),具體可參考阿里巴巴IconFont,地址 http://www.iconfont.cn/
? ? ? ? 然后講一下Progruard,Proguard是Android很早就使用的代碼混淆工具,除了用于混淆代碼提高安全性以外,他在代碼編譯的時(shí)候也會(huì)通過遍歷代碼的方式來發(fā)現(xiàn)沒有被調(diào)用的代碼,從而將其在打包成apk時(shí)剔除,最終一定程度上降低了apk的大小。另外提供資源混淆工具AndResGuard
??????? 最后是so的優(yōu)化,用過百度地圖api的同學(xué)都知道,百度地圖SDK中包含了很多so文件,而這些so文件的體積都很龐大,考慮下我們的用戶,基本都是跑在手機(jī)上的(沒有人跑在模擬器上),所以明顯x86和x86_64的so是不需要支持。按個(gè)人經(jīng)驗(yàn)只要保留下面二個(gè)就行了。
