6

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

JNI检测到应用程序错误,输入无效修改UTF-8:非法起始字节0x8e

在进行 voip 通话时,我在这里每隔一段时间向 ISipService 发送消息,以检查通话是否正在进行或断开。我在 pjSipService.java 类中的 pjStr.getPtr() 上遇到了这个异常。我在这里粘贴我的错误日志。

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 在其他设备上断开连接,为此我会收到通话已断开的通知。

4

2 回答 2

1

也许这篇文章中有一些东西会有所帮助。

除非您控制输入 100%,否则不要使用对 NewStringUTF 的 JNI 调用

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

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

于 2015-12-16T22:49:49.873 回答
1

棒棒糖和更高版本会抛出此错误,因为它们正在使用 ART,并且某些符号无法被它检测到。

于 2015-12-15T05:53:12.093 回答