http://charles-tanchao.diandian.com/post/2012-05-24/20118715

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

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

下面就把我遇见的问题分享出来吧。

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

-keepattributes Signature

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

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

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

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

-keepattributes *Annotation*

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

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

android开发Proguard混淆与反射相关推荐

  1. Android项目:proguard混淆之常见开源项目混淆配置

    1.Gson混淆 ## ---------------------------------- ## ########## Gson混淆 ########## ## ------------------ ...

  2. Android开发中混淆后Gson序列化、反序列化的那些坑,androidstudio配置

    为什么呢? 因为反序列化创建对象本质还是利用反射, 会根据 json 字符串的 key 作为属性名称, value 则对应属性值. 如何解决 将序列化和反序列化的类排除混淆 使用 @Serialize ...

  3. 聚焦Android之proguard混淆工具的使用

    proguard介绍 proguard是Android SDK 自带混淆工具,在sdk目录中的位置如下: # proguard 目录 Android/sdk/tools/proguard/ 复制代码 ...

  4. 安卓中ProGuard混淆基本使用

    1.  简介 因为Java代码是非常容易反编码的,为了很好的保护Java源代码,我们需要对编译好后的class文件进行混淆. ProGuard是一个用于Android开发用于混淆最终的项目,增加项目被 ...

  5. Android开发错误汇总

    大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合! [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Appl ...

  6. Android开发实践:利用ProGuard进行代码混淆

    由于Android的代码大都是Java代码,所以挺容易被反编译的,好在Android ADT为我们集成了混淆代码的工具,一来可以混淆我们的代码,让程序被反编译后基本看不懂,另外还能起到代码优化的作用. ...

  7. Android 开发应该掌握的 Proguard 技巧

    本文由玉刚说写作平台提供写作赞助 原作者:Sen 版权声明:本文版权归微信公众号玉刚说所有,未经许可,不得以任何形式转载 Proguard介绍 Proguard被人们熟知的是它的混淆功能,根据Prog ...

  8. Android开发中的Proguard

    转自:https://blog.csdn.net/ccpat/article/details/52059344 Proguard是Android开发时经常会用到的一个工具,在Android SDK中已 ...

  9. [转载]关于Android ProGuard混淆学习记录

    转自:http://www.cnitblog.com/zouzheng/archive/2011/01/12/72630.aspx 前段时间把Android的工程用Ant Build搞定后,现在需要把 ...

最新文章

  1. mysql unsigned zerofill_Mysql中Unsigned和Zerofill数据型的使用(细节也很重要啊)
  2. sm4 前后端 加密_这7个开源的Spring Boot前后端分离项目整理给你
  3. 原来这样做运维,就可以不被 KO丨课程推广
  4. 【网络安全】Linux内核部分文件分析
  5. 怎么用ajax导出word_Word文档太大怎么压缩?你应该用这种方法压缩
  6. 三十九、Vue项目上手 | 用户管理系统 实现添加用户功能(中篇)
  7. android8.1启动前台服务,Android - 保活(1)前台服务保活
  8. 全国计算机等级考试题库二级C操作题100套(第80套)
  9. flowable 实现多实例-会签-动态配置人员 参考demo
  10. DbUtils操作数据库的用法
  11. 如何使用Hue上创建一个完整Oozie工作流
  12. SAE SENT单边半字节传输协议里的CRC4与CRC6检验码编程
  13. python父亲节礼物送什么_父亲节送什么礼物好
  14. 2022-03-05 使用 putty 远程连接阿里云服务器
  15. 人类一败涂地显示启动服务器失败,人类一败涂地进不去解决方法-人类跌落梦境手游进不去方法详解...
  16. 移动app需求分析与用例设计
  17. 解决安装PHP 5.6.40版本途中坑坑洼洼
  18. 哈希表--管理公司员工信息
  19. HyperLedger Fabric - 超级账本(2.2)启动网络 - 手动
  20. stata命令汇总_Stata常用命令应知应会(500条)

热门文章

  1. 计算机专业PS模版,计算机专业PS范例十一
  2. html怎样同框架页面内跳转,使用iframe框架时,实现子页面内跳转到整个页面,而不是在子页面内跳转...
  3. mysql表损坏监控_监控mysql启动情况并检测表错误修复
  4. matlab程序怎么改,修改matlab程序
  5. c++ list 修改_C/C++编程笔记:数据结构系列——顺序表的实现,内含源码
  6. 阿里巴巴商城源码JAVA_阿里巴巴Dubbo实现的源码分析
  7. Docker数据卷(Volume)
  8. 解决An error occured while deploying the file. This probably means that the app contains ARM...
  9. 如何使用Dirsearch探测Web目录
  10. 解决: pip install 由于目标计算机积极拒绝,无法连接