CSipSimple在应用程序中抛出异常JNI DETECTED ERROR,输入无效修改UTF-8:非法启动字节0x8e

时间:2015-12-03 12:47:52

标签: exception utf-8 java-native-interface csip-simple

CSipSimple在android棒棒糖上抛出异常。

应用程序中的JNI DETECTED ERROR,输入无效修改的UTF-8:非法启动字节0x8e

在进行voip呼叫时,这里我正在间隔中向ISipService发送消息,以检查呼叫是否正在进行或已断开连接。 我在pjSip.getPtr()中获得此异常,该异常位于pjSipService.java类中。我在这里粘贴我的错误日志。

12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0x8e
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]     string: 'OKp.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p'
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]     in call to NewStringUTF
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]     from java.lang.String org.pjsip.pjsua.pjsuaJNI.pj_str_t_ptr_get(long, org.pjsip.pjsua.pj_str_t)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] "Thread-1487" prio=5 tid=34 Runnable
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   | group="main" sCount=0 dsCount=0 obj=0x13084400 self=0xafe5fc00
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   | sysTid=11490 nice=0 cgrp=apps sched=0/0 handle=0xafed3a80
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   | state=R schedstat=( 517221254 1512118979 3817 ) utm=23 stm=28 core=0 HZ=100
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   | stack=0x9dc06000-0x9dc08000 stackSize=1012KB
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   | held mutexes= "mutator lock"(shared held)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #00 pc 00004c58  /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+23)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #01 pc 000034c1  /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+8)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #02 pc 002526ad  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+84)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #03 pc 0023618b  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+162)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #04 pc 000b1215  /system/lib/libart.so (art::JniAbort(char const*, char const*)+620)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #05 pc 000b1945  /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+68)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #06 pc 000b3ee3  /system/lib/libart.so (art::ScopedCheck::Check(bool, char const*, ...) (.constprop.128)+922)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #07 pc 000bd9e5  /system/lib/libart.so (art::CheckJNI::NewStringUTF(_JNIEnv*, char const*)+44)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65]   native: #08 pc 000f5885  /data/app/com.xpointers.careteam-2/lib/arm/libpjsipjni.so (_JNIEnv::NewStringUTF(char const*)+8)

任何想法?或者,如果呼叫被其他方断开,则可以获得通知的任何替代方案?或者wifi在其他设备上断开连接,为此我会收到呼叫断开的通知。

2 个答案:

答案 0 :(得分:1)

这个错误会引发棒棒糖和更高版本,因为它们正在使用ART,而某些符号无法通过它进行检测。

答案 1 :(得分:0)

也许这篇文章中有些内容会有所帮助。

Do not use the JNI call to NewStringUTF unless you control the input 100%

简而言之,请参阅上面的链接。尝试避免使用NewStringUTF并将输入的字节数组发送到java并让它生成jstring。

我不会假装理解CSipSimple的实现,但如果这确实是你问题的根源我也不会感到惊讶。我希望有所帮助。自从Android 5问世以来,这个问题一直困扰着我们,并且使用软键盘将JNI与用户创建的字符串一起使用已经慢慢成为一个大问题。