2013-06-23 2 views
0

У меня есть проект о сшивании изображений, и я использую opencv 2.4.5 и java. Все мои коды являются java-кодами, и он работает отлично, когда это проект java. Я передал свой код в андроид, импортировал opencv-245.jar и opencv_java245.dll в свой проект, после чего настроил путь сборки. Но когда мой код приходит System.loadLibrary (...):Android Emulator не может загрузить родную библиотеку

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
Mat image1= Highgui.imread(imgs.get(0).toString() , 1); 
Mat image2= Highgui.imread(imgs.get(1).toString() , 1); 
... 

Это дает ошибку и не может загрузить OpenCV родную библиотеку (opencv_java245.dll). Я обыскал его в Интернете и много читал, но не нашел ответа. Большинство из них касалось android ndk, но я не использую его, а мои коды не являются C++. Я попытался использовать System.load (путь), но он снова не удался. Пожалуйста, дайте мне совет. Благодарю.

UPDATE: Стек трассировки:

06-23 18:23:37.884: E/AndroidRuntime(443): FATAL EXCEPTION: main 
06-23 18:23:37.884: E/AndroidRuntime(443): java.lang.IllegalStateException: Could not execute method of the activity 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.view.View$1.onClick(View.java:2704) 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.view.View.performClick(View.java:3100) 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.view.View$PerformClick.run(View.java:11644) 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.os.Handler.handleCallback(Handler.java:587) 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.os.Looper.loop(Looper.java:126) 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.app.ActivityThread.main(ActivityThread.java:3997) 
06-23 18:23:37.884: E/AndroidRuntime(443): at java.lang.reflect.Method.invokeNative(Native Method) 
06-23 18:23:37.884: E/AndroidRuntime(443): at java.lang.reflect.Method.invoke(Method.java:491) 
06-23 18:23:37.884: E/AndroidRuntime(443): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
06-23 18:23:37.884: E/AndroidRuntime(443): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
06-23 18:23:37.884: E/AndroidRuntime(443): at dalvik.system.NativeStart.main(Native Method) 
06-23 18:23:37.884: E/AndroidRuntime(443): Caused by: java.lang.reflect.InvocationTargetException 
06-23 18:23:37.884: E/AndroidRuntime(443): at java.lang.reflect.Method.invokeNative(Native Method) 
06-23 18:23:37.884: E/AndroidRuntime(443): at java.lang.reflect.Method.invoke(Method.java:491) 
06-23 18:23:37.884: E/AndroidRuntime(443): at android.view.View$1.onClick(View.java:2699) 
06-23 18:23:37.884: E/AndroidRuntime(443): ... 11 more 
06-23 18:23:37.884: E/AndroidRuntime(443): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load opencv_java245: findLibrary returned null 
06-23 18:23:37.884: E/AndroidRuntime(443): at java.lang.Runtime.loadLibrary(Runtime.java:425) 
06-23 18:23:37.884: E/AndroidRuntime(443): at java.lang.System.loadLibrary(System.java:554) 
06-23 18:23:37.884: E/AndroidRuntime(443): at org.myproject.stitching_android.SDCardToGridView.onClickStitching(SDCardToGridView.java:90) 
06-23 18:23:37.884: E/AndroidRuntime(443): ... 14 more 
+0

Подождите, что? вы пытаетесь загрузить DLL на Android? Разве вы не знаете, что [dll просто совместима с Windows] (http://en.wikipedia.org/wiki/Dynamic-link_library)? Вы не можете загрузить его на Android – BackSlash

+0

Он называется родной библиотекой для java и android. Мы можем использовать его с Android NDK, но все мои коды java и его работа прекрасны, когда я использую его в проекте java, но проект андроида ... Наверное, я не знаю чего-то или чего-то не хватает. –

+0

Потому что вы не компилируете его правильно. Если он работает в Java-проекте (вне эмулятора Android), то он не будет работать в Android, просто потому, что наборы инструкций отличаются (Android-> ARM/RISC, PC-> CISC) – SJuan76

ответ

1

Основная проблема заключается в том, что вы пытаетесь загрузить DLL на Android устройства. DLL - a Microsoft Windows only library, он не может быть загружен приложением Android.


java.lang.UnsatisfiedLinkError: Cannot load library: load_library[1108]: Library '/data/data/org.myproject.stitching_android/lib/opencv_java245.dll' not found 

Означает, что ваше приложение не может найти файл, даже если он находит файл, он не сможет загрузить его, потому что Android не поддерживает библиотеки DLL