2013-06-23 28 views
0

我有一個關於拼接圖像的項目,我使用的是opencv 2.4.5和java。我所有的代碼都是java代碼,當它是一個java項目時它運行的很完美。我將我的代碼轉移到android,將opencv-245.jar和opencv_java245.dll導入到我的項目中,然後配置構建路徑。但是,當我的代碼來的System.loadLibrary(...):Android模擬器無法加載本機庫

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項目中使用它時,它的運行非常完美,但是android項目...我想我不知道某些東西或缺少某些東西。 –

+0

因爲你沒有編譯它的權利。如果它運行在Java項目中(Android模擬器之外),那麼它將不能在Android中工作,僅僅因爲指令集不同(Android-> ARM/RISC,PC-> CISC) – SJuan76

回答

1

的基本問題是,你要加載在Android設備上的DLL。 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

相關問題