混淆代码中 ,如果代码中用了 反射的 ,千万要注意 要隔离 。
常见用法:
-keep class 保留类
-keepclassmembers 保留类中的方法或者字段名
-keepclasseswithmembernames 保留类名和类中的方法或者字段名
-dontwarn [class_filter] 不提示warnning
-injars 表示你要混淆的jar文件
-outjars 是混淆后的jar文件名
-libraryjars 是混淆时需要引用的android库
-ignorewarning 表示混淆时忽略所以的警告
-dontoptimize 不进行优化,这句代码非常重要。并且配置中不能有-dontpreverify字段;-dontpreverify在混淆jar时没有问题但是在apk应用中使用该jar后对apk进行混淆时就会失败。
遇见问题:
1.类型转换错误,因为我用的泛型,所以在调用某些方法的时候,会出现这种错误,后面在混淆配置文件加了一个过滤泛型的语句,如下。
-keepattributes Signature
过后,就没有出现类似的类型转换错误。
2.用到 annotation的地方,要加入一行代码,如下:
-keepattributes *Annotation*
这样就能过滤掉所有的annotation,否则也会抛出空指针异常。
3.过滤掉 log打印消息
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}