测试环境下,代码都运行的好好的,没有bug,但是一打包成生产环境,有些功能就实现不出来了——不知道有没这种情况,哈哈哈,心累,,遇到了好几次了,如果测试下没问题,到了生产环境就有问题,那么很大可能就是—部分代码被混淆了(在你开启代码混淆后),像我们经常使用第三方的,一定要及时的加上作者备注的混淆说明,不然有时候忘记了,找半天找不到问题所在,那就很无语了。
偏偏有些,,,代码混淆说明也没有。。。这个时候就要注意了,需要自己找哪些类被混淆了。就像我之前用轻量级的数据库lite-orm。
在用于创建table表的bean类中使用了
// 指定自增,每个对象需要有一个主键
@PrimaryKey(AssignType.AUTO_INCREMENT)
在混淆后,这个PrimaryKey接口被混淆掉了。
在pro guard-rules中添加如下代码,将lite-orm-1.7.0.jar包中包名下的类全都不要混淆
-dontwarn com.litesuits.orm.**
-keep class com.litesuits.orm.** {*;}
同样的,,,在下午发布生产包的时候,测试了pingpp招行一网通支付,在输入了银行卡账号及一些信息后,输入支付密码时,,,软键盘居然不能弹框,,,,,为什么我打了这么多,,,,因为,,,,
于是乎又重新看了pingpp的开发文档,,该配置的都配置了,混淆规则也添加了,但是还是出现了问题,那么其中弹软键盘的一个activity叫PBKeyboardActivity,估计问题就是出在这个类上,于是对pingpp下cmbkeyboard.jar包下的类都添加不被混淆
-dontwarn cmb.pb.**
-keep class cmb.pb.** {*;}
果然就没问题了,
一般常见的混淆规则我们都知道,但是当接入第三方或者别人的库时,测试和生产环境下有出入,那么第一想法很有可能就是有些类被混淆了,当然如果你没有开启混淆功能,那肯定没事啦。
转了一篇Android 项目的代码混淆,Android proguard 使用说明还是很详细的。
http://blog.youkuaiyun.com/catoop/article/details/47208833