引言
1. Android性能優(yōu)化篇之內(nèi)存優(yōu)化--內(nèi)存泄漏
2.Android性能優(yōu)化篇之內(nèi)存優(yōu)化--內(nèi)存優(yōu)化分析工具
3.Android性能優(yōu)化篇之UI渲染性能優(yōu)化
4.Android性能優(yōu)化篇之計(jì)算性能優(yōu)化
5.Android性能優(yōu)化篇之電量優(yōu)化(1)——電量消耗分析
6.Android性能優(yōu)化篇之電量優(yōu)化(2)
7.Android性能優(yōu)化篇之網(wǎng)絡(luò)優(yōu)化
8.Android性能優(yōu)化篇之Bitmap優(yōu)化
9.Android性能優(yōu)化篇之圖片壓縮優(yōu)化
10.Android性能優(yōu)化篇之多線程并發(fā)優(yōu)化
11.Android性能優(yōu)化篇之?dāng)?shù)據(jù)傳輸效率優(yōu)化
12.Android性能優(yōu)化篇之程序啟動時間性能優(yōu)化
13.Android性能優(yōu)化篇之安裝包性能優(yōu)化
14.Android性能優(yōu)化篇之服務(wù)優(yōu)化
介紹
安裝包優(yōu)化的主要方向就是APP瘦身华望,那么App瘦身帶來哪些好處呢奄侠?
(1).下載時省流量
(2).用戶好的體驗(yàn)先誉,下載更快,安裝更快下面給出一些常用的優(yōu)化建議
1.清理無用資源
在我們應(yīng)用版本的迭代中渡紫,肯定有廢棄的代碼和資源峰档,我們要及時地清理,來減小App體積症杏,下面給出幾種清理的方法训措。
(1).使用Refactor->Remove unused Resource
這個一鍵清除的小功能不是特別的又用伪节,因?yàn)橘Y源是經(jīng)過反射或字符拼接等方式獲取,所以檢查不完全绩鸣,需要我們不斷的實(shí)驗(yàn)架馋。
image2.png(2).使用Lint工具
lint工具還是很有用的,它給我我們需要優(yōu)化的電全闷,這個在介紹工具的文章已經(jīng)講過叉寂,下面我只給出需要注意的點(diǎn):
- 檢測沒有用的布局并且刪除
- 把未使用到的資源刪除
- 建議String.xml有一些沒有用到的字符也刪除掉
(3).開啟shrinkResources去除無用資源
在build.gradle 里面配置shrinkResources true,在打包的時候會自動清除掉無用的資源总珠,但經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn)打出的包并不會屏鳍,而是會把部分無用資源用更小的東西代替掉。注意局服,這里的“無用”是指調(diào)用圖片的所有父級函數(shù)最終是廢棄代碼钓瞭,而shrinkResources true 只能去除沒有任何父函數(shù)調(diào)用的情況.
android {
buildTypes {
release {
shrinkResources true
}
}
}
(4).刪除無用的語言資源
大部分應(yīng)用其實(shí)并不需要支持幾十種語言的國際化支持。比如我們只是保存中文支持:
android {
defaultConfig {
resConfigs "zh"
}
}
(5).清理第三方庫中冗余代碼
對于第三方庫淫奔,可能我們只是用到庫中的一個功能山涡,那么我們就可以導(dǎo)入源碼,并且刪除無關(guān)的代碼唆迁,來減小體積鸭丛。
2.圖片資源優(yōu)化
圖片是占用空間比較大的資源,這是我們要重點(diǎn)優(yōu)化的地方唐责。
(1).使用壓縮過的圖片
這個在前面關(guān)于圖片壓縮已經(jīng)講過鳞溉,這里就不再累贅。
(2).只用一套圖片
對于絕大對數(shù)APP來說鼠哥,只需要取一套設(shè)計(jì)圖就足夠了熟菲。從內(nèi)存占用和適配的角度考慮,這一套圖建議放在xhdpi文件夾下朴恳;
(3).使用不帶alpha值的jpg圖片
對于非透明的大圖抄罕,jpg將會比png的大小有顯著的優(yōu)勢,雖然不是絕對的于颖,但是通常會減小到一半都不止呆贿。
(4).使用tinypng有損壓縮
支持上傳PNG圖片到官網(wǎng)上壓縮,然后下載保存恍飘,在保持alpha通道的情況下對PNG的壓縮可以達(dá)到1/3之內(nèi)榨崩,而且用肉眼基本上分辨不出壓縮的損失.
(5).使用webp格式
webp支持透明度,壓縮比比jpg更高但顯示效果卻不輸于jpg,從Android 4.0+開始原生支持章母,但是不支持包含透明度母蛛,直到Android 4.2.1+才支持顯示含透明度的webp,使用的時候要特別注意乳怎。
(6).使用svg
矢量圖是由點(diǎn)與線組成,和位圖不一樣,它再放大也能保持清晰度彩郊,而且使用矢量圖比位圖設(shè)計(jì)方案能節(jié)約30~40%的空間,現(xiàn)在谷歌一直在強(qiáng)調(diào)扁平化方式蚪缀,矢量圖可很好的契合該設(shè)計(jì)理念秫逝。
- 占用存儲空間小
- 無極拉伸不會出現(xiàn)鋸齒,可以照顧不同尺寸的機(jī)型
- Android Studio自帶很多資源
(7).使用shape
特別是在扁平化盛行的當(dāng)下询枚,很多純色的漸變的圓角的圖片都可以用shape實(shí)現(xiàn)违帆,代碼靈活可控,省去了大量的背景圖片金蜀。
(8).使用著色方案
相信你的工程里也有很多selector文件刷后,也有很多相似的圖片只是顏色不同,通過著色方案我們能大大減輕這樣的工作量渊抄,減少這樣的文件尝胆。
(9).對打包后的圖片進(jìn)行壓縮
使用7zip壓縮方式對圖片進(jìn)行壓縮,建議使用微信的AndResGuard
3.資源動態(tài)加載
資源可以動態(tài)加載,減小apk體積护桦。
(1).在線化素材庫
如果你的APP支持素材庫(比如聊天表情庫)的話含衔,考慮在線加載模式,因?yàn)橥夭膸於加胁恍〉捏w積
(2).皮膚加載
有的app用到皮膚庫二庵,這是就可以使用動態(tài)加載贪染。
(3).模塊插件化
如果模塊過得,apk體積過大催享,可以考慮插件化抑进,來減少體積。
4.lib庫優(yōu)化
只提供對主流架構(gòu)的支持睡陪,比如arm寺渗,對于mips和x86架構(gòu)可以考慮不支持,這樣可以大大減小APK的體積.
5.7zip壓縮資源
對于assets或者raw文件夾中的資源兰迫,可以使用7zip壓縮信殊,使用時進(jìn)行解壓。
6.代碼混淆
在gradle使用minifyEnabled進(jìn)行Proguard混淆的配置.
android {
buildTypes {
release {
minifyEnabled true
}
}
}
為什么代碼混淆可以讓apk變小?
1)可以刪除注釋和不用的代碼汁果。
2)將java文件名改成短名
3)將方法名改成短名
7.資源(res)混淆
資源混淆簡單來說希望實(shí)現(xiàn)將res/drawable/icon,png變成res/drawable/a.png,或我們甚至可以將文件路徑也同時混淆涡拘,改成r/s/a.png。
建議使用微信的AndResGuard
8.使用微信AndResGuard
使用微信AndResGuard對資源混淆并且壓縮圖片res等資源
apply plugin: 'AndResGuard'
buildscript {
dependencies {
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.7'
}
}
andResGuard {
mappingFile = null
use7zip = true
useSign = true
keepRoot = false
// add <your_application_id>.R.drawable.icon into whitelist.
// because the launcher will get thgge icon with his name
def packageName = <your_application_id>
whiteList = [
//for your icon
packageName + ".R.drawable.icon",
//for fabric
packageName + ".R.string.com.crashlytics.*",
//for umeng update
packageName + ".R.string.umeng*",
packageName + ".R.string.UM*",
packageName + ".R.string.tb_*",
packageName + ".R.layout.umeng*",
packageName + ".R.layout.tb_*",
packageName + ".R.drawable.umeng*",
packageName + ".R.drawable.tb_*",
packageName + ".R.anim.umeng*",
packageName + ".R.color.umeng*",
packageName + ".R.color.tb_*",
packageName + ".R.style.*UM*",
packageName + ".R.style.umeng*",
packageName + ".R.id.umeng*"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
"resources.arsc"
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.1.7'
//path = "/usr/local/bin/7za"
}
}
9.Facebook的redex優(yōu)化字節(jié)碼
redex是facebook發(fā)布的一款android字節(jié)碼的優(yōu)化工具.
redex