特定のファイル名の File.listFiles() で問題が発生しました。ディレクトリに、名前にキリル文字や日本語などのマルチバイト文字を含むファイルが含まれているため、ファイル名の合計の長さ (パス全体ではない) が 255 バイトを超える場合、メソッド File.listFiles() によって delvik が異常終了します。 LogCat に次のエラーが書き込まれます。
07-14 20:06:53.758: A//system/bin/app_process(18698): stack corruption detected: aborted
このエラーの原因となるファイル名の例を次に示します。
Аверинцев Сергей Сергеевич - Проповеди. Псалмы, книга Иова (в переводе С.С. Аверинцева). Духовные стихи [Аверинцев С.С., 2004, 128-192 kbps] -- RuTracker.org (ex torrents.ru).url
NDK を使用してコード全体を書き直そうとしましたが、関数 scandir は 255 バイトの長い名前しか返しません。異常終了しませんが、ファイル名が切り捨てられます。上記のファイルを次のように切り捨てます。
Аверинцев Сергей Сергеевич - Проповеди. Псалмы, книга Иова (в переводе С.С. Аверинцева). Духовные стихи [Аверинцев С.С., 2004, 128-192 kbps] -- RuTracker.org (ex torren
_wopendir、_wreaddir などの wchar と同等の関数を使用してみましたが、ndk-build でコンパイルできません。wcharをサポートするはずのCrystax NDK(http://www.crystax.net/en/android/ndk)を使用することを考えましたが、ドキュメントがまったくないため、それを行うことができませんでした。
アイデアはありますか?