主要介绍向Android项目中添加混淆功能
增加混淆的原因
- 提高安全性,增加反编译的难度
- 减少APK的文件大小
实践
混淆的配置
一般情况下,app module 的 build.gradle
文件默认会有如下结构:
android { buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
因为开启混淆会使编译时间变长,所以debug
模式下不应该开启。我们需要做的是:
- 将
release
下minifyEnabled
的值改为true
,打开混淆; - 添加自定义的混淆规则
修改后文件内容如下:
buildTypes { release { minifyEnabled true //开启混淆 proguardFiles fileTree('prog').asList().toArray() proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
第二行是表示release下
第三行表示开启混淆
第四行表示文件夹prog下所有的文件都作为自定义混淆的配置文件加载;
这个是学习到的新语法。通过fileTree('prog').asList().toArray() 返回文件夹下所有的文件数组。
第五行表示加载默认的文件proguard-android.txt 和 proguard-rules.pro。
其中getDefaultProguardFile('proguard-android.txt') 表示的是位于 SDK 的 tools/proguard/
文件夹中的 proguard-android.txt,由Google官方提供的的默认的混淆规则。
注意:SDK中提供的默认的混淆配置文件,里面包含了常见的混淆屏蔽规则,所以在添加自定义规则的时候,先去默认的文件中查看是否已经存在,避免重复。
在向proguard-rules.pro文件中添加混淆规则的时候,不要与SDK提供的proguard-android.txt中的规则重复。其实proguard-android.txt里面已经包含绝大部分的常见的规则。
参考
- /Users/XXX/Library/Android/sdk/tools/proguard/proguard-android.txt