前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

作者头像
韩曙亮
发布2023-03-29 12:16:09
3.6K0
发布2023-03-29 12:16:09
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、开启 ProGuard 混淆


在 build.gradle 中 开启 Proguard , 在编译时 , 会自动进行如下一系列优化 :

  • 压缩 Shrink : 检查 并 删除 没有使用的类 , 字段 , 方法 , 属性 ; 这里要注意 , 如果通过反射使用一个类时 , 可能会在该步骤被删除 ; 这里需要配置混淆文件 , 保留反射中使用的类 ;
  • 优化 Optimize : 优化字节码 , 移除无用指令 ;
  • 混淆 Obfuscate : 混淆 Java 层代码 , 使用无意义的标识符替代 Java 中的类名 , 变量名 , 方法名 等名称 ;
  • 预检 Preveirfy : 预检 Java 平台上预处理的代码 ;

开启 ProGuard 配置 : 在 build.gradle 构建脚本中的 " android / buildTypes " 层级中 , 配置 debug / release 相关选项 , 即可开启 ProGuard ;

设置 minifyEnabled true 配置 , 并配置 proguardFiles 混淆配置文件 , 在 Android Studio 中 , 一般会生成一个默认的混淆配置文件 ;

代码语言:javascript
复制
android {
    buildTypes {
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        
        release {
            minifyEnabled true
            proguardFiles 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 " : 不要报出警告信息 , 如果出现警告 , 编译打包会被终止 ;

代码语言:javascript
复制
# com 包名下不要爆出警告
-dontwarn com.**

" -keep " : 不要混淆的类 ;

代码语言:javascript
复制
# com 包名下的类不要混淆
-keep class com.**{*;}

三、混淆前后对比


混淆前编译的 APK 安装包 :

\rm 3.6 MB
在这里插入图片描述
在这里插入图片描述

混淆后编译的 APK 安装包 :

\rm 1.7MB
在这里插入图片描述
在这里插入图片描述

四、build.gradle 完整配置文件


完整的 build.gradle 构建脚本 ;

代码语言:javascript
复制
plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "kim.hsl.svg"
        minSdkVersion 18
        targetSdkVersion 30
        versionCode 1
        versionName "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 true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility 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'
}

五、参考资料


参考之前的博客资源 :

博客资源 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、开启 ProGuard 混淆
  • 二、混淆文件编写
  • 三、混淆前后对比
  • 四、build.gradle 完整配置文件
  • 五、参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档