2017-04-21 48 views
0

我有一個android應用程序,它使用c庫,併爲x86,armeabi和armeabi-v7a體系結構編譯。Android移動芯片架構在不同的國家有所不同?

最近我已經注意到了這一點,它好像有些手機會在一個國家工作但它似乎是在德國,韓國,意大利和澳大利亞的應用程序用戶使用OpenCV時也有UnsatisfiedLinkErrors,特別..

我VE包括通過

static { 

    System.loadLibrary("somecompiledlibname"); 

} 

異常java.lang.UnsatisfiedLinkError中使用的OpenCV:本機方法未找到:org.opencv.core.Mat.n_Mat :()

所以我的問題是:

1)不同國家的體系結構不同嗎?

2)我該如何解決這個問題?

+1

閱讀[this](http://docs.opencv.org/java/2.4.2/org/opencv/core/Mat.html)沒有什麼可以說明不同國家的架構,而不是很可能,運行時缺少一個庫 - * UnsatisfiedLinkErrors *是這裏的問題,你是否將庫與應用捆綁在一起?您可能需要深入挖掘,找出它們的模型,然後查看它們,找出它隨附的基本Android版本。也可能是,ROM可能沒有使用硬浮點編譯的本機庫.... – t0mm13b

+0

隱式地加載OpenCV本機庫嗎?這對於19歲以下的Android API無效(請參閱https://issuetracker.google.com/issues/36950617)。 –

回答

1

號架構手機之間的差異。給定的CPU在世界各地使用相同的架構。 x86將是英特爾(或AMD)PC處理器,有時用於平板電腦,但很少。 ARM是一種完全不同類型的芯片,幾乎被世界上所有移動設備使用。 ARMv7是ARM的更新版本,但不適用於較舊的CPU。你最好支持所有這些,儘管現在幾乎所有的東西都是ARMv7。

+0

將此標記爲答案,因爲它系統地解決問題 – Arjun

0

您可以在OpenCV初始化後調用任何OpenCV對象和函數,包括對象構造函數。在調用OpenCV時,正確初始化了onManagerConnected(LoaderCallbackInterface.SUCCESS)。

嘗試一樣在這裏:

static { 
    if (!OpenCVLoader.initDebug()) { 
     //.. 
    } 
}