百度人脸离线采集SDK--代码混淆导致APP打包运行后闪退
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到真机上运行。