性能優化-apk瘦身

作爲應用的使用者而言,apk的體積越小當然是越喜歡的。這樣不僅能節省手機的存儲空間,並且在應用市場下載的速度也快加快。所以,對於開發者來說,瞭解常用的apk瘦身技術是不可避免的。

一、圖片瘦身

1、webP使用

先看一張截圖

在這裏插入圖片描述
原始圖片爲png格式,大小爲38.5kb,經過轉換後大小爲6.7kb,僅僅是原圖的17%。但是使用webP要求手機最低支持版本爲api18 計版本4.3。如果你需要從4.0版本開始,就不用了考慮方式了,高於4.3版本,這樣圖片格式應該優先選擇。

webP批量轉換工具下載地址:谷歌官網webp轉換工具需要翻牆。其他方式可以自行百度。

2、png壓縮

png圖片相當於jpg圖片多了透明通道,所以它會佔用更大的內存,可以藉助工具對它壓縮

  • 可以採用ImageOptim或者Pngyu對png進行壓縮;
  • aapt會使用內置的壓縮算法來優化res/drawable/目錄嚇的PNG圖片,單也可能會導致本來已經優化過的圖片體積變大,這裏需要禁用aapt優化png圖片。
aaptOptions{
        cruncherEnabled = false
    }
3、jpg壓縮

使用packJPG或者guetzli工具壓縮jpg圖片。

4、使用shape

對於純色背景可以使用shape替換,萌購用代碼實現的,儘量用代碼實現

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="0dp"/>
    <solid android:color="#f00"/>
</shape>

二、res資源壓縮

1、開啓代碼混淆和去除無用資源
 buildTypes {
        release {
            shrinkResources true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
2、使用微信開源框架AndResGuard工具,對資源進一步混淆

配置參考github,微信AndResGuard資源混淆

三、冗餘代碼優化

四、Lint使用

打開android studio。依次選擇 Analyze-》Run Inspection By Name-》輸入要檢測的內容。
比如檢測無用資源,輸入unused resources
在這裏插入圖片描述
比如檢測無用代碼,輸入unused declaration
在這裏插入圖片描述

五、其他優化

1、壓縮存儲文件

比如存放在assets下的文件可以採用7Zip壓縮,在使用的時候進行解壓。

2、語言資源優化

在build.gradle中配置指定需要的語言類型

defaultConfig {
...
...
// 只保留指定和默認資源 ,中文和英文
        //當應用不需要支持幾十種語言時,可以通過配置 resConfigs 去除無用的語言資源。
        resConfigs('zh-rCN', 'en')
}
3、指定abi
defaultConfig {
...
...
	ndk{
       abiFilter("armeabi-v7a","x86")
    }
}
4、減少Enum使用

沒減少一個Enum的使用,可以減少1KB的大小,可以使用定義常量的替換方式。

六、split

使用split拆分包。比如我們的項目中在mdpi、hdpi、xhdpi…都有一份圖片,當然這樣做就是爲了適配不同的屏幕尺寸,防止圖片變形。但是如果我們需要對特定的屏幕尺寸,我們可能就只需要一個目錄下的圖片,這樣就需要藉助split了。如下,根據分辨率進行適配

android {
  ...
  splits {
    density {
      enable true
      exclude "ldpi", "hdpi", "xxxhdpi"
      compatibleScreens 'small', 'normal', 'large', 'xlarge'
    }
  }
  ...
}
  • exclude :包含的資源目錄
  • compatibleScreens :適配的屏幕尺寸

除了能夠適配資源外,還可以根據支持cpu架構的so進行拆分。 如果你的apk中引入了第三方庫比如推送類的服務,demo中一般會提供不同cpu架構的so庫,我們一般的做法是把所有的so都放到libs下,這樣做發現apk的體積瞬間暴漲。這樣就需要使用split了。

android {
  ...
  splits {
    abi {
      enable true
      reset()
      include 'x86', 'armeabi-v7a', 'mips'
      universalApk true
    }
  }
}

七、總結:

針對以上優化,優化效率最高的應該是圖片的壓縮,所以圖片的選擇對於apk的大小影響很大。另外第三方庫,so庫的合理使用同樣影響它的體積。針對混淆能夠避免我們的代碼沒有那麼容易被別人竊取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章