Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

About JNI Crash:from java.lang.String[] java.io.UnixFileSystem.list0 #69

Closed
rosuH opened this issue Apr 30, 2020 · 0 comments
Closed
Labels
faq question Further information is requested

Comments

@rosuH
Copy link
Owner

rosuH commented Apr 30, 2020

Recently, I encountered a crash while read file from external storage. Stack trace shown below:

最近在开发的时候,偶遇到扫描 SD 卡文件列表直接崩溃的情况,报错堆栈如下:

2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]     string: '如何看待微�'
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]     input: '0xe5 0xa6 0x82 0xe4 0xbd 0x95 0xe9 0xab 0x98 0xe5 0xa7 0xbf 0xe6 0x80 0x81 0xe7 0x9a 0x84 0xe7 0x9c 0x8b 0xe5 0xbe 0x85 0xe5 0xbe 0xae 0xe5'
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]     in call to NewStringUTF
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]     from java.lang.String[] java.io.UnixFileSystem.list0(java.io.File)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470] "Thread-3" prio=5 tid=16 Runnable
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   | group="main" sCount=0 dsCount=0 obj=0x12c499d0 self=0x7dbc733000
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   | sysTid=24867 nice=0 cgrp=default sched=0/0 handle=0x7dac507450
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   | state=R schedstat=( 3096354 2114062 5 ) utm=0 stm=0 core=6 HZ=100
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   | stack=0x7dac405000-0x7dac407000 stackSize=1037KB
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   | held mutexes= "mutator lock"(shared held)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #00 pc 0000000000480e20  /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+220)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #01 pc 0000000000480e1c  /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+216)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #02 pc 00000000004554b4  /system/lib64/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+472)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #03 pc 00000000002f0124  /system/lib64/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+1128)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #04 pc 00000000002f080c  /system/lib64/libart.so (_ZN3art9JavaVMExt9JniAbortVEPKcS2_St9__va_list+120)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #05 pc 00000000001034e8  /system/lib64/libart.so (_ZN3art11ScopedCheck6AbortFEPKcz+156)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #06 pc 00000000001041e4  /system/lib64/libart.so (_ZN3art11ScopedCheck14CheckUtfStringEPKcb+1344)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #07 pc 0000000000100be8  /system/lib64/libart.so (_ZN3art11ScopedCheck5CheckERNS_18ScopedObjectAccessEbPKcPNS_12JniValueTypeE+1120)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #08 pc 00000000000fb728  /system/lib64/libart.so (_ZN3art8CheckJNI12NewStringUTFEP7_JNIEnvPKc+624)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #09 pc 0000000000021944  /system/lib64/libopenjdk.so (Java_java_io_UnixFileSystem_list0+468)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   native: #10 pc 000000000006702c  /data/dalvik-cache/arm64/system@[email protected] (Java_java_io_UnixFileSystem_list0__Ljava_io_File_2+152)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   at java.io.UnixFileSystem.list0(Native method)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   at java.io.UnixFileSystem.list(UnixFileSystem.java:301)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   at java.io.File.list(File.java:1059)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   at java.io.File.listFiles(File.java:1137)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   at me.rosuh.filepicker.utils.FileUtils$Companion.produceListDataSource(FileUtils.kt:53)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   at me.rosuh.filepicker.FilePickerActivity$loadFileRunnable$2$1.run(FilePickerActivity.kt:53)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470]   at java.lang.Thread.run(Thread.java:776)
2020-04-30 10:26:30.008 24795-24867/me.rosuh.androidfilepicker A/art: art/runtime/java_vm_ext.cc:470] 

After some debugging, the reason is that there is a file name that not encoded in UTF-8 format. This crash will only occur in Debug mode, because the debuggable attribute will be set to 'true` in release version, so this will not happen.

经过排查, 应该是该文件的名字不符合 UTF-8 编码,此崩溃仅在 debug 模式下会出现,如果是 release 版本,打包时会被设置 debuggable=false ,所以不会出现此情况。

在开发阶段可以删除有问题的文件。不会影响线上使用,请知悉。

参看:

@rosuH rosuH pinned this issue Apr 30, 2020
@rosuH rosuH added question Further information is requested faq labels Apr 30, 2020
@rosuH rosuH closed this as completed May 13, 2020
@rosuH rosuH changed the title 关于 JNI 层崩溃:from java.lang.String[] java.io.UnixFileSystem.list0 About JNI Crash:from java.lang.String[] java.io.UnixFileSystem.list0 Apr 1, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
faq question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant