Codova 创建项目,引用jar提示java.lang.VerifyError

背景说明:

Android原生的开发包是直接通过gradle加载aar使用,由于客户需要模块的cordova插件,于是只能引用aar解压出来的jar包,通过cordova创建项目,指定Android平台,引入插件,然后编译安装(此时创建的项目可以通过AndroidStudio打开)

Cordova创建的项目  在Android6.0上跑报如下错误,字面上看java编译器拒绝编译这个类

Rejecting class com.speedata.cordova.plugin.XinLianQilian because it failed compile-time verification (declaration of 'com.speedata.cordova.plugin.XinLianQilian' appears in /data/app/com.speedata.cordova-2/base.apk)
        at com.speedata.cordova.Main2Activity.onCreate(Main2Activity.java:16)

 

Cordova创建的项目  在android8.1上跑报如下入错 

java.lang.VerifyError: Verifier rejected class com.speedata.cordova.plugin.XinLianQilian: byte[] com.speedata.cordova.plugin.XinLianQilian.read_area(int, int, int, java.lang.String) failed to verify: byte[] com.speedata.cordova.plugin.XinLianQilian.read_area(int, int, int, java.lang.String): [0x1DE] register v4 has type Conflict but expected Integer (declaration of 'com.speedata.cordova.plugin.XinLianQilian' appears in /data/app/com.speedata.cordova-whImE-msI6T_RN_xfg8RdA==/base.apk)

所有报错都指向这一个类,分析是不是jar有问题,于是有下面尝试

AndroidStudio直接创建项目 引用导出的jar包 在Android6.0上安装报错(这个报错看起来就舒服多了,至少知道是哪里的问题了)

不过还有个疑惑,aar在6.0上跑就没问题。。。。

Default interface methods are only supported starting with Android N (--min-api 24): int com.speedata.libuhf.IUHFService.getDwellTime()
 

AndroidStudio直接创建项目 引用导出的jar包 在8.1上调用接口和cordova创建的项目一样,指向read_area这个方法

查看这个方法有很多枚举判断,将此部分注释后编译通过

 

总结

1.Interface 接口定义里面有很多其他模块不必实现的抽象方法,这些方法用default声明,其他模块就没有实现,但是default是在Android 24以后才支持,这个报错在cordova里面报错很隐晦,新建原生项目才提示,类似场景可以通过适配器来解决,避免使用default

 

3.大量枚举判断可能会造成 java.lang.VerifyError ?? 

4. java.lang.VerifyError 需要检查报错所指向的类

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值