開發工具:Android Studio1.2
真機:華碩 ASUS_T00J
功能:文件管理
之前軟件有個功能是:文件管理功能,發現一個問題,sdcard裏面的apk 文件filesize爲0,原因:文件名不是UTF-8的;
後來就在本地調試,發現只要一進去那個有亂碼文件的文件夾,軟件就會崩潰;
後來各種折騰。。。略過
文件截圖:
出錯log如下:
W/dalvikvm﹕ JNI WARNING: input is not valid Modified UTF-8: illegal start byte 0xb7
W/dalvikvm﹕ string: '????QQ.mp3'
W/dalvikvm﹕ in Ljava/io/File;.listImpl:(Ljava/lang/String;)[Ljava/lang/String; (NewStringUTF)
I/dalvikvm﹕ "main" prio=5 tid=1 NATIVE
I/dalvikvm﹕ | group="main" sCount=0 dsCount=0 obj=0x42f06460 self=0x42ef0320
I/dalvikvm﹕ | sysTid=7188 nice=0 sched=0/0 cgrp=apps handle=1073954848
I/dalvikvm﹕ | state=R schedstat=( 6269686245 258615653 3600 ) utm=556 stm=70 core=3
I/dalvikvm﹕ #00 pc 0010b068 /system/lib/libdvm.so (dvmDumpNativeStack(DebugOutputTarget const*, int)+72)
I/dalvikvm﹕ #01 pc 000e7b0b /system/lib/libdvm.so (dvmDumpThreadEx(DebugOutputTarget const*, Thread*, bool)+1099)
I/dalvikvm﹕ #02 pc 000e7d75 /system/lib/libdvm.so (dvmDumpThread(Thread*, bool)+69)
I/dalvikvm﹕ #03 pc 000a1893 /system/lib/libdvm.so (ScopedCheck::checkUtfString(char const*, bool)+259)
I/dalvikvm﹕ #04 pc 000a25cb /system/lib/libdvm.so (ScopedCheck::check(bool, char const*, ...)+1275)
I/dalvikvm﹕ #05 pc 000a6674 /system/lib/libdvm.so
I/dalvikvm﹕ #06 pc 0005e5e9 /system/lib/libjavacore.so (toStringArray(_JNIEnv*, std::vector<std::string, std::allocator<std::string> > const&)+217)
I/dalvikvm﹕ #07 pc 00018688 /system/lib/libjavacore.so
I/dalvikvm﹕ #08 pc 0007c02f /system/lib/libdvm.so (dvmPlatformInvoke+79)
I/dalvikvm﹕ at java.io.File.listImpl(Native Method)
I/dalvikvm﹕ at java.io.File.list(File.java:749)
I/dalvikvm﹕ at java.io.File.listFiles(File.java:791)
I/dalvikvm﹕ at java.io.File.listFiles(File.java:826)
I/dalvikvm﹕ at com.pkgname.filemanager.FileSystemNode._getChildren(FileSystemNode.java:95)
I/dalvikvm﹕ at com.pkgname.filemanager.FileSystemNode.getChildren(FileSystemNode.java:206)
I/dalvikvm﹕ at com.pkgname.filemanager.FileManager.createFileListAdapter(FileManager.java:556)
I/dalvikvm﹕ at com.pkgname.filemanager.FileManager.selectDirNode(FileManager.java:583)
I/dalvikvm﹕ at com.pkgname.filemanager.FileManager.onClickDirectory(FileManager.java:561)
這是在as上直接運行apk出問題,找了一個下午,大部分都是說需要修改jni,但是第三方應用不能這樣幹啊;
後來突然發現在Jenkins上編譯的包可以運行,文件管理不會崩潰,只是取得的文件size是0,而且不能刪除和重命名;但是展示是沒有問題的;
所以以後有人遇到這樣的問題,就別費勁弄了,可能是簽名的問題;
到現在我也不明白是怎麼回事,現在還有幾個疑問:
1. 調用listfile有兩個地方:一個是後臺線程池遍歷sdcard,取得apk文件功能; 一個是有界面的文件管理器功能; 後臺的遍歷到那個運行不會崩潰,有界面的文件管理就崩潰了,即使我這兩個地方把代碼改成一模一樣的,一樣崩潰;
2. 我在網上下載兩個文件管理器的源碼:點擊打開鏈接, 的可以下載源碼看看,其中FileExplorer本地運行崩潰,Androidfilemanager運行良好;
這就導致了矛盾, 爲什麼我自己的包可能跟簽名有關???而下載的源碼貌似又跟簽名無關。。。
求大神解答,如果確少亂碼文件,可以回覆我,我上傳;