性能優(yōu)化實(shí)踐(一)-安裝包瘦身

隨著android項(xiàng)目不斷迭代,apk包會(huì)越來越大,那么這篇文章來講下一些基本的瘦身策略。

一、資源優(yōu)化

1.1 Lint工具去掉項(xiàng)目中的冗余項(xiàng)目

android stuido自帶的檢驗(yàn)工程規(guī)范的工具,可以檢測內(nèi)容包括如下幾點(diǎn):

  • 未使用的布局
  • 未使用的資源(如:圖片)
  • values中string.xml 、colors.xml 、dimens.xml 、styles.xml 中未使用的屬性項(xiàng)

使用:
AS菜單欄Analyze -> Run Inspection by Name -> 輸入unused resources -> 選擇Whole project -> 檢測
然后會(huì)在工程下方得到檢測結(jié)果:

會(huì)列出優(yōu)化項(xiàng),但是不建議選擇右邊紅框標(biāo)識(shí)的按鈕,執(zhí)行一鍵清除。Lint只是給出建議,你還是根據(jù)項(xiàng)目需要來刪除無用資源會(huì)好點(diǎn)。

1.2 圖片資源優(yōu)化
經(jīng)過Lint過濾之后,會(huì)減少部分無用資源。再從剩余的圖片文件下手:

  • 大圖片壓縮(也可以歸設(shè)計(jì)處理):
    圖片壓縮工具:tinypng.com/
    圖片壓縮轉(zhuǎn)換工具:isparta.github.io/

  • 合理選擇圖片格式:
    png: 無損 圖片質(zhì)量高 但是占用存儲(chǔ)比JPEG大
    jpeg: 有損 圖片質(zhì)量稍差 但是占用存儲(chǔ)比PNG小
    svg:一些圖片的描述,犧牲CPU的計(jì)算能力的,節(jié)省空間。使用的原則:簡單的圖標(biāo)。
    WebP: (https://developers.google.com/speed/webp/)的格式(Facebook、騰訊、淘寶在用。)缺點(diǎn):加載相比于PNG要慢很多。 但是配置比較高。

1.3 資源混淆
使用微信開源庫AndResGuard,它是一個(gè)縮小APK大小的工具,它的原理類似Java Proguard,但是只針對(duì)資源。它會(huì)將原本冗長的資源路徑變短。

集成:

在整個(gè)Project build.gradle中:

dependencies {
    classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.10'
}

在app build.gradle中:

apply plugin: ‘AndResGuard'
andResGuard {
    mappingFile = null
    use7zip = true
    useSign = true
    keepRoot = false
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
            "resources.arsc"
    ]
    whiteList = [
            // your icon
            "R.drawable.icon",
            // Umeng sdk
            "R.anim.umeng*",
            "R.string.umeng*",
            "R.string.UM*",
            "R.string.tb_*",
            "R.layout.umeng*",
            "R.layout.socialize_*",
            "R.layout.*messager*",
            "R.layout.tb_*",
            "R.color.umeng*",
            "R.color.tb_*",
            "R.style.*UM*",
            "R.style.umeng*",
            "R.drawable.umeng*",
            "R.drawable.tb_*",
            "R.drawable.sina*",
            "R.drawable.qq_*",
            "R.drawable.tb_*",
            "R.id.umeng*",
            "R.id.*messager*",
            "R.id.progress_bar_parent",
            "R.id.socialize_*",
            "R.id.webView"
    ]
    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.2.10'
        //path = "/usr/local/bin/7za"  --- Linux
        //path = "D:\7za\7za.exe" --- Windows
    }
}

其中whiteList(白名單)中指定不需要進(jìn)行混淆的資源路徑規(guī)則,主要是一些第三方SDK,因?yàn)橛行㏒DK的代碼中引用到對(duì)應(yīng)的資源文件,如果對(duì)其進(jìn)行混淆,會(huì)導(dǎo)致找不到對(duì)應(yīng)資源文件,出現(xiàn)crash,所以不能對(duì)其資源文件進(jìn)行混淆。由于公司的項(xiàng)目中使用到了友盟和融云,所以將這兩個(gè)SDK加入白名單,更多的白名單可以查看:

AndResGuard白名單

配置完,同步Gradle之后:

例如想打release包:雙擊使用andresguard :resguardRelease
對(duì)應(yīng)項(xiàng)目中打出如左邊顯示的包。

經(jīng)過上面的優(yōu)化,對(duì)應(yīng)一般的瘦身要求來說就已經(jīng)足夠了,如果對(duì)優(yōu)化有極致追求的話,那接下來就考慮優(yōu)化下代碼吧。

二、代碼優(yōu)化

2.1 過大第三方工程引入造成的代碼量冗余
有些三方工具非常好用,功能也很齊全,但是我們項(xiàng)目中可能只用到它很小的一部分功能,所以對(duì)于大項(xiàng)目追求優(yōu)化極致的,可以考慮去掉部分功能,或者重構(gòu)。另外有些可有可無的三方工具:比如Butterknife,只是給coder稍微省了點(diǎn)代碼量,但是對(duì)工程沒有其他半點(diǎn)好處,雖然不是很大,建議也別用了。

2.2 項(xiàng)目代碼冗余
這部分只能靠保持良好的編碼習(xí)慣,對(duì)你的代碼進(jìn)行持續(xù)的優(yōu)化或者重構(gòu),減少代碼的重復(fù),實(shí)現(xiàn)代碼的復(fù)用。不用的代碼別大段大段地注釋掉在那,變量名、方法名別太冗長等等也是一個(gè)方面。

2.3 代碼混淆
代碼混淆不僅能夠提高APK的反編譯,還能較小APK大??;混淆可以刪除注釋和無用的代碼;可以將Java文件,變量,方法名登改為短名,這樣就可以縮減字符所占的空間,當(dāng)然不是所有文件都能混淆的,這屬于混淆配置的范疇了。

好了,就總結(jié)這么多,文章不介紹原理機(jī)制了,有興趣的可以看看這篇:https://blog.csdn.net/chenliguan/article/details/54176626

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

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

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