android 抛出java.lang.VerifyError: Rejecting class xxxxxx java.lang.VerifyError: Rejecting class

  之前团队开发的android项目主要运行在android4.4的版本上,最近开发的一个新的项目的运行的os是android 5.1,当大家在开发完成之后,不管是在真机还是模拟器上运行,都会有如题描述的问题,经过认真比对之后,发现只要是运行在android5.0以上的环境下,就有异常,在5.0以下的设备中,安然无恙。下面详细记录处理过程:

  1.通过设备的报错信息,可以看出这是一个运行时错误,在编译时是没有问题的,而且与设备的os版本有关系,想到android在5.0之后更换了java虚拟机,可能跟这个有关系,于是google了一番,得到的答案基本类似如下,在仔细检查了我们的代码之后,并没有这种问题,还得换种思路继续排查

 

  2.在进一步的调试过程中,发现只要涉及到报错的这个类的任何操作都会抛出这个异常,包括调用构造方法和静态方法,说明是编译和运行时获得类的信息不一致,一下子想到了多态,在进一步分析代码的过程中发现了代码中有类似的实现,放出部分代码:

IPay.java

/**
 * 
 * @author polymax
 * pay的接口
 *
 */
public interface IPay {
  public float getPayed();
}

 Pay.java

/**
 * 
 * @author polymax
 * Pay的具体实现
 *
 */
public class Pay implements IPay{
  private float payedMoney;
  private float totalNeedPay;
  @Override
  public float getPayed(){
    return payedMoney;
  }
  
  public float getTotalNeedMoney() {
    return totalNeedPay;
  }
}

Order.java

/**
 * 
 * @author polymax
 * 定义Order的接口
 */
public interface Order {
  public IPay getPayInfo();
}

OderImpl.java

/**
 * 
 * @author polymax
 * Order的具体实现
 *
 */
public class OrderImpl implements Order {

  /**
   * 注意这里的返回值是Pay,不是Order接口中定义的IPay
   */
  @Override
  public Pay getPayInfo() {
    return null;
  }

}

在Order这个接口中定义的getPayInfo返回的是IPay这个接口,而在具体实现的时候,返回的是Pay,按照正常逻辑去理解,没有什么问题,事实上编译器也是这么理解的,但是问题就出在运行时,当我们修改了Order类getPayInfo的返回值为Pay之后,就解决了问题。

 

  具体原因可能跟新的虚拟机有关系,这个解决问题的过程可能有些巧合,以后如果有空再去深究这个问题,先在这remark下,鄙人本身也不是做android的,如果有人路过看到,又恰好有知晓原因,欢迎留言告知,thx

转载于:https://www.cnblogs.com/polymax/p/6135072.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值