百度人脸离线采集SDK--代码混淆导致APP打包运行后闪退

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33721382/article/details/88680679

2019-03-19

BUG描述:

APP引入百度人脸离线采集SDK后,在debug模式下运行是正常的,但使用命令打包APP到真机运行,APP闪退。

BUG原因:

百度人脸离线采集SDK的代码在release时被混淆了,导致运行过程中部分类和方法找不到、JNI调用失败,进而导致APP闪退。

(百度人脸官方给的demo里面是debug和release都关闭了代码混淆)

gradle文件中设置minifyEnabled = true,即开启了代码混淆,打包APP到真机上运行闪退;

当设置minifyEnabled = false后,打包APP到真机不再闪退。

ClassNotFoundException,NoSuchMethodError (在Logcat日志当中,找到类似的错误)

原因:这种异常会在好多情况下出现,比如:本地代码通过反射调用其他的类,但是经过了混淆之后,就会出现如上异常;调用了JNI之后,C或者C++和java代码进行交互的时候找不到java的类或者方法,导致发生了异常……等等,还有好多。

解决办法:只需要将被调用的java类标注为不混淆即可。 -keep class package.classname{*;}

解决方案:

将百度人脸离线采集SDK的代码混淆配置文件proguard-rules.pro里面的内容拷贝到APP的代码混淆配置文件,即不混淆百度人脸离线采集SDK的相关代码,然后再打包APP到真机上运行。

猜你喜欢

转载自blog.csdn.net/qq_33721382/article/details/88680679