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各方面進行整體考慮,而不是僅僅幾個方面的斟酌。

發佈了32 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章