Android:我是如何優化APP體積的

語言: CN / TW / HK

開啟掘金成長之旅!這是我參與「掘金日新計劃 · 2 月更文挑戰」的第 29 天,點選檢視活動詳情

前言

在日常開發中,隨著APP功能迭代發現打出的安裝包體積越來越大,這裡說的大是猛增的那種大,而並非一點一點增大。從最開始的幾兆到後面的幾十兆,雖然市面上的很多APP甚至達到上百兆,但畢竟別人功能強大,用到的一些底層庫就特別佔面積,流量也多所以也可理解。但自研的一些APP可經不住這些考驗,所以能壓縮就壓縮,能優化就儘量優化,以得到使用者最好的體驗,下面就來說說我在專案中是如何優化APP體積的。

1. 本地資源優化

這裡主要是壓縮一些圖片和視訊。專案中本地資源用到最多的應該就是圖片,幾乎每個頁面都離不開圖示,甚至一些頁面採用大圖片的形式。你可知道,正常不經壓縮的圖片大的可以上大幾十兆,小則也是一兆起步。這裡做了個實驗,同一個檔案分別採用svg、png、使用tiny壓縮後的png、webp四種類型圖片進行展示(順序是從左到右,從上到下):

image.png

可以看到,加載出來的效果幾乎沒有什麼區別,但體積卻有很大的差別(其中webp是採取的預設75%轉換):

image.png

所以,別再使用png格式圖片,太浪費資源了,就算經過壓縮還是不及svg和webp,這裡的webp其實還可以加大轉換力度,但個人還是比較喜歡svg。

至於音視訊檔案也是可以通過其他工具進行壓縮再放入本地,如非必要,儘量還是使用網路資源。

2. lib優化

一些三方庫會使用底層so檔案,一般在配置的時候我們儘量選擇一種cpu型別,這裡選擇armeabi-v7a,其實幾乎都相容 ndk { //設定支援的SO庫架構 armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips、mips64 abiFilters 'armeabi-v7a' }

可以看看APK體積分析,每種cpu佔用體積都比較大,少配置一種就能省下不少空間。 image.png

3. 程式碼混淆、無用資源的刪除

在bulid.gradle中配置minifyEnabled true開啟程式碼混淆,還需要配置混淆規則,否則無法找到目標類。shrinkResources true則是打包時不會將無用資源打入包內,這裡有個小坑。之前使用騰訊地圖時,某些第三方的靜態資源會因為這個操作不被打入包內,導致無法找到資源,所以根據具體情況使用。 release { buildConfigField "boolean", "LOG_DEBUG", "false" minifyEnabled true // shrinkResources true 慎用,可能會導致第三方資原始檔找不到 zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } 4. 程式碼複用,剔除無用程式碼

專案中由於多人協同開發會出現各寫各的情況,需要抽出一些公共庫之類的工具,方便程式碼複用。一些註釋掉的程式碼該刪除就刪除。其實這一部分優化的體積相當少,但也得做,也是對程式碼質量的一種提升。

總結

其實只要做到了以上四步,APP體積優化已經得到了很大程度的提升了,其他再怎麼優化效果也不是很明顯了,最主要的就是本地資源和第三方so包體積佔用較多。圖片的使用我們儘量做到:小圖示用svg,全屏類的大圖可以考慮webp,最好不要使用png。ndk配置最好只配置一款cpu,幾乎都可相容,萬不得已再加一個。

以上便是全部內容,希望對大家有所幫助。

開啟掘金成長之旅!這是我參與「掘金日新計劃 · 2 月更文挑戰」的第 29 天,點選檢視活動詳情