【发布时间】:2016-01-06 04:28:03
【问题描述】:
我是一名学生,正在为我的学校项目开发 OCR 功能。到目前为止,我能够实现这些功能并成功运行应用程序。
我在 Android Studio 1.5.1 上安装了我的应用程序,并且能够在我的旧设备 Samsung Galaxy Note 3 API 21 上运行它。最近,我更改我的设备为 Samsung Galaxy Note 5 API 22,每当我尝试运行 OCR 功能时应用程序就会崩溃。
下面是logcat:
致命异常:java.lang.IllegalStateException:无法执行 活动方式 在 android.view.View$1.onClick(View.java:4298) 在 android.view.View.performClick(View.java:5254) 在 android.widget.TextView.performClick(TextView.java:10557) 在 android.view.View$PerformClick.run(View.java:21203) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:6897) 在 java.lang.reflect.Method.invoke(Method.java) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 引起 通过 java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(Method.java) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4293) 在 android.view.View.performClick(View.java:5254) 在 android.widget.TextView.performClick(TextView.java:10557) 在 android.view.View$PerformClick.run(View.java:21203) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:6897) 在 java.lang.reflect.Method.invoke(Method.java) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 引起 通过 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip 文件 "/data/app/com.example.l33902.contactmanagment1512-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.l33902.contactmanagment1512-2/lib/arm64, /vendor/lib64, /system/lib64]]] 找不到“libpngt.so” 在 java.lang.Runtime.loadLibrary(Runtime.java:367) 在 java.lang.System.loadLibrary(System.java:988) 在 com.googlecode.tesseract.android.TessBaseAPI.(TessBaseAPI.java:43) 在 com.example.l33902.contactmanagment1512.ShowImage.initTess(ShowImage.java:171) 在 com.example.l33902.contactmanagment1512.ShowImage$OCR.onPreExecute(ShowImage.java:551) 在 android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591) 在 android.os.AsyncTask.execute(AsyncTask.java:539) 在 com.example.l33902.contactmanagment1512.ShowImage.startOCR(ShowImage.java:188) 在 java.lang.reflect.Method.invoke(Method.java) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4293) 在 android.view.View.performClick(View.java:5254) 在 android.widget.TextView.performClick(TextView.java:10557) 在 android.view.View$PerformClick.run(View.java:21203) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:6897) 在 java.lang.reflect.Method.invoke(Method.java) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
我已在此应用程序中实现了 Crashlytics,以下是所述崩溃的原因:
上述错误是 Unsatisfied Link Error,它表示应用程序失败,因为它无法加载库“libpngt.so”。
问题是,我之前在 Android Studio 上使用 Galaxy Note 3 时遇到过这个错误,并通过将“libpngt.so”放在“tess-two\libs\armeabi-”中来解决它v7a”目录。它仍在 Galaxy Note 3 上运行
如下图:
我还搜索了许多网站以寻找解决方案。 NDK build 也已经构建成功了。
目前我不确定下一步我能做什么,因为我之前已经解决了这个错误,但是这个实例出现了同样的问题,而之前的解决方案不起作用。
会不会是由 logcat 中未说明的任何其他错误引起的?也许API的变化?只是想知道,请提供任何可能的建议来帮助我,因为我仍然是 Android 开发的初学者。提前致谢!
【问题讨论】:
-
对应*.so文件可能有一个lib文件。如果是这样,您是否将它们包含在项目的构建路径中?您是要移植现有的 Eclipse 项目还是构建新项目?您可以尝试删除“app\build”下的文件夹,然后清理>构建
-
这曾经是一个ecilpse项目,但是我已经移植到Android Studio并且可以成功运行。仅在我将设备切换到三星 Note 5 后才会出现此问题。
-
您使用的是哪个 OCR SDK?检查您使用的 OCR SDK 版本是否支持该设备。有些可能不适用于更高版本。
-
@Harry 您好,感谢您的回复,我使用的 tesseract 库文件是从这个链接下载的,github.com/rmtheis/tess-two。它能够在 API 21 android 5.0 上运行,我的新设备是 5.1.1
标签: android android-studio ocr tesseract