前言
最近在调试多媒体时,出现特别奇怪的问题,也就是扫描磁盘中文件时被中断了,之前都是好的。
记录于此,方便自己查阅。
好记性不如烂笔头
正文
部分异常日志如下。
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,抱歉,我看不到。
这里记录一下,只是让自己知道原因,已经如何分析问题。
参考文章
历史上的今天
暂无评论...
随机推荐
Android Socket之服务端封装
前言之前记录了Android中Socket的简单使用,也就是对数据的简单收发操作。这简单的对SocketServer进行封装。记录于此,方便自己查阅。正文SocketServer服务端一般不需要我们写,大多数是作为客户端去绑定其他的,比如Tbox。但服务端跟客户端差不多,因此也一起整理一下...
徐志摩 :偶然
我是天空里的一片云,偶尔投影在你的波心──你不必讶异,更无须欢喜──在转瞬间消灭了踪影。 你我相逢在黑夜的海上,你有你的,我有我的,方向;你记得也好,最好你忘掉在这交会时互放的光亮!
[摘]PCM文件转WAV文件
一、WAV和PCM的区别和联系在Android平台上要进行音频编辑操作(比如裁剪,插入,合成等),通常都是需要将音频文件解码为WAV格式的音频文件或者PCM文件。那么WAV和PCM之间有什么关系,这里有必要了解一下。PCM(Pulse Code Modulation—-脉码调制录音)。所谓PC...
[摘]System.exit(0)和System.exit(1)区别
原作者解释得很清晰明,因此摘抄于此。关于System.exit(status)System.exit(status)源码说明如下:System.java/** * Terminates the currently running Java Virtual Machine. The * ...
Android NDK 部分版本下载
本文摘抄《NDK各版本下载》以便自己下载https://dl.google.com/android/repository/android-ndk-r17b-windows-x86.ziphttps://dl.google.com/android/repository/android-nd...
ListView的item中当文本出现阿拉伯语时会显示怪异
前言测试反馈有些歌曲名字中如果存在阿拉伯语,列表显示时就出现显示右边怪异的问题。总所周知,阿拉伯语显示在右边的。比如עברית_xi bo lai yu.mp3العربية_a la bo yu.mp3فارسی_bo si yu.mp3显示如下 a la ...