我一直在尝试让 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 文件): 项目结构
所有帮助将不胜感激。这几天我一直在尝试解决这个问题。
-----编辑------
我已经解决了这个问题,并在下面发布了解决方案。