Unity Android アプリで Application.persistentDataPath で保存したファイルが Windows 側からエクスプローラで見えないときに実機再起動で解決したメモ

Unity Android アプリで Application.persistentDataPath で保存したファイルが Windows 側からエクスプローラで見えないときに実機再起動で解決したメモです。

おきたこと

キャプチャは、もろに開発中のフォルダが出てしまうので、今回は避けていきます。

アプリに関するテキストの設定ファイルを、エクスプローラから見える場所から編集できるようなユースケースを目指して、他の案件でもやっていたような設定ファイルの動作を「はじめて」Androidに仕込みました。

ざっくり以下の状況です。

  • とある Android 実機 Android のバージョンは6
  • Unity 2018.4.24f で開発
  • Application.persistentDataPath の直下にテキストファイル保存
    • /storage/emulated/0/Android/data/<アプリ名のフォルダ>/files/ の場所
  • ファイル操作系の関数は特に特殊なことはせずシンプルに使っている
  • 内部ストレージ指定で書き込み指定
  • アプリに関するテキストの設定ファイルを、エクスプローラから見える場所から編集したい

みたいな状況で、素直にファイル保存されているはずが、

  • Windows エクスプローラ側
    • /storage/emulated/0/Android/data/ 直下に他のアプリはある
    • 今回インストールしたアプリフォルダそのものが見えない
    • cache フォルダが成立すると、/storage/emulated/0/Android/data/<アプリ名のフォルダ>/cache/ は見える場合がある
    • けれど、やっぱり /storage/emulated/0/Android/data/<アプリ名のフォルダ>/files/ は見れない
  • Unity Android アプリ側でファイル存在やファイル内容をログで見てみる
    • バッチリとれる。
    • つまりデータとして存在しているが、Windows エクスプローラでは見えない!
    • なぜ!

という状況で大変困りました。

結論としては、実機を再起動で見えるようになりました

  • パーミッションが追加で必要なんじゃないか?→解決せず
  • 内部ストレージじゃなくて外部ストレージに指定すると行けるんじゃないか?→解決せず
  • Unity ファイル操作系の関数にコツが必要?→文献を見るに、そういうのはないっぽい
  • Unity でなく Android 直のファイル操作系の関数を使う? →やってみたけど解決しないし、このあたりじゃない気配
  • ドキュメントフォルダなど他のところに保存? →はるかに権限とか配慮が必要で、かけるパワーに対してきつそうなので却下(でも、これは結局解決になってないので今は触れたくない)

という試行錯誤をした上で、まさかと思って実機の再起動でうまくいきました。

つまり結論としては、

新しいアプリとして Unity Android アプリをインストールしたあと、そのアプリフォルダの中にUnity で保存したファイルが見えないときは、Android 実機を一度再起動して Windows エクスプローラで見てみたら files フォルダも配下のテキストファイルが見えた

ということです。

どうも、このあたりは、メディアスキャンとかファイルリストの更新みたいな要素が影響してそうですが、とりあえず、自分の状況は解決できたので良かったです!