前言
最近在调试多媒体时,出现特别奇怪的问题,也就是扫描磁盘中文件时被中断了,之前都是好的。
记录于此,方便自己查阅。
好记性不如烂笔头
正文
部分异常日志如下。
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'java_vm_ext.cc:542] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0'
r0 00000000 r1 00002d6a r2 00000006 r3 00000008
r4 00002cff r5 00002d6a r6 8f3a879c r7 0000010c
r8 00000000 r9 acb906e0 r10 0000000a r11 aca1f84e
ip 8f3a8738 sp 8f3a8788 lr aff37e49 pc aff2fc96
backtrace:
#00 pc 0001cc96 /system/lib/libc.so (abort+58)
#01 pc 0034dc9f /system/lib/libart.so (art::Runtime::Abort(char const*)+910)
#02 pc 000071b3 /system/lib/libbase.so (android::base::LogMessage::~LogMessage()+494)
#03 pc 0023218f /system/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1214)
#04 pc 002322e7 /system/lib/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+58)
#05 pc 000c3f77 /system/lib/libart.so (art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...)+42)
#06 pc 000c3e77 /system/lib/libart.so (art::(anonymous namespace)::ScopedCheck::CheckNonHeapValue(char, art::(anonymous namespace)::JniValueType)+938)
#07 pc 000c20f5 /system/lib/libart.so (art::(anonymous namespace)::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::(anonymous namespace)::JniValueType*)+624)
#08 pc 000ba295 /system/lib/libart.so (art::(anonymous namespace)::CheckJNI::NewStringUTF(_JNIEnv*, char const*)+488)
#09 pc 00014f77 /system/lib/libopenjdk.so (Java_java_io_UnixFileSystem_list0+310)
上面是系统内部保存的AEE日志。
查看网上相关内容后,说是[无效的UTF-8字符串]导致的问题。(具体看文末)
最后debug发现,是Android系统中的一个接口异常了。
代码中有遍历目录中的文件,但如果当前目录中存在奇怪的或者说无效的UTF-8字符串就会出现如上的问题。
File file = new File(path);
if ( file.exists()) {
File[] files = file.listFiles();
}
然而我的目录下存在如下文件
-rw-rw---- 1 root sdcard_rw 122403851 2021-05-26 14:26 任然-飞鸟
-rw-rw---- 1 root sdcard_rw 108228882 2021-05-26 14:28 梦然-少\345
这两个其实是我push到内置sdcard中的视频文件,但由于环境问题,导致push后的文件变了。
梦然-少年.mp4
任然-飞鸟和蝉.mp4
查看完整的异常日志,中也发现
runtime.cc:558] at java.io.File.list(File.java:1131)
runtime.cc:566] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0
runtime.cc:566] string: '梦然-少▒'
runtime.cc:566] input: '0xe6 0xa2 0xa6 0xe7 0x84 0xb6 0x2d 0xe5 0xb0 0x91 0xe5'
runtime.cc:566] "Thread-3" prio=5 tid=16 Runnable
从上面可以看出[梦然-少\345]这个遍历时就异常了。
怎么解决这个问题
看网上说有人反馈了这个bug( https://code.google.com/p/android/issues/detail?id=25386 ) 这个是2016年左右的,但我2021年还能复现。
由于无法FQ,抱歉,我看不到。
这里记录一下,只是让自己知道原因,已经如何分析问题。
参考文章
© 版权声明