我正试着用我的android项目运行一个谷歌OCR Tesseract。我已经使用android ndk遵守了tesseract,在我尝试运行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
您应该使用android ndk中的ndk堆栈工具来找出崩溃的位置。请参阅关于ndk堆栈的链接。
adb logcat > /tmp/foo.txt
$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt
我也有同样的问题,这让我困惑了两天。最后一个原因是我传递了错误的对象类型。例如,java代码是
public OverlayLine(int mWidth,List<GeoPoint> mPoints);
我注册jni方法如下:
gClass.mInitMethod = env->GetMethodID(gObject, "<init>", "(ILjava/lang/Object;)V");
并在遇到Errol时获取错误消息。我修复了代码
gClass.mInitMethod = env->GetMethodID(gObject, "<init>", "(ILjava/util/List;)V");
错误消失了。您应该传递精确的对象类型,而不是“Ljava/lang/object;”。
中止消息相对清晰:您调用GetFieldID(cls,fieldName),以获取传递给该函数的类中不存在的字段名,但不检查该错误,并继续调用其他JNI函数。不幸的是,你不能忽视这些错误。在调用GetMethodID()或大多数JNI函数之前,必须先调用ExceptionClear()。
您可以使用addr2line查找对getmetodID()
的哪个特定调用崩溃,并在此基础上导出对GetFieldID(cls, field dName)
的哪个调用失败。但我建议为您的所有JNI调用添加错误检查,因为明天其他一些函数可能会引发异常。
此行得删除指向错误: 异常中的Package name是从其中复制代码的项目的包名。 但我的应用程序的包名是。 我在我的项目中搜索了。 以下是我的清单文件:
我得到以下错误: JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起的异常java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件“/system/framework/sample.jar”],NativeLibraryDirectories=[/vendor/lib,/system/lib]]上找不到类“package
我不明白为什么我总是得到这个错误
我有一个布局,要求用户输入名称和日期。用于输入我使用的日期https://github.com/ErNaveen/MaterialDateTimePicker库,也可以使用OkHttpLibrary将数据发送到服务器。当我在输入两个数据后单击提交按钮时,我得到了以下错误。响应的作用域。。。 错误:
我在https://mobilefirstplatform.ibmcloud.com/blog/2019/05/24/Google-Play-64-bit-requirement/中添加了IBM提到的64位库 但在用Android 9启动Pixel 3应用程序并尝试初始化JSON商店时出错。 我使用的是MFP 7.1。 注意:如果我从jniLibs中删除64位的库文件,这个应用程序完全可以正常工作