Android上的OpenCV:Canned';t从loader加载opencv_java-我必须用NDK编译吗?我错过什么了吗?
我觉得我错过了一些明显的东西。我正在尝试让OpenCV在Android上运行。我想使用静态初始化方法,因此我将适当的本机库文件从OpenCV SDK复制到我的Android Studio项目中的app/libs/armeabi-v7a文件夹中。我知道GoogleGlass(我为之开发的)使用了这种架构——而且在任何情况下,我也有/lib/armeabi文件夹以防万一 我在StackOverflow上搜索过这里,当然answers.opencv.org已经关闭了。我找到的答案并没有解决问题。据我所知,我:Android上的OpenCV:Canned';t从loader加载opencv_java-我必须用NDK编译吗?我错过什么了吗?,android,opencv,android-ndk,Android,Opencv,Android Ndk,我觉得我错过了一些明显的东西。我正在尝试让OpenCV在Android上运行。我想使用静态初始化方法,因此我将适当的本机库文件从OpenCV SDK复制到我的Android Studio项目中的app/libs/armeabi-v7a文件夹中。我知道GoogleGlass(我为之开发的)使用了这种架构——而且在任何情况下,我也有/lib/armeabi文件夹以防万一 我在StackOverflow上搜索过这里,当然answers.opencv.org已经关闭了。我找到的答案并没有解决问题。据我所
- 为Android安装NDK
- 下载并解压缩OpenCV SDK
- 将其作为Android库导入,并作为模块依赖项添加
- 将库文件复制到/libs/armeabi-v7a(在我的Android Studio项目中)
- 使用以下代码,库应正确加载:
if (!OpenCVLoader.initDebug()) { Log.e("OpenCV","Unable to load OpenCV"); } else { Log.e("OpenCV","OpenCV has loaded!"); }
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest D/OpenCV/StaticHelper﹕ Trying to get library list
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest E/OpenCV/StaticHelper﹕ OpenCV error: Cannot load info library for OpenCV
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest D/OpenCV/StaticHelper﹕ Library list: ""
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest D/OpenCV/StaticHelper﹕ First attempt to load libs
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest D/OpenCV/StaticHelper﹕ Trying to init OpenCV libs
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest D/OpenCV/StaticHelper﹕ Trying to load library opencv_java
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest D/OpenCV/StaticHelper﹕ Cannot load library "opencv_java"
12-16 08:46:08.047 1838-1838/com.company.opencvsdktest W/System.err﹕ java.lang.UnsatisfiedLinkError: Couldn't load opencv_java from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.company.opencvsdktest-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.company.opencvsdktest-1, /vendor/lib, /system/lib]]]: findLibrary returned null
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at java.lang.Runtime.loadLibrary(Runtime.java:358)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at java.lang.System.loadLibrary(System.java:529)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at org.opencv.android.StaticHelper.loadLibrary(StaticHelper.java:64)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at org.opencv.android.StaticHelper.initOpenCVLibs(StaticHelper.java:95)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at org.opencv.android.StaticHelper.initOpenCV(StaticHelper.java:39)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at org.opencv.android.OpenCVLoader.initDebug(OpenCVLoader.java:62)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at com.company.opencvsdktest.MainActivity.onResume(MainActivity.java:93)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1194)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.Activity.performResume(Activity.java:5315)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2804)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2843)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2278)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:138)
12-16 08:46:08.055 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 1236)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.os.Looper.loop(Looper.java:149)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5045)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest D/OpenCV/StaticHelper﹕ First attempt to load libs fails
12-16 08:46:08.063 1838-1838/com.company.opencvsdktest E/OpenCV﹕ Unable to load OpenCV
12-16 08:46:08.211 1838-1838/com.company.opencvsdktest D/OpenGLRenderer﹕ Enabling debug mode 0
我需要对SDK做些额外的事情吗?我需要先编译什么吗?还是应该自动工作?如果我安装了NDK,除了这里提到的步骤之外,我不需要做任何事情:对吗
编辑:我还尝试了libs文件夹的不同位置,例如在项目根目录和openCVLibrary文件夹中。两者都不起作用
编辑2:使用Manager APK可以正常工作。但对于玻璃,这并不是一个真正的解决方案,因为没有办法进入游戏商店 使用Android Studio和gradle,默认情况下,您必须将.so文件放在
/jniLibs/CPU\u ARCH
中,而不是放在/libs/CPU\u ARCH
中
然后,您可以检查您的库是否正确地集成到apk中:将其作为.zip文件打开,查看/lib/CPU\u ARCH文件夹中是否有库。要解决您的问题,请尝试以下步骤:
APP\u ABI:=all
。。。为了确保jni LIB也将为您的设备构建我遇到了同样的问题,我通过将
sdk/native/libs
文件夹重新压缩到我的projects-libs文件夹中解决了这个问题。我发现使用git时,只有文件mods从:100755更改为100644建议:如果你从头开始,严格遵循这些步骤,应该很容易。NDK和apk经理将不再需要。APP_ALI:=所有都是为我修复的,非常感谢!
sourceSets{
main {
jni.srcDirs =[]
jniLibs.srcDirs = ['src/main/libs'] # to change to your project structure
}
}