android开发Proguard混淆与反射
2015-07-03 09:26
435 查看
http://charles-tanchao.diandian.com/post/2012-05-24/20118715
由于前面开发数据操作类,所以利用反射,封装了一个BaseDao,本来在平常的时候,调试都没有出问题,可是直到用了 Proguard混淆以后,就出现各种错误,最开始是类型转换错误,到了后面就变成空指针异常,并且已经发布出去,手机上不调试,所以就只能把报错信息保存到文件中,每次查看。
混淆以后,出现错误,每次看报错信息,连方法都难找到。虽说有属性对应的txt,但是有些混淆的方法名是一模一样,所以找起来相当麻烦。
下面就把我遇见的问题分享出来吧。
第一个,类型转换错误,因为我用的泛型,所以在调用某些方法的时候,会出现这种错误,后面在混淆配置文件加了一个过滤泛型的语句,如下。
过后,就没有出现类似的类型转换错误。
第二个,空指针异常,这个错误是我对比前面的错误来说,所用的时间比较短,开始是找不到方法到底是哪个(原因是上面提到的混淆后方法名相同),所以就把这个类里面的所有方法都过滤掉,这样我没用多少时间,也就找到了具体的方法,可还是不明白原因,后面发现了其中的一个if判断,我利用反射筛选方法,关键字是“get”,突然我就震精了,大叫一声——soga,原来我 model的 set/get方法名全部都被混淆了,所以筛选不到方法,返回的也就是null值,自然下面用到这个方法的返回值就会抛出空指针异常。
解决方法:把 model包下面的所有类,全部过滤掉。
总结:如要用到反射,反射一般就会利用到泛型,所以必须要把泛型的全部过滤掉,如果有根据变量名或者方法名判断的,记得所在的类需过滤掉,之中还有用到 annotation的地方,要加入一行代码,如下:
这样就能过滤掉所有的annotation,否则也会抛出空指针异常。
Proguard官方都有说具体要过滤什么,所以还是要多看看官方的说明啊~
由于前面开发数据操作类,所以利用反射,封装了一个BaseDao,本来在平常的时候,调试都没有出问题,可是直到用了 Proguard混淆以后,就出现各种错误,最开始是类型转换错误,到了后面就变成空指针异常,并且已经发布出去,手机上不调试,所以就只能把报错信息保存到文件中,每次查看。
混淆以后,出现错误,每次看报错信息,连方法都难找到。虽说有属性对应的txt,但是有些混淆的方法名是一模一样,所以找起来相当麻烦。
下面就把我遇见的问题分享出来吧。
第一个,类型转换错误,因为我用的泛型,所以在调用某些方法的时候,会出现这种错误,后面在混淆配置文件加了一个过滤泛型的语句,如下。
-keepattributes Signature
过后,就没有出现类似的类型转换错误。
第二个,空指针异常,这个错误是我对比前面的错误来说,所用的时间比较短,开始是找不到方法到底是哪个(原因是上面提到的混淆后方法名相同),所以就把这个类里面的所有方法都过滤掉,这样我没用多少时间,也就找到了具体的方法,可还是不明白原因,后面发现了其中的一个if判断,我利用反射筛选方法,关键字是“get”,突然我就震精了,大叫一声——soga,原来我 model的 set/get方法名全部都被混淆了,所以筛选不到方法,返回的也就是null值,自然下面用到这个方法的返回值就会抛出空指针异常。
解决方法:把 model包下面的所有类,全部过滤掉。
总结:如要用到反射,反射一般就会利用到泛型,所以必须要把泛型的全部过滤掉,如果有根据变量名或者方法名判断的,记得所在的类需过滤掉,之中还有用到 annotation的地方,要加入一行代码,如下:
-keepattributes *Annotation*
这样就能过滤掉所有的annotation,否则也会抛出空指针异常。
Proguard官方都有说具体要过滤什么,所以还是要多看看官方的说明啊~
相关文章推荐
- edittext禁止android软键盘弹出
- Android SDK镜像代理
- android 应用通过友盟进行自动升级简介
- Butter Knife 和 AndroidAnnotations
- android 单选按钮 确定对话框
- 关于android .9.png图片,中文简称点九
- Android中Context详解 ---- 你所不知道的Context
- Android 长链接的尝试
- Android 实现记住用户名和密码的功能
- android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- 使用maven 一行命令自动生成签名后的apk
- Android 手机影音 开发过程记录(四)
- Android ADB基础知识
- Android开发利用service实现背景音乐播放
- Android 如何创建组合控件
- android该系统的应用API选择演示版本
- android在线浏览图片
- Android之NDK开发
- Android图片浏览
- Android.mk 变量解释