在安卓app包里面蒂窒,占體積的主要是三塊
- 一塊是dex文件躁倒,也就是java/kotlin代碼荞怒,這塊基本上都是用了Proguard去 壓縮(Shrinking)、優(yōu)化(Optimization)秧秉、混淆(Obfuscation)褐桌,基本上proguard之后再優(yōu)化的空間已經(jīng)不大了。當(dāng)然可以采用插件化去動態(tài)下發(fā)象迎。
- 一塊是so庫荧嵌,如果不是自己本公司開發(fā)的so庫,基本是沒有辦法去優(yōu)化三方庫的so體積的砾淌。當(dāng)然依然可以使用云端動態(tài)下發(fā)啦撮。
- 一塊就是資源圖片,當(dāng)然依然是可以圖片服務(wù)器通過glide等從云端拉取汪厨。這里主要講采用gradle插件或工具來便捷的對圖片資源的優(yōu)化赃春。
1、 使用 Lint 的 Remove Unused Resource
APK 的資源主要包括圖片劫乱、XML聘鳞,與冗余代碼一樣,它也可能遺留了很多舊版本當(dāng)中使用而新版本中不使用的資源要拂,這點在快速開發(fā)的 App 中更可能出現(xiàn)。我們可以通過點擊右鍵站楚,選中 Refactor脱惰,然后點擊 Remove Unused Resource => preview 可以預(yù)覽找到的無用資源,點擊 Do Refactor 可以去除冗余資源窿春。如下圖所示:
2拉一、檢測重復(fù)資源
項目開發(fā)中可能經(jīng)常出現(xiàn)不同名但是其實是同張圖片或者shape的情況,這個時候要用肉眼去觀察其實是一件很難也很費時間的事情旧乞,對于文件的唯一性蔚润,我們可以通過md5來區(qū)分是否是同一資源,這里使用寫了md5校驗文件的插件尺栖。
3嫡纠、檢測大圖上傳cdn圖片服務(wù)器
在項目中,有些很大的圖片其實沒有必要全部都放在本地延赌。正常情況100k以上的圖片就需要放到圖片服務(wù)器了除盏,那么開發(fā)人員那么多,總是會有粗心的會放在本地挫以。那么如何限制進(jìn)行收口管理者蠕,我們可以在講module upload maven的腳本中加上圖片體積限制,大于一定體積直接拋異常即可掐松。這里寫了個一個檢測圖片體積的gradle插件
4踱侣、檢測非webp的圖片
webp格式是google推出的圖片格式粪小,相對于png在體積上進(jìn)行了一定的壓縮,無損webp壓縮近30%抡句,有損webp壓縮近80%探膊,由于手機(jī)屏幕小,采用有損webp肉眼幾戶也很難察覺出區(qū)別玉转,所以使用有損webp格式的話 100k接近壓縮至20幾k突想,效果還是很客觀的。正常公司ui提供的圖是有webp的究抓,但是有些同學(xué)可能粗心選擇的png猾担。要是每個迭代都去肉眼目測一次圖片格式是不現(xiàn)實的,所以刺下,這里依然寫了個檢測是否存在非webp格式圖片的插件