前言
項(xiàng)目中引入了“大量的”lottile動畫文件以優(yōu)化動畫顯示效果耀态,稍微統(tǒng)計(jì)了下,共20多個轧粟,小的幾十k策治,大的1.33M,總大小超過8M兰吟,apk包體積急速膨脹通惫。
解決方案
由于項(xiàng)目中顯示動畫的需要,引入了大量的Lottie動圖混蔼,以優(yōu)化顯示效果導(dǎo)致包體積急速膨脹履腋,目前可以想到的解決方案主要有如下2種:
方案1)遠(yuǎn)端方案
將lottie json文件放置在遠(yuǎn)程服務(wù)端,在需要時(shí)加載文件或者提前預(yù)加載到本地惭嚣。
這個方案可以說是針對“包體積”最優(yōu)的解決方案遵湖,但缺點(diǎn)也同樣致命。優(yōu)化方案會切入業(yè)務(wù)邏輯晚吞,對于已經(jīng)開發(fā)好的項(xiàng)目需要重新進(jìn)行測試評估延旧,增加了業(yè)務(wù)邏輯Bug的風(fēng)險(xiǎn),只適合在項(xiàng)目開啟之初同步介入槽地。對于此方案還需要增加對json文件“下載-管理-失敗重試”等文件管理相關(guān)的業(yè)務(wù)邏輯迁沫,增加了維護(hù)調(diào)試成本。但如果相關(guān)方案一旦建立和穩(wěn)定運(yùn)行捌蚊,還是很“香”的集畅。同時(shí)還有文件在什么時(shí)候加載也是門學(xué)問,如果簡單化的一股腦在啟動時(shí)加載缅糟,極易造成運(yùn)行卡頓或者內(nèi)存占用過高OOM等風(fēng)險(xiǎn)挺智。
方案2)“本地”方案
壓縮lottie json文件的大小,緩解apk包體積急速膨脹的問題窗宦。
這個方案只能稍微緩解下apk包體積膨脹的問題逃贝,只能是個臨時(shí)方案谣辞,后續(xù)建議采用方案1)替代迫摔。
如何壓縮Lottie動畫文件的大秀灏狻?
回到本文的正題句占,Lottie導(dǎo)出的動畫文件簡單歸類主要有兩種沪摄,一種是以.zip
或.lottie
文件結(jié)尾的文件,也可能是個文件夾(里面包含一堆圖片和一個.json
文件)纱烘,另一種則是單獨(dú)只有一個json文件(開頭截圖中的那種)杨拐。
針對以.zip
或.lottie
文件結(jié)尾的Lottie文件(素材圖片獨(dú)立于.json
文件),壓縮方案直接對這些圖片素材進(jìn)行壓縮擂啥『逄眨可以參考我以前寫的一篇文章《Android圖片資源壓縮記》和使用圖片批量壓縮工具進(jìn)行處理。
PS: 強(qiáng)烈建議是不改文件及其后綴名哺壶,如果確實(shí)需要修改屋吨,則要注意要把.json
文件里相應(yīng)的name也同步更改,否則使用時(shí)將導(dǎo)致找不到文件直接報(bào)錯山宾。
針對單獨(dú)只有一個.json
文件的Lottie文件至扰,我這邊開發(fā)了一個腳本,用于壓縮json文件资锰,可以有效的對文件進(jìn)行壓縮敢课,效果如下:
PS:不同的文件壓縮率不同,取決于使用素材圖片的大小和多寡绷杜。
批處理程序:tiny-lottie.exe
開源地址: 碼云(gitee) /chockqiu/tiny-lottie
在需要批處理的文件夾下運(yùn)行如下命令,將批量處理文件夾下所有*.json文件直秆。
Windows環(huán)境
tiny-lottie.exe -q 75 -p
Mac/Linux環(huán)境
python tiny-lottie.py -q 75
命令行參數(shù)
usage: TinyLottie [-h] [-d directory] [-q quality] [-o] [-p]
Lottie文件批處理工具, 支持使用webp圖片壓縮Lottie文件
optional arguments:
-h, --help show this help message and exit
-d directory, --dir directory 運(yùn)行文件夾,默認(rèn)當(dāng)前文件夾
-q quality, --quality quality 質(zhì)量百分比[0-100]鞭盟,Webp圖片壓縮率圾结,數(shù)字越大質(zhì)量越高
-o, --overwrite 是否覆蓋源文件
-p, --pause 執(zhí)行完是否暫停窗口以便查看輸出