ProGuard混淆常见错误

1、Proguard returned with error code 1. See console

  • 更新proguard版本

  • android-support-v4 不进行混淆

  • 添加缺少相应的库


2、使用gson包解析数据时,出现missing type parameter异常

  • 在 proguard.cfg中添加

-dontobfuscate
-dontoptimize

  • 在 proguard.cfg中添加

# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }


3、类型转换错误

-keepattributes Signature

 

4、空指针异常

混淆过滤掉相关类与方法


5、安卓代码混淆与反射冲突,地图无法显示等问题解决及反编译方法,安卓反编译此前的代码混淆,因为并没有用到反射,所以常规的代码混淆方式一遍就能通过,而此项目中某些类利用到了反射机制(本人的这个项目中有即时通讯功能,所以有表情类资源,因此需要通过反射由文件名找到表情资源id),当由文件名去寻找资源id时就报空指针异常了,期初我并不知道什么原因,通过反编译已经混淆的apk,一步一步寻找到出错的地方,才恍然大悟,正是反射那一步出现了问题:Field field = R.drawable.class.getDeclaredField(name);走到这一步就挂了,程序直接崩溃。

解决办法:

  • 在proguard.cfg文件中,将反射用到的类中的变量不被混淆:

如:-keep public class com.byl.bean.Expressions { *; },表示Expressions 这个类及类中的所有变量及方法不被混淆,注意要写全路径;

  • 过滤泛型:

-keepattributes Signature

  • 最重要的一点:保持R文件不被混淆,否则,你的反射是获取不到资源id的

-keep class **.R$* {*;}


补充一下:上个问题解决后,接下来又遇到了一个问题就是混淆后,地图无法正常使用了,博主使用的是百度地图,在proguard.cfg也已经写明了:

-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}


6、android.provider.Settings$Global

# Project target.
target=android-19


7、java.lang.reflect.UndeclaredThrowableException

-keep interface com.dev.impl.**


8、内存溢出和无法写入堆栈

javaOptions in proguard := Seq(...)
or
javaOptions in (Proguard, proguard) := Seq(...)

 

9、Error: Unable to access jarfile ..libproguard.jar

路径问题


10、java.lang.NoSuchMethodError

没有相关方法,方法被混淆了,混淆过滤掉相关方法便可。


转载于:https://my.oschina.net/u/1175007/blog/476190

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值