方式一:
利用Android studio编译,在build.gradle文件中只要打开对应的开关就可以了,
minifyEnabled true
(正式版本才会混淆,如果想debug版本也混淆,将release中的两行配置复制到debug中就可以)配置如下
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.config
}
}
关于proguard-rules.pro文件,主要是关于混淆规则的定义,这里就不详细的描述了,可以参考
https://blog.csdn.net/ydt_lwj/article/details/44418297
方式二:
在系统中编译,使用Android.mk文件,具体的方式上面的链接中已经有说明了,这里想记录一下的是关于这个参数
-dontobfuscate(关闭混淆),我这儿在使用的时候按照说明,配置了这两个选项
LOCAL_PROGUARD_ENABLED := full
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
并且在proguard.flags中定义了相关规则,但是并没有混淆成功,但是在路径build/core/package.mk中是注释掉了dontobfuscate,然后现在不能按照上面的说明混淆了,可能我们系统中有某个地方修改了这个配置(一般情况下应该不会修改)
下面我们查找系统有哪个地方使用了-dontobfuscate这个参数
find . -name "*.mk" | xargs grep "dontobfuscate" -rn (查找命令)
结果真的发现系统中有其他地方添加了这个参数build/core/java.mk中
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# By default no obfuscation
proguard_flags += -dontobfuscate
所以此时Android.mk配置就应该变为
LOCAL_PROGUARD_ENABLED :=obfuscation
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
重新编译后果然是混淆成功的代码了