2014-05-13 45 views
3

我在我的android儀器測試中使用OpenCV。它適用於較新的設備(gnex,nexus 5,nexus 7),但不適用於較舊的設備(nexus one,samsung GT-P7500R)。我對這個庫使用靜態初始化(而不是使用池/共享本地庫的管理器應用程序)。在儀器測試中找不到本機庫

對於armeabi和armeabi-v7a,這是基於gradle幷包含相同.so文件的相同構建代碼。

我已經安裝了OpenCVManager和使用它的另一個應用程序,即使在較舊的設備上它也能正常工作。我偷看了APK裏面甚至以上,但仍然複製了同樣的.so文件收到同樣的錯誤消息:

java.lang.UnsatisfiedLinkError: Couldn't load opencv_java: findLibrary returned null 
at java.lang.Runtime.loadLibrary(Runtime.java:429) 
at java.lang.System.loadLibrary(System.java:554) 
at org.opencv.android.StaticHelper.loadLibrary(StaticHelper.java:54) 
at org.opencv.android.StaticHelper.initOpenCVLibs(StaticHelper.java:85) 
at org.opencv.android.StaticHelper.initOpenCV(StaticHelper.java:29) 
at org.opencv.android.OpenCVLoader.initDebug(OpenCVLoader.java:51) 

上還有什麼可能是不同的任何想法?我看了看儀表APK(調試測試)內的lib文件是有...

編輯:我嘗試不同的設置,但沒有他們的工作: - 在armeabi文件夾 只是armeabi文件 - 只是armeabi-V7A文件在armeabi-V7A文件夾 - 在頂層文件夾只是armeabi文件(內部APK lib文件夾) - 剛剛在頂層文件夾armeabi-V7A文件(內部APK lib文件夾) - 手動加載opencv_java - 手動裝載OpenCVENgine,OpenCVEngine_jni(「借「來自OpenCVManager應用程序)。

我已經嘗試了一些其他設備上的這些方法和他們很好地工作......

+0

一般靜態 \t { \t \t OpenCVLoader.initDebug(); \t}是從這個意義上說,在你的應用程序的根本上的解決方案。但似乎並不像你說的那樣加載它。可能有一些靜態庫在你的armeabi文件夾中缺失? –

+0

有趣的是,在nexus之一,opencv管理器只帶有一個armeabi-v7a文件夾,我試圖捆綁這些文件夾,但沒有運氣。 – radu

+0

沒有armeabi文件夾,您將無法在舊設備上使用opencv庫。我在辦公室裏有幾個舊的,並且不能用armeabi-v7文件夾工作。我在下載的OpenCV Android Library項目中有一個armeabi文件夾結構。如果除了現有的文件夾之外,還在/ libs文件夾下的應用程序中提供了該文件夾,則很可能會返回到舊系統上的鏈接。 –

回答

0

事實證明,這是一個事實,即OpenCV庫是依賴於儀器測試項目的一部分的問題。

androidTestCompile切換到compilebuild.gradle文件(基本上,增加依賴於應用程序測試,而不是測試程序),使庫加載正常工作。我會再挖掘一些,看看是否有任何解決方法。