flutter:插件开发No pending exception expected: java.lang.NoSuchMethodError: no static method问题的解决

出现的问题:

No pending exception expected: java.lang.NoSuchMethodError: no static method "Lcom/baidu/vis/unified/license/AndroidLicenser;.getDeviceId(Landroid/content/Context;)Ljava/lang/String;" 2020-11-24 11:59:08.395 18597-19185/? A/zygote64: runtime.cc:531] at int com.baidu.vis.unified.license.AndroidLicenser.nativeFaceAuthFromFile(android.content.Context, java.lang.String, java.lang.String, boolean, int) (:-2) 2020-11-24 11:59:08.395 18597-19185/? A/zygote64: runtime.cc:531] at com.baidu.vis.unified.license.AndroidLicenser$a com.baidu.vis.unified.license.AndroidLicenser.a(android.content.Context, java.lang.String, java.lang.String, boolean, int) (:-1) 2020-11-24 11:59:08.395 18597-19185/? A/zygote64: runtime.cc:531] at void com.baidu.idl.main.facesdk.FaceAuth$a.run() (:-1) 2020-11-24 11:59:08.395 18597-19185/? A/zygote64: runtime.cc:531] at void com.baidu.idl.main.facesdk.b$c.run() (:-1)

问题描述:

使用百度的人脸识别库做一个flutter的插件,集成Android的时候出现的这个问题。一开始debug模式下调试没问题,完成之后,依赖到项目中突然报错了。

问题分析:

从报错的log来看,主要是因为缺少了类,而这些类所在的资源包就是所引入的so文件及aar文件,所以,解决的思路就比较清晰了:确认资源包是否被正常引入,是否引入成功,同时涉及到so文件引入的时候,SO结构的配置是否正确,还有一个需要注意的是,缺少的类是否被release编译的时候混淆了。接下来一步步确认,理论上一共是能解决问题的。

问题解决:

首先,从报错的表面来看,是因为缺少了百度人脸识别库的资源包出现的问题。所以,先检查了libs目录下的so包,aar包等资源是否引入,引入的方式是否正确;在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
然后,按照以上方式引入,依赖到项目中,release编译,得到release包,以解压缩形式打开apk,看看资源文件(如所需要的so文件)是否被编译进apk中;
release的apk解压文件列表
通过解压发现,找不到的类对应的so文件已经被编译进去了,但是运行的时候无法找到对应的类;紧接着,怀疑是不是设备的SO结构没有支持,所以就检查了在项目中的gradle文件关于SO的配置;
在这里插入图片描述
检查之后发现SO的配置也没有问题;最后,通过之前踩过的坑,判断出还有一种可能是:对应的so包下的类被混淆了,所以,就把找不到的类在混淆文件中排除
在这里插入图片描述
在这里插入图片描述最后,终于把问题解决了。

问题总结:

遇到类似的问题,一般可以从以下几方面入手:
1.检查资源文件引入是否正确;
2.解压apk文件,看看缺少的类所在的资源包是否被编译进去;
3.检查gradle文件中的SO结构配置是否与sdk或者集成要求的一致;
4.尝试在混淆文件中将缺少的类或者包或者方法排除。

以上是个人遇到的问题及解决问题过程中一些分析,不一定正确,仅供参考。不足之处,欢迎大神指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易小四

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值