今天刚刚碰到这种鬼bug,bug内容如下:
07-22 13:43:20.740 20753-20753/com.jxc.localcamerafacedetect E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0:()J
at org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0(Native Method)
at org.opencv.objdetect.CascadeClassifier.<init>(CascadeClassifier.java:38)
at com.jxc.localcamerafacedetect.MainActivity.initializeOpenCVDependencies(MainActivity.java:125)
at com.jxc.localcamerafacedetect.MainActivity.onResume(MainActivity.java:398)
在Vivo手机上测试正常,但是在三星手机上却爆出这种bug,刚刚把它解决了,现在记录一下。
具体出现原因不详,但是我找到了一种解决办法:
在Android Studio中,进行opencv开发时,需要先导入 opencv库,即:
但是用vivo手机测试的时候,我并没有导入 opencv 的so库,一样可以运行程序,但是在三星手机上的时候,却不能运行,出现了上面的bug。
因为它的bug的内容是说,没找到native 方法,应该就是没有加载到so库,所以我就给他导入了一个so库(路径:…\OpenCV-2.4.9-android-sdk\sdk\native\libs\armeabi-v7a), 放在 opencv库的src目录下,即:
导入so库以后,再运行,就不会报错了。
还有一种会造成 java.lang.UnsatisfiedLinkError: Native method not found 这样的错误,就是你只导入了一种类型的so库,在部分机型里运行没问题,但是碰到有的机型则会显示除这种错误,这就需要你把其他类型的so文件也导入进来armeabi、armeabi-v7a、mips、x86等等