【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )
文章目錄
- 一、開啟資源壓縮
- 二、啟用嚴格模式的資源引用檢查
- 三、自定義保留/移除資源配置
- 四、資源壓縮效果
- 五、完整配置
- 1、keep.xml 配置
- 2、build.gradle 構建腳本
- 六、參考資料
一、開啟資源壓縮
縮減、混淆處理和優化應用 ( 官方文檔 ) : https://developer.android.google.cn/studio/build/shrink-code
資源壓縮 的前提是 代碼壓縮 必須開啟 , 否則資源壓縮無效 ;
代碼壓縮就是 混淆操作 , 參考 【Android 安裝包優化】開啟 ProGuard 混淆 ( 壓縮 Shrink | 優化 Optimize | 混淆 Obfuscate | 預檢 | 混淆文件編寫 | 混淆前后對比 ) 博客 ;
編譯打包時 , 先進行代碼壓縮混淆 , 刪除不必要的代碼 ; 然后使用資源壓縮器移除不相關的資源 ; ( 先處理代碼 , 再處理資源 )
資源壓縮不是簡單的將資源刪除 , 而是將資源的文件保留 , 資源的實際內容替換掉 , 如 XML 文件資源 , 將其只保留一個根節點 ;
資源壓縮配置是在 build.gradle 構建腳本中的 " android / buildTypes " 下的 debug / release 下配置 shrinkResources true 選項 ;
資源壓縮 配置示例 :
android {buildTypes {debug {shrinkResources trueminifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}release {shrinkResources true minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}} }二、啟用嚴格模式的資源引用檢查
資源壓縮器 壓縮資源時 , 默認使用比較保守的模式 , 通過動態 id 獲取資源不會被移除 ;
動態 id 獲取資源 , 參考 【Android 安裝包優化】移除無用資源 ( 自動移除無用資源 | 直接引用資源 | 動態獲取資源 id | Lint 檢查資源 ) 二、直接引用資源與動態獲取資源 2、動態獲取資源 id 博客章節 ;
保守模式下進行資源壓縮 , 沒有任何效果 , 因此這里要啟用嚴格模式 ;
在 " res/raw " 目錄下創建 " keep.xml " 文件 , 文件內容如下 :
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"tools:shrinkMode="strict" />這樣就啟用了應用資源的嚴格壓縮模式 ;
三、自定義保留/移除資源配置
參考文檔 : 自定義要保留的資源
如果開發者有想要特定保留或者必須移除的資源 , 可以進行自定義配置 ;
在 " res/raw " 目錄下創建 " keep.xml " 文件中可以配置 保留 / 移除 的資源 ;
使用 tools:keep 屬性指定要保留的資源 ; 如果保留多個資源使用逗號隔開 ;
使用 tools:discard 屬性指定要移除的資源 ; 如果移除多個資源使用逗號隔開 ;
該設置支持 * 通配符 設置 ,
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"tools:shrinkMode="strict"tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"tools:discard="@layout/unused2" />
四、資源壓縮效果
啟動資源壓縮后 , 壓縮后的布局資源變成了如下內容 , 程序中沒有引用該資源 , 在編譯時 , 該資源自動替換成如下類型 ;
<?xml version="1.0" encoding="utf-8"?> <x />
五、完整配置
1、keep.xml 配置
res/raw/keep.xml 配置文件 :
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"tools:shrinkMode="strict" />2、build.gradle 構建腳本
plugins {id 'com.android.application'id 'kotlin-android' }android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "kim.hsl.svg"minSdkVersion 18targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"// 生成 PNG 圖片配置//generatedDensities = ['hdpi', 'mdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi']// 使用 com.android.support:appcompat 支持庫配置vectorDrawables.useSupportLibrary = true// 國際化資源配置, 只打包默認資源與英文資源resConfigs 'en'}buildTypes {debug {// 開啟資源壓縮shrinkResources true// 開啟代碼壓縮minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}release {// 開啟資源壓縮shrinkResources true// 開啟代碼壓縮minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'} }dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"implementation 'androidx.core:core-ktx:1.3.2'// 矢量圖支持庫 , 支持 5.0 以下版本手機使用矢量圖 , 這個是創建應用時自帶的配置implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }
六、參考資料
參考官方文檔 :
- 縮減、混淆處理和優化應用 : https://developer.android.google.cn/studio/build/shrink-code
參考之前的博客資源 :
- 【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )
- 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的報錯信息 | Proguard 混淆映射文件 mapping.txt )
- 【Android 安全】DEX 加密 ( Proguard 混淆 | 將混淆后的報錯信息轉為原始報錯信息 | retrace.bat 命令執行目錄 | 暴露更少信息 )
- 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的報錯信息 | Proguard 混淆映射文件 mapping.txt )
博客資源 :
-
GitHub 項目源碼 : https://github.com/han1202012/SVG
-
下載地址 :
總結
以上是生活随笔為你收集整理的【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的 Serverless 实战 — 云
- 下一篇: 【Android 安装包优化】资源混淆