zoukankan      html  css  js  c++  java
  • Android Proguard Questions

    由于前面开发数据操作类,所以利用反射,封装了一个BaseDao,本来在平常的时候,调试都没有出问题,可是知道用了 Proguard混淆以后,就出现各种错误,最开始是类型转换错误,到了后面就变成空指针异常,各种错误,并且以及发布出去,手机上不调试,所以就只能把报错信息保存到文件中,每次查看。

    混淆以后,所有方法名都出了错误,每次看报错信息,连方法都难找到,所说有属性对应的txt,但是有些混淆的方法名是一模一样,所以找起来相当麻烦。

    Frequently Asked Questions:

    1.类型转换错误

    因为我用的泛型,所以在调用某些方法的时候,会出现这种错误,后面在混淆配置文件加了一个过滤泛型的语句,如下。

    -keepattributes Signature

    过后,就没有出现类似的类型转换错误。

    2.空指针异常

    这个错误是我对比前面的错误来说,所用的时间比较短,开始是实在找不到方法到底是哪个(原因是上面提到的混淆后方法名相同),所以就把这个类里面的所有方法都过滤掉,这样我没用多少时间,也就找到了具体的方法,可还是不明白原因,后面发现了其中的一个if判断,我利用反射筛选方法,关键字是“get”,突然我就震精了,大叫一声——soga,原来我 model set/get方法名全部都被混淆了,所以筛选不到方法,返回的也就是null值,自然下面用到这个方法的返回值就会抛出空指针异常。

    解决方法:把 model包下面的所有类,全部过滤掉。

    总结:如要用到反射,反射一般就会利用到泛型,所以必须要把泛型的全部过滤掉,如果有更具变量名或者方法没判断的,记得所在的类要过滤掉,之中还有用到 annotation的地方,要加入一行代码,如下:

    -keepattributes *Annotation*
    这样就能过滤掉所有的annotation,否则也会抛出空指针异常。

    Proguard官方都有说具体要过滤什么,所以还是要多看看官方的说明啊~

  • 相关阅读:
    死锁分析-(DML+DDL触发Server层死锁)
    archery 1.80推送工单到飞书webhook失败解决方案
    mysql执行计划 Select tables optimized away
    apparmor mysql_Ubuntu 上更改 MySQL 数据库数据存储目录
    查看docker容器的tcp连接(转)
    Mongo副本集搭建方式
    数据库字段命名方法
    C# DataGridview控件自动下拉到最后一行
    C# datagridview绑定List<string>显示的是数据长度
    DataGridView 清空数据
  • 原文地址:https://www.cnblogs.com/qiengo/p/2519153.html
Copyright © 2011-2022 走看看