MVPPlugin插件之混淆踩坑记录

12 篇文章 0 订阅
2 篇文章 0 订阅

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中有逻辑,测试只继承不写逻辑的情况又去做混淆的概率低到可以忽略,但是不幸的是我碰上了!!

特此记录,引以为戒!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值