UnityとAndroidのデータ保存領域・パス取得方法まとめ

アプリ開発において、内部ストレージや外部ストレージのデータ保存領域について改めて調べる必要があったので、今後の開発用の覚書としてまとめることにしました。

特にAndroid 10以降で導入された「Scoped Storage(対象範囲別ストレージ)」によって、ファイルアクセスの仕様が大きく変化しています。
キャッシュとして扱うべきか、ユーザーの永続データとして扱うべきかによって適切なパスやAPIが異なるため、モダンなOS環境に合わせて一覧で参照できるようにしています。

目次

Unityにおけるデータ保存パスと取得領域一覧

Unityの Application クラスを利用して取得できるパスと、各OS(Android / iOS)における実際の保存領域の対応表です。

パス取得変数環境データの領域取得パスの例
Application.dataPathAndroid/data/app/<パッケージ名>-<ハッシュ>/base.apk
同上iOS/var/containers/Bundle/Application/<固有ID>/myappname.app/Data
Application.persistentDataPathAndroid外部データ(アプリ専用)/storage/emulated/0/Android/data/<アプリのID>/files/
同上iOS内部データ/var/mobile/Containers/Data/Application/<固有ID>/Documents
Application.temporaryCachePathAndroid外部キャッシュ/storage/emulated/0/Android/data/<アプリのID>/cache/
同上iOS内部キャッシュ/var/mobile/Containers/Data/Application/<固有ID>/Library/Caches

※Android環境において、persistentDataPathtemporaryCachePath は、アンインストール時にデータが削除されるアプリ専用領域(Scoped Storageに準拠)を指すのが現在の基本挙動です。

Androidネイティブにおけるストレージ領域と最新のパス取得

続いて、Androidのネイティブ環境(Java/Kotlin)で取得できる各種ディレクトリのパスと特徴です。APIレベル29(Android 10)以降の仕様変更に注意が必要です。

検証・前提環境

  • OS:Android 10 以降 (Scoped Storage適用環境)
  • 言語:Java / Kotlin
パス取得メソッド領域アプリ専用ユーザ許可アプリ削除時備考・現在の仕様
Context.getFilesDir()内部データ不要消えるアプリ占有の内部領域(/data/user/0/<アプリID>/files)
Context.getCacheDir()内部キャッシュ不要消えるOSによって自動消去される可能性がある内部領域
Context.getExternalFilesDir()外部データ不要消えるAndroid 4.4以降パーミッション不要。現在の外部保存の基本。
Context.getExternalCacheDir()外部キャッシュ不要消える外部領域の一時保存用。
Environment.getExternalStorageDirectory()外部公開×消えない【API 29で非推奨】直接アクセス不可。現在はSAFやMediaStoreを推奨。
Environment.getExternalStoragePublicDirectory()外部公開共有×消えない【API 29で非推奨】画像や動画の共有はMediaStoreを利用。

Scoped Storage時代の保存領域の使い分け

一時的なデータは CacheDir に、ユーザーのセーブデータなど消されては困るアプリ固有のデータは ExternalFilesDir(またはUnityの PersistentDataPath)に保存するのが現在のセオリーです。

他のアプリとファイルを共有したい場合(画像やファイルの端末内へのエクスポートなど)は、パスを直接指定する旧来の手法ではなく、MediaStore APIStorage Access Framework (SAF) を利用してURI経由でアクセスするように設計をアップデートしましょう。

参考サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、秋月なるです。
アラフォー会社員で、スマホアプリ/ゲーム/AIが好き。新しいものを見ると触りたくなるタイプで、スマホやウェアラブル等ガジェットが好きですが、よく買ったあとに「思ってたのと違う…」をやりがち。
ブログ投稿は趣味の1つなので、ゆるく続けていこうと思います。

目次