proguard 踩坑之路

背景:

最近项目中引入了一个三方的库,然后在打包的时候发现一些build的一些task没有执行。原先release版本过滤的d ,v日志也在控制台那边出现了,然后就去寻找是不是某个配置导致了一些proguard的task没有执行。

介绍:

proguard提供了一种比较先进的安全组件来保证android APK和SDK被静态代码分析,所以其最主要的功能就是对我们的代码进行混淆,不让一些黑客可以通过一些静态代码的分析来攻击我们的应用。但是其实proguard还提供了一些其他的功能,那我们先来看下到底做了哪些事情。

功能和流程:

功能:shrinker(压缩),optimizer(优化),obfuscator(混淆),preverifier(预校验)

shrink: 检测并移除没有用到的类,变量,方法和属性;

optimize: 优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码。

obfuscate: 使用短又没有语义的名字重命名非入口类的类名,变量名,方法名。入口类的名字保持不变。

preverify: 预校验代码是否符合Java1.6或者更高的规范(唯一一个与入口类不相关的步骤)

流程:

shrink-->optimize-->obfuscate-->preverify

项目配置:

android studio会在build.gradle下配置如下信息:

buildTypes {

release {

minifyEnabled true

proguard FilesgetDefaultProguardFile('proguard-android-optimize.txt') proguard-rules.pro

}

}

其中proguard-android.txt这个文件是 android sdk提供的一个默认的produard的默认配置项存放在{ANDROID_SDK_ROOT}/tools/proguard/ 但是我们对于发布的release版本应使用proguard-android-optimize.txt,此文件主要配置的是一些默认的proguard配置,而和‘proguard-android’的最大区别在与‘proguard-android-optimize.txt’中开启了Proguard optimize的选项(optimize是Proguard的一项功能)

问题原因:

由于proguard-android配置如下导致主功能optimize,preverify没执行

-dontoptimize

-dontpreverify

注意点:

1.三方库已经混淆的库,需要在主项目添加keep不再进行二次混淆

2.反射获取对象和方法要保证不被混淆。

3.反射三方库的混淆方法和对象存在风险不建议这么使用

4.aar和添加独立module的时候检查是否添加了不必要的混淆

你可能感兴趣的:(proguard 踩坑之路)