最近在自己项目中遇到一个崩溃問题debug版本不会,release版本会!!
一开始有点蒙还是老老实实根据操作步骤以及崩溃log,先定位导致崩溃的代码位置原来是某个JavaBean
在Gson
解析json
格式數据后,继续把这个对象给后面的业务逻辑使用然后崩溃了根据打印log分析json
字符串是正常啊?尴尬...
于是开始google功夫不负有心人,有人遇到類似问题提到是混淆后JavaBean
类的字段名称会变成a、b、c等之类的字符串与json
字符串中的key
不一致了。
改好之后重新打一个release包测试问题解决。反编譯apk包发现这些JavaBean
类没有被混淆正是我们想要的。
问题主要是使用了混淆编译的方式进行apk打包(其中不混淆编译进行apk打包则一切正常)因為JavaBean
(实体类)的字段名称必须与服务端返回json
字符串中的key
要一致,才能进行解析而混淆编译之后,客户端代码中的JavaBean
(实体类)的类名与其字段名称铨部变成了a、b、c、d等等字符串这与服务端返回的json
字符串中的key
不一致,导致解析失败
所以,解决的办法是:在进行混淆编译进行打包apk的時候过滤掉存放所有JavaBean
(实体类)的包不进行混淆编译。