app和aar包混淆:
先把 minifyEnabled 设为true , proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 有时候在proguard-rules.pro文件里面编辑了规则但是,但是没有反应 有可能proguard-rules的后缀是.text把它改回.pro就可以了
混淆规则
1.基本规则:
常见两条指令:
两颗星星表示把本包和所含子包下的类名都保持(类中的内容也会被混淆)
-keep class 包名.**
一颗星表示只是保持该包下的类名,而子包下的类名还是会被混淆(类中的内容也会被混淆)
-keep class 包名.*
以上两个方法保持类后,具体的方法跟变量都是会被混淆的,如果不想被混淆内容则:
-keep class 包名.** { *; }
2.什么时候不被混淆
一般以下情况都会不混淆:
- 使用了自定义控件那么要保证它们不参与混淆
- 使用了枚举要保证枚举不被混淆
- 对第三方库中的类不进行混淆
- 运用了反射的类也不进行混淆
- 使用了 Gson 之类的工具要使 JavaBean 类即实体类不被混淆
- 在引用第三方库的时候,一般会标明库的混淆规则的,建议在使用的时候就把混淆规则添加上去,免得到最后才去找
- 有用到 WebView 的 JS 调用也需要保证写的接口方法不混淆,原因和第一条一样
- Parcelable 的子类和 Creator 静态成员变量不混淆,否则会产生 Android.os.BadParcelableException 异常
对于第三方的则参考他们官网提供的混淆规则
总结
特别是aar包提供给第三方的时候,切记提供给人家的时候混淆要把人家要调用到的类跟方法排除掉,不然别人便调用不到你这个类跟方法,因为被混淆改了名字。
(以下内容参照网络博文加上自己的部分填坑。如有侵权,请联系我删除,谢谢!!)