Android OCR:不满意 Link 错误

Android OCR: Unsatisfied Link Error

我是一名学生,正在为我的学校项目开发 OCR 功能。到目前为止,我能够成功实现功能和 运行 应用程序。

我在 Android Studio 1.5.1 上安装了我的应用程序,并且能够 运行 在我的 旧设备 Samsung Galaxy Note 3 API 21。最近,我 将我的设备 更改为 Samsung Galaxy Note 5 API 22,每当我尝试 运行 时应用程序都会崩溃OCR功能。

下面是 logcat:

Fatal Exception: java.lang.IllegalStateException: Could not execute method of the activity at android.view.View.onClick(View.java:4298) at android.view.View.performClick(View.java:5254) at android.widget.TextView.performClick(TextView.java:10557) at android.view.View$PerformClick.run(View.java:21203) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6897) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Caused by java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View.onClick(View.java:4293) at android.view.View.performClick(View.java:5254) at android.widget.TextView.performClick(TextView.java:10557) at android.view.View$PerformClick.run(View.java:21203) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6897) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Caused by java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.l33902.contactmanagment1512-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.l33902.contactmanagment1512-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libpngt.so" at java.lang.Runtime.loadLibrary(Runtime.java:367) at java.lang.System.loadLibrary(System.java:988) at com.googlecode.tesseract.android.TessBaseAPI.(TessBaseAPI.java:43) at com.example.l33902.contactmanagment1512.ShowImage.initTess(ShowImage.java:171) at com.example.l33902.contactmanagment1512.ShowImage$OCR.onPreExecute(ShowImage.java:551) at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591) at android.os.AsyncTask.execute(AsyncTask.java:539) at com.example.l33902.contactmanagment1512.ShowImage.startOCR(ShowImage.java:188) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View.onClick(View.java:4293) at android.view.View.performClick(View.java:5254) at android.widget.TextView.performClick(TextView.java:10557) at android.view.View$PerformClick.run(View.java:21203) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6897) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

我已经在此应用程序中实施了 Crashlytics,下面是崩溃的原因,如下所述:

所述错误为不满意 Link 错误,表示应用程序失败,因为它无法加载库 "libpngt.so"。

问题是,我以前在 Android Studio 上处理我的 Galaxy Note 3 时遇到过这个错误,并设法通过将 "libpngt.so" 放在 "tess-two\libs\armeabi-v7a"目录。它仍在 Galaxy Note 3

上运行

如下图:

我也搜索了很多网站来寻找解决方案。 NDK build也已经搭建成功

目前我不确定接下来我能做什么,因为我之前已经解决了这个错误,但是这个实例出现了同样的问题,而之前的解决方案不起作用。

会不会是logcat中没有说明的其他错误引起的?也许 API 的变化?只是想知道,请通过提供任何可能的建议来帮助我,因为我仍然是 Android 开发的初学者。提前致谢!

我认为 Galaxy Note 5 是 ARMv8 phone。尝试在 Application.mk 文件的 APP_ABI 行上使用 arm64-v8a 重建库:

APP_ABI := armeabi-v7a x86 mips arm64-v8a x86_64 mips64

这样做之后,您的 libs 目录下应该有六个包含 *.so 文件的目录。