![](/img/trans.png)
[英]How to fix UnsatisfiedLinkError for tesseract in android
[英]Android UnsatisfiedLinkError With Tesseract and OpenCV
我一直在嘗試讓 OpenCV 和 tesseract (tess-two) 的 android 版本與我的 android 應用程序一起使用。 我正在 Android Studio 1.4 中開發,問題是如果我單獨添加 tess-two 依賴項,應用程序運行良好,我可以很好地加載 tess-two 庫。 接下來,當我將 OpenCV 依賴項添加到應用程序時,它破壞了對 tess-two 庫的支持,並向我拋出了這個運行時錯誤:
Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.app.ocrapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.app.ocrapp-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libpngt.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:989)
at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:43)
at com.app.ocrapp.util.Libraries.<clinit>(Libraries.java:12)
從應用程序中刪除 OpenCV 庫和依賴項后,tess-two 再次開始工作。
這是我的OpenCV build.gradle :
apply plugin: 'android-library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 21
versionCode 3000
versionName "3.0.0"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
jniLibs.srcDirs = ['oclibs']
}
}
}
這是我的 tess-two build.gradle :
apply plugin: 'android-library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 21
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
jniLibs.srcDirs = ['libs']
}
}
}
另外這里是我的項目結構的圖片,每個庫都被圈起來,它們各自的 libs 文件夾也被圈起來(包含 .so 文件):項目結構
所有幫助將不勝感激。 這幾天我一直在努力解決這個問題。
-----編輯------
我已經解決了這個問題,並在下面發布了一個解決方案。
好吧,所以我終於想通了。 OpenCV 庫在本機 libs 文件夾中有一個名為“arm64-v8a”的文件夾,而 tess-two 庫不包含這樣的文件夾。 這是一個問題,因為當沒有可用於 tesseract for android (tess-two) 的 64 位庫時,“arm64-v8a”文件夾將使應用程序以 64 位模式運行,從而引發問題中顯示的崩潰。
為了解決這個問題,我只是排除了“arm64-v8a”文件夾。
在您的應用 build.gradle 和 defaultConfig 中添加:
packagingOptions {
exclude "lib/arm64-v8a/FILE_NAME.SO"
}
現在它說 FILE_NAME.so,用你的 OpenCV“arm64-v8”文件夾中的文件之一的文件名替換它。 根據需要多次添加 exclude 行以排除 arm64-v8 文件夾中的所有文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.