2023-01-21 251
我正在尝试通过我的Android项目运行Google ocr tesseract.我已经将Tesseract与Android-NDK合并在一起,并且在尝试运行Android项目后,我会收到此错误.
我的环境如下
供参考,我正在从此处列出的示例中构建示例链接
预先感谢!
这是我的logcat结果的片段:
I/DEBUG ( 182): Revision: '0'
I/DEBUG ( 182): ABI: 'arm'
I/DEBUG ( 182): pid: 20291, tid: 20337, name: JavaBridge >>> com.enterprisem
obility.OCR <<<
I/DEBUG ( 182): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
I/DEBUG ( 182): Abort message: 'art/runtime/check_jni.cc:65] JNI DETECTED ERR
OR IN APPLICATION: JNI GetMethodID called with pending exception 'java.lang.NoSu
chFieldError' thrown in void com.googlecode.tesseract.android.TessBaseAPI.native
ClassInit():-2'
I/DEBUG ( 182): r0 00000000 r1 00004f71 r2 00000006 r3 00000000
I/DEBUG ( 182): r4 a0701db8 r5 00000006 r6 0000000b r7 0000010c
I/DEBUG ( 182): r8 00000000 r9 b486f520 sl a1c0ac00 fp 00000001
I/DEBUG ( 182): ip 00004f71 sp a07006d8 lr b6e503c5 pc b6e72f6c cpsr
60070010
I/DEBUG ( 182):
I/DEBUG ( 182): backtrace:
I/DEBUG ( 182): #00 pc 00039f6c /system/lib/libc.so (tgkill+12)
I/DEBUG ( 182): #01 pc 000173c1 /system/lib/libc.so (pthread_kill+52)
I/DEBUG ( 182): #02 pc 00017fd3 /system/lib/libc.so (raise+10)
I/DEBUG ( 182): #03 pc 00014795 /system/lib/libc.so (__libc_android_abor
t+36)
I/DEBUG ( 182): #04 pc 00012f44 /system/lib/libc.so (abort+4)
I/DEBUG ( 182): #05 pc 00228cd7 /system/lib/libart.so (art::Runtime::Abo
rt()+170)
I/DEBUG ( 182): #06 pc 000a7371 /system/lib/libart.so (art::LogMessage::
~LogMessage()+1360)
I/DEBUG ( 182): #07 pc 000b1b17 /system/lib/libart.so (art::JniAbort(cha
r const*, char const*)+1118)
I/DEBUG ( 182): #08 pc 000b2055 /system/lib/libart.so (art::JniAbortF(ch
ar const*, char const*, ...)+68)
I/DEBUG ( 182): #09 pc 000b530f /system/lib/libart.so (art::ScopedCheck:
:ScopedCheck(_JNIEnv*, int, char const*)+1346)
I/DEBUG ( 182): #10 pc 000b7755 /system/lib/libart.so (art::CheckJNI::Ge
tMethodID(_JNIEnv*, _jclass*, char const*, char const*)+36)
I/DEBUG ( 182): #11 pc 001332f7 /data/app/com.enterprisemobility.OCR-1/l
ib/arm/libtess.so (Java_com_googlecode_tesseract_android_TessBaseAPI_nativeClass
Init+46)
I/DEBUG ( 182): #12 pc 0000614d /data/dalvik-cache/arm/data@app@com.ente
rprisemobility.OCR-1@base.apk@classes.dex
W/ActivityManager( 536): Force finishing activity 1 com.enterprisemobility.OC
R/.MainActivity
I/DEBUG ( 182):
I/DEBUG ( 182): Tombstone written to: /data/tombstones/tombstone_07
中止消息相对清楚:您致电GetFieldID(cls, fieldName) GetFieldID(cls, fieldName)对于您传递给此功能的类中不存在的字段名称,但是您不检查该名称错误,然后继续调用其他JNI功能.不幸的是,您不能忽略此类错误.您必须呼叫ExceptionClear()在调用GetMethodID()或 jni函数的最多.
您可以使用 addr2line 查找对getMethodID()崩溃的特定呼叫,并基于此,派生到GetFieldID(cls, fieldName)失败的呼叫.但是我建议在所有JNI调用中添加错误检查,因为明天其他功能可能会引发异常.
我有同样的问题,它使我感到困惑2天.从最后的原因是我通过了错误的对象类型.例如,
Java代码是
public OverlayLine(int mWidth,List<GeoPoint> mPoints);
我注册JNI方法如下:
gClass.mInitMethod = env->GetMethodID(gObject, "<init>", "(ILjava/lang/Object;)V");
并获取错误消息作为Errol encounter.我修复了代码
gClass.mInitMethod = env->GetMethodID(gObject, "<init>", "(ILjava/util/List;)V");
和错误消失了.
很可能在您的C ++代码中错误地定义了JNI映射. JNI关于与Java的类型映射签有非常严格的合同.例如,
在调用JNI的Java对象的方法之前,我们需要它的签名.所以方法:
long myMethod (int n, String s, int[] arr);
从jni中可以看到签名:
(ILJAVA/LANG/STRING;[I])J
您可以在此处阅读这些规则的非常全面的概述:
http://www.rgagnon.com/javadetails/javadetails/javadetails/java-java-0286.html-1.htmlth/a4.h.htmlty/a >
以上所述是小编给大家介绍的安卓JNI在应用中检测到错误:JNI的GetMethodID被调用时出现待定异常,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26214.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态