MVPPlugin简介
原文介绍一键生成MVP相关代码,对于爱生活(懒)的码农来说简直是福音啊
说明
混淆会出现ClassCastException 在
mPresenter= getInstance(this,1);
但不是此插件框架问题
分析
那么到底是什么原因导致了这个错的,我调试的过程中曾一度以为是混淆的时候泛型导致的此问题,百度发现ClassCastException 也基本都是应为混淆中缺少
-keepattributes Signature
导致的泛型转换问题!结果,添加后依然没有解决!!!mmp
………………(省略各种尝试n种)
打断点依然发现不了,因为混淆后的打断点调试太头疼了,就是一个报错
ClassCastException: ....Object cannot case to ...BasePresenterImpl
其实这里应该是返回的一个泛型,而这个泛型是方法
public <T>T getInstance(AppCompatActivity o, int i) {
try {
return ((Class<T>) ((ParameterizedType) (o.getClass()
.getGenericSuperclass())).getActualTypeArguments()[i])
.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
泛型是方法的泛型中的类,由于这个方法存在于MVPBaseActivity ,如果继承的acitivity没有调用mPresenter中的方法。泛型就不能够进行有效的传递,导致此问题
问题二:IO异常
首要检查是否配置混淆文件
release {
minifyEnabled true // 是否混淆
zipAlignEnabled true// Zipalign优化
shrinkResources true // 是否去除无效的资源文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
检查混淆文件内容
……………………
#pay_library 支付功能
-dontwarn io.github.mayubao.pay_library.**
-keep class io.github.mayubao.pay_library.** {*;}
#wechat pay
-dontwarn com.tencent.**
-keep class com.tencent.** {*;}
#alipay
-dontwarn com.alipay.**
-keep class com.alipay.** {*;}
……………………
结论
正常开发不会出现此问题!!!!既然用到mvp了肯定要在Presenter中有逻辑,测试只继承不写逻辑的情况又去做混淆的概率低到可以忽略,但是不幸的是我碰上了!!
特此记录,引以为戒!