I feel like I've missed something obvious here. I'm trying to get OpenCV to run on Android. I wanted to use the static initialization method, so I copied the appropriate native library files from the OpenCV SDK to my app/libs/armeabi-v7a folder within my Android Studio project. I know that Google Glass (what I'm developing for) uses this architecture - and in any case, I also have the /lib/armeabi folder just in case.
I searched here on StackOverflow, and of course answers.opencv.org is down. The answers I found didn't solve the problem. As far as I understand it, I:
- Install NDK for Android
- Download and extract the OpenCV SDK
- Import it as an Android library and add it as a module dependency
- Copy the library files to /libs/armeabi-v7a (within my Android Studio project)
Use the following code and the library should load correctly:
if (!OpenCVLoader.initDebug()) { Log.e("OpenCV","Unable to load OpenCV"); } else { Log.e("OpenCV","OpenCV has loaded!"); }
However, I get this error:
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
Do I have to do anything extra with the SDK? Did I need to compile anything first? Or should it just work automatically? Provided I have the NDK installed, I shouldn't have to do anything other than the steps mentioned here: http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization right?
EDIT: I also tried different locations for the libs folder, such as in the project root directory and in the openCVLibrary folder. Neither worked.
EDIT 2: Using the Manager APK works fine. But with Glass, this won't really be a solution as there's no way to access the play store!