【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )
文章目錄
- 一、開啟 ProGuard 混淆
- 二、混淆文件編寫
- 三、混淆前后對比
- 四、build.gradle 完整配置文件
- 五、參考資料
一、開啟 ProGuard 混淆
在 build.gradle 中 開啟 Proguard , 在編譯時 , 會自動進行如下一系列優化 :
-
壓縮 Shrink : 檢查 并 刪除 沒有使用的類 , 字段 , 方法 , 屬性 ; 這里要注意 , 如果通過反射使用一個類時 , 可能會在該步驟被刪除 ; 這里需要配置混淆文件 , 保留反射中使用的類 ;
-
優化 Optimize : 優化字節碼 , 移除無用指令 ;
-
混淆 Obfuscate : 混淆 Java 層代碼 , 使用無意義的標識符替代 Java 中的類名 , 變量名 , 方法名 等名稱 ;
-
預檢 Preveirfy : 預檢 Java 平臺上預處理的代碼 ;
開啟 ProGuard 配置 : 在 build.gradle 構建腳本中的 " android / buildTypes " 層級中 , 配置 debug / release 相關選項 , 即可開啟 ProGuard ;
設置 minifyEnabled true 配置 , 并配置 proguardFiles 混淆配置文件 , 在 Android Studio 中 , 一般會生成一個默認的混淆配置文件 ;
android {buildTypes {debug {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}} }混淆配置文件說明 :
在 proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’ 中 , 配置了兩個文件,
其中 proguard-android-optimize.txt 是默認的混淆配置文件 , 由系統自動生成 ; proguard-rules.pro 是用戶自己配置的混淆配置文件 , 在進行打包時 , 將這兩個 ProGuard 配置文件進行合并處理 ;
二、混淆文件編寫
混淆文件編寫 : 引用的第三方庫及服務 , 一般不進行混淆 , 去相應的開源頁面 , 查找混淆配置 ;
遇到某個包或類編譯遇到警告退出 , -dontwarn 配置該包不要爆出警告 ;
遇到沒有找到的類 , 使用 -keep 不要混淆該類 ;
常用的混淆配置 :
" -dontwarn " : 不要報出警告信息 , 如果出現警告 , 編譯打包會被終止 ;
# com 包名下不要爆出警告 -dontwarn com.**" -keep " : 不要混淆的類 ;
# com 包名下的類不要混淆 -keep class com.**{*;}三、混淆前后對比
混淆前編譯的 APK 安裝包 : 3.6MB\rm 3.6 MB3.6MB
混淆后編譯的 APK 安裝包 : 1.7MB\rm 1.7MB1.7MB
四、build.gradle 完整配置文件
完整的 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 {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}release {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' }五、參考資料
參考之前的博客資源 :
- 【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 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 安装包优化】移除无用资
- 下一篇: 我的 Serverless 实战 — S