Open yuejinsheng opened 7 years ago
请问这个问题解决了么 我现在也是打包混淆之后 类型转换异常
混淆没有配好,
请问哪句混淆配置可以解决啊 我把作者本人的混淆配置都加进去了还是报错
这个问题解决没,我也碰到了同样的问题,打包安装后 转换错误
java.lang.ClassCastException: java.lang.Object cannot be cast to com.jaydenxiao.common.base.c
@yuejinsheng @liangning121 你好!你们的这个问题解决没,是怎么回事,我研究两三天了。。。。还是没搞清楚为什么会出现这种情况,这打包出来的apk反编译我也对比看了下,
Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast to kstar.mycommon.base.b
这是报错的地方,反编译出来找到这代码如下 根据报错的地方找到代码位置是下面 mModel= TUtil.getT(this,1);
mPresenter = TUtil.getT(this, 0);
mModel= TUtil.getT(this,1);
为什么要报错不是上面那行,这代码感觉差不多的额,特别这两个文件BasePresenter BaseModel都已经被混淆了,唯一的区别就是一个是抽象类一个是接口 我看了其他中有关混淆的issue,他们说将TUti可以解决这个问,但是其实这个类的类名已经被混淆了,只是里面的代码没有而已,如下图 这个有点不懂怎样将这个类的内容混淆,只知道怎样keep保持里面的内容不被混淆,网上也没查到。 最主要的问题,这个项目clone下的代码,打包编译出来的apk也是报这个错 好吧 大佬们,这到底什么情况,有知道的麻烦说一声,我真的要被这个玩疯了
这个问题终于解决了。并不是他们说的将TUtil混淆。本来开启混淆后会无差别的混淆其他代码,只是因为我们对一些保护了才留下来一些没被混淆的代码,所以我就奇怪怎么还能主动混淆其中一个文件,再说如果是这个文件的问题,那么在前面那行代码
mPresenter = TUtil.getT(this, 0);
就该报错了,怎么提示是下面的问题。再说作者在混淆文件下面配置了反射相关的方法是不被混淆的,这个工具类下面的所有代码都不被混淆。
#---------------------------------4.反射相关的类和方法-----------------------
##对commonutils报下的代码不警告
-dontwarn kstar.mycommon.commonutils.**
-keep class kstar.mycommon.commonutils.** { *; }
#----------------------------------------------------------------------------
所以报错应该是强转两个对象之间的问题。根据这个思路 我将两个对象的代码都保护起来,果然没问题了。我自己的代码如下,可能每个人代码类的结构不一样,反正思路是一样的BaseModel的子类要保护,不能混淆,混淆强转就有问题
#BaseModel类所在的位置
-keep class kstar.mycommon.base.** { *; }
#BaseModel子类,我们业务类所在的位置
-keep class com.kstar.device.ui.login.model.** { *; }
mModel = TUtil.getT(this, 1); 这个方法就转换异常, mPresenter = TUtil.getT(this, 0);可以得到,我就奇怪了