Android產品研發(四)-->減小Apk大小
隨著移動技術的深入發展,各種炫酷效果的更新,在我們追求UI與UE的同時一個不如忽視的問題逐漸暴露出來,那就是apk檔案越來越大,可能有的童鞋會說現在都是wifi環境,apk檔案增大幾M不是什麼大不了的問題,這其實也是有一定道理的,但是作為開發人員的我們這絕不是我們認為可以忽略這個問題的理由。優化Apk大小也是優化我們App體驗的一個重要方面,雖然可能它不是那麼的重要。
那麼到底是那些原因讓我們的Apk檔案變得越來越大呢?
多螢幕適配問題,移動裝置的多樣化導致了一個app需要N種不同尺寸的設定,從而增加了安裝檔案中資原始檔的種類與大小;
各種開發框架,開發工具的改進,雖然方便了我們開發者重複造輪子,但是這也間接的增加了安裝檔案的大小;
在追求各種動畫、UI效果的內在需求,顯而易見的更加炫酷的UI、UE效果會客觀上增減Apk檔案的大小;
開發人員溝通不足,冗餘程式碼過多造成打出來的apk檔案增大;
為了滿足效能、安全性的需求,增添.so庫;
好吧,既然我們知道了為何我們的apk檔案越來越大,我們就可以有針對性的提出解決辦法,為了更好的說明問題,這裡我簡單的列一下apk檔案的組成:
原始碼檔案即原始碼檔案等
資原始檔包括apk檔案中的各種佈局檔案,資原始檔,圖片檔案,原生檔案等等
原生代碼檔案這裡主要指的是.so檔案
那麼在知道了apk檔案的組成之後,如何減少apk檔案的大小就很簡單了
減小apk檔案的大小,已經是一件很重要的事情。上面我們知道了apk檔案的組成部分,就可以根據這些組成部分做一些優化安裝檔案的工作了。。下面是我總結的一些減小apk檔案大小的方式:
原始碼檔案方面的優化方式:
掌握良好的編碼習慣,複用程式碼,對於一些重複性的程式碼邏輯複用;
使用Proguard對程式碼混淆,優化,壓縮(它不僅僅是一個牛擦的混淆工具在程式碼優化方面也是很棒滴)。
減少一些無用程式碼庫的引用,經常的一個場景就是可能一些程式碼庫已經不需要了,但是還是在程式碼中引用著,這樣做的後果就是無用的程式碼庫也會被編譯到apk檔案中;
定期進行程式碼review,這是一個很重要的工作,可以是團隊成員之間熟悉彼此程式碼同時也可以查找出一些自己看不出來的bug以及減小一些無用程式碼;
做一些程式碼lint之類的工作,Android studio已經提供了這樣的功能,定期執行程式碼lint操作是一個比較不錯的習慣;
資原始檔方面的優化方式:
對於一些不必要的裝置尺寸,不必要全部裝置(主要看產品需求)
對資原始檔,主要是圖片資源進行壓縮;
一些UI效果可以使用程式碼渲染替代圖片資源;
資原始檔的複用,比如兩個頁面的背景圖片相同底色不同,就可以複用背景圖片,設定不同的底色;
原生代碼檔案方面的優化方式:
限制app支援的cpu架構的數目,在當前的Android 生態系統中,讓你的app支援 armabi 和 x86 架構就夠了;
儘可能的重用so庫檔案;
最後重點講一下圖片的壓縮工作,其實上面所講的所有的減小apk大小的技巧中最重要的就是對圖片的壓縮工作。一般而言圖片壓縮對減小Apk大小所產生的效果佔到你所有減小Apk努力的效果50%以上,因而要想減小Apk大小就考慮一下怎麼減小圖片的大小吧。
這裡推薦一個比較不錯的圖片壓縮網站:https://tinypng.com/ 支援對jpg與png圖片資源的壓縮。
我們可以具體的測試一下不同大小圖片資源的壓縮情況:
可以看到當圖片資源大於100k之後壓縮率都是65%左右,在10k+的圖片資源上表現同樣很牛擦,當圖片資源小於10k的隨著圖片大小的減小,逐漸減少。
後來具體在我們的apk檔案中都是用這種方式壓縮一遍之後,apk檔案的大小從11.86M減少到了10.52M,可見apk檔案減小的效果還是很明顯的。
PS:
最新的Android Studio2.2提供了一個Apk分析器,能夠檢視Apk檔案的組成部分一起各自大小所佔的比重,相當不錯哈。有興趣的同學可以研究一下,多如何減小Apk大小還是很有幫助的。
開啟Android Studio –> Build –> Analyze Apk
總結
以上減少apk檔案的方式相對來說,體驗方面就需要有一定的取捨,設計就是在一個約束集裡面找出最好的方案。顯然apk檔案的大小就是一個約束。不要害怕為了讓多個方面變得更好而放鬆一個方面的約束。你需要將app各方面進行整體考慮,而不是僅僅幾個方面的斟酌。