1、反射中使用的元素;
2、GSON的序列化与反序列化(本质还是用到了反射)
3、枚举也不要混淆(用到反射)
4、四大组件不要混淆(会导致Manifest名称与混淆后名称不一致)
5、其他:
①jni调用的java方法
②java的native方法
③js调用的java方法
④第三方库不建议混淆
⑤其他和反射相关的一些情况
⑥类之间有调用 static final常量
个人理解:不可混淆项目主要分两类:一类是反射;第二类是常量(final和Manifest等,都可以理解为常量)
参考文章:http://droidyue.com/blog/2016/07/10/understanding-android-obfuscated-code-by-proguard/
二、混淆进阶
-repackageclasses xxx.xxx.xxx(可以任意命名,比如包名)
https://medium.com/androiddevelopers/practical-proguard-rules-examples-5640a3907dc9
https://www.android-doc.com/m/view.php?aid=1160
添加该配置后,通过反编译打出来的APK,能看到,被混淆的代码(没keep的),会统一放到上面配置的xxx.xxx.xxx下,进一步降低代码的可读性。但是,同时会引入bug(google搜索’repackageclasses bug‘,即可搜到其他人遇到的bug情况)。经过权衡,目前我所开发的APP目前混淆的效果可以满足需要,且,参考了某宝、某信、某东APP,发现他们目前也没有使用上述配置的痕迹。所以,暂不配置。