android apk瘦身

瘦身意味了什么呢?人們瘦身味了更好的身體和更勻稱的身材。那么app呢?提高下載轉(zhuǎn)化率,用戶在無wifi情況下少用流量!據(jù)調(diào)查:一個應(yīng)用大小是 20MB ,有很多個潛在用戶想要去下載嘗試使用,結(jié)果有一半的用戶嫌棄流量太耗費(fèi)錢了,太大直接看都不看河在等待下載的過程中就取消下載,用戶流失性太大,那么應(yīng)用的下載轉(zhuǎn)化率就是最多60%。

人精裝了,總比臃腫看起來要好得多!那么app的安裝包越小,用戶下載等待的時間越短,對手機(jī)存儲配置小的設(shè)備體驗(yàn)愈佳,應(yīng)用的下載轉(zhuǎn)化率也就越高。

要對安裝包做瘦身,首先需要了解安裝包的組成結(jié)構(gòu)(就像是減肥階段知道了解自己身體各個狀況一樣)。

其中,在安裝包中占比較大的包括:dex文件、res文件夾、assets文件夾、lib文件夾以及resource.arsc文件。所以,接下來的瘦身優(yōu)化就是讓這些文件變小,以此達(dá)到瘦身的目的。

在 Android Studio 2.2.3 開始,就加入了瀏覽 APK 結(jié)構(gòu)的功能,我們直接把安裝包拖入 IDE ,就可以直接瀏覽其組成和對應(yīng)大小,這樣能夠很方便的對比分析出每一步優(yōu)化后的結(jié)果。資源瘦身

了解完 APK 的組成,我們可以開始著手優(yōu)化的工作了,因?yàn)橘Y源文件在 APK 中的占比最高,所以優(yōu)先從資源瘦身開始著手。

.9 PNG 代替 PNG

一些情況下,我們可以考慮使用 Drawable XML 來代替 PNG,如:漸變的背景圖,用幾行 XML 就可以描繪出來,何必使用幾十到上百K的 PNG 文件;

用 Color 代替 PNG,如:純色的背景;

從性能上看(推薦大家可以用用flowup),比起使用圖片資源需要先將其生成 Bitmap 再傳到底層交由 GPU 渲染,用 Drawable XML 和 Color 則更加高效,它是直接將 Shape 信息傳到底層由 GPU 進(jìn)行渲染,CPU 和 內(nèi)存的占用會更少;

用 .9 PNG 代替 PNG,場景很多,不舉例了;

使用 JPG 代替 PNG

用 JPG 代替 PNG,由于 JPG 沒有 Alpha 通道,所以文件更小,適用于不需要透明度的圖片可以考慮。

謹(jǐn)慎使用 WebP 代替 PNG(需要透明度體現(xiàn)的話最還不要用webp,失真)

由于 WebP 效果好,且相同效果下, WebP 文件比 PNG 文件要小得多 ,所以,網(wǎng)上很多人說使用 WebP 代替 PNG,對此,我保持異議。理由如下:

WebP 在 Android 端,最低只支持 4.0 ,要兼容 4.0 以下的環(huán)境需要額外引入兼容庫,反而增大安裝包體積;

Android Studio 不支持預(yù)覽 WebP 圖片,引用 WebP 的布局文件也無法預(yù)覽顯示;

解壓了 BAT 們的應(yīng)用,以及同類競品,基本沒有發(fā)現(xiàn)在資源文件中用 WebP 的;

有損編碼格式的音頻文件代替無損格式的音頻文件

從下面這篇官方文檔

https://developer.android.com/guide/topics/media/media-formats.html

可以看到 Android 平臺支持的音視頻格式,下面列出有損和無損常用的格式(不要認(rèn)為有損編碼就是音質(zhì)很差):

無損格式:WAV,PCM,ALS等

有損格式:MP3,AAC,WMA,Ogg Vorbis

實(shí)際開發(fā)中需要使用音頻文件盡量采用 MP3、Ogg 這種有損格式,盡量不要用 WAV、PCM 這種無損音頻。

移除無用的資源

這里的移除無用資源文件主要分為兩個部分:不打包沒有使用的資源和刪除沒有使用的資源。

不打包沒有使用的資源,在項(xiàng)目的 build.gradle 中配置 shrinkResources true 即可。刪除沒有使用的資源,通過 Android Studio 選中項(xiàng)目右鍵 => Analyze => Run Inspection by Name => 輸入 Unused Resuroces

即可看到所有未使用的資源文件,建議定期清理掉這些沒用的文件,一方面可以減小工程的大小,另一方面太多的資源文件會導(dǎo)致打包后 resources.asc 文件變得越來越大。

綜合以上幾點(diǎn),就可以有效的精簡我們安裝包中的res文件夾、assets文件夾、resource.arsc文件大小,從而達(dá)到瘦身目的。

工具

TinyPNG:https://tinypng.com/,支持對 PNG/JPEG 文件做壓縮處理,效果不錯。

mozjpeg:https://imageoptim.com/mozjpeg, 用于 PNG 轉(zhuǎn) JPEG、JPEG 壓縮,效果很好。

Adobe Audition CC:http://www.adobe.com/cn/products/audition.html,Adobe 出品,支持對音頻的采樣率,分辨率和聲道數(shù)目做更改,以此達(dá)到裁剪音頻的目的(采樣率,分辨率和聲道數(shù)目是音頻文件格式的關(guān)鍵參數(shù),決定著音頻文件的大小)。

以上是我優(yōu)化過程中用到的覺得不錯的工具,有更好的推薦,歡迎補(bǔ)充。

Native瘦身

Native 庫瘦身主要是減小對 CPU 架構(gòu)的支持,配置起來很簡單,在 build.gradle 使用 abiFilters 配置需要用到的 CPU 架構(gòu),并將不需要兼容的 so 文件從項(xiàng)目中移除即可。過濾一些abifile,根據(jù)我們用戶的機(jī)型分布,最終只保留了對 armeabi-v7a 支持。注意,這里需要根據(jù)自家產(chǎn)品的實(shí)際情況來決定。

綜上,就可以有效的精簡我們安裝包中的 lib 文件夾大小,從而達(dá)到瘦身目的。也有一種做法是通過在 build.gradle 配置 include 來針對每個 CPU 架構(gòu)生成單獨(dú)的安裝包,雖然看起來很不錯,但是很多國內(nèi)應(yīng)用市場上架的時候并不支持這種每個 CPU 配置一個包的做法,所以此做法較為雞肋,不太建議去做,如果應(yīng)用只上 Google Play ,那確實(shí)要比配置 abiFilters 好得多。

代碼(dex)瘦身

主要如下:

移除廢棄功能的代碼,反正有 git ,刪了隨時可以找回;

移除重復(fù)代碼,如:已經(jīng)有了的功能代碼,團(tuán)隊(duì)成員不知道自己又寫了一套,只能靠代碼 Review 解決了;

移除功能重疊的框架,如:項(xiàng)目中有幾套網(wǎng)絡(luò)訪問框架AsyncHttpClient、Retrofit 等,同樣只能靠代碼 Review 解決;

移除無用的 dependencies 或者 jar 包;

減小對 Support 兼容包的依賴,Support-V4 包非常大,項(xiàng)目引入無疑會增大 dex 文件的大小,Google 已經(jīng)意識到這個問題,所以 Support-V7 一開始就做了拆分,并且開始對 Support-V4 做拆分,雖然目前成果還不明顯,不過還是蠻值得期待的,特別是發(fā)現(xiàn)你少了 Support-V4 包后,可能就從2個 dex 變成1個 dex 了呢;

插件化(最近在用small的框架,還很不錯?。?,一種懶加載思想的體現(xiàn),先讓用戶能夠安裝宿主包,對于一些功能模塊做插件化,在特定的時機(jī)再下載安裝;

精簡我們安裝包中的 dex 文件大小,從而達(dá)到瘦身目的。

需要用到的工具

png、jpg圖片壓縮神器tinypng

png壓縮工具pngquant

圖片格式轉(zhuǎn)換工具iSparta

Android Studio→Inspect Code...

Android應(yīng)用增量更新開源項(xiàng)目

Android資源混淆工具

主流開源項(xiàng)目的混淆規(guī)則列表

字體資源文件壓縮神器FontZip

統(tǒng)計(jì)APK文件中class、method、field、string數(shù)量

7z壓縮文件解壓庫AndroidUn7zip

值得閱讀的文章

Android APP終極瘦身指南

Shrink Your Code and Resources

安裝包立減1M--微信Android資源混淆打包工具

美團(tuán)Android資源混淆保護(hù)實(shí)踐

APK瘦身實(shí)踐

讓你的APK瘦成一道閃電

關(guān)于APK瘦身值得分享的一些經(jīng)驗(yàn)

Android APK安裝包瘦身

WebP 探尋之路

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容