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 文件的目录。
我是一名学生,正在为我的学校项目开发 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 文件的目录。