目的
- Android アプリで使用するアプリ固有データの種類・保存についてまとめる。
Androidアプリデータの保存方法による分類
-
Androidでアプリが保存するデータ(以下「アプリデータ」)の種類には以下がある。
(1) アプリ固有のファイル
アプリ独自のファイルで、他のアプリから共有しないファイル。アプリ独自フォーマットのファイル等。(2) 共有ファイル
メディアやドキュメントなど、他のアプリと共有可能なファイル。一般的なフォーマットで他アプリから利用可能な画像・音声・動画ファイル等。(3) 設定データ
アプリ固有の設定データ。他アプリからアクセスできない領域へキーと値のペアで保存する。(4) データベース
構造化したデータを非公開のデータベースへ保存する。 -
アクセス手段・必要な許可・アプリのアンインストール時に削除されるかどうかはそれぞれ異なる。
-
詳細は Android developers データ ストレージとファイル ストレージの概要 参照。
アプリ固有ファイルの保存場所
-
アプリ固有ファイルの保存場所は、内部・外部の2種類がある。
-
内部・外部の別は保存場所や他アプリからアクセスできるかできないかの違いを示し、 デバイス内蔵で取り出せないメディアか・取り出せるメディア(SDカード)かの別を示すものではない 。GoogleのPixelシリーズ等、SDカードスロットが無いデバイスでも "外部ストレージ" は存在する。
-
内部・外部ともにファイルを保存する専用の場所とキャッシュファイルを保存する別の場所がある。
(1) 内部ストレージディレクトリ
-
専用ディレクトリのパスは
Context#getFilesDir()
で取得する。実機のPixel5a(API30)では/data/user/0/(パッケージ名)/files
のFile
オブジェクトを返す。 -
API30 の環境では Android Studio の Device File Explorer でも上記フォルダはアクセス不可。(暗号化されて見えない?)
-
Android10(APIレベル29)以上では保存場所は暗号化される。
(2) 外部ストレージディレクトリ
-
デフォルトの専用ディレクトリのパスは
Context#getExternalFilesDir(String type)
で取得する。 -
保存するファイルが一般的なフォーマットで他アプリから利用可能な画像・音声・動画ファイル等の場合、上記
String type
引数でメディア種別毎のディレクトリへ保存することが推奨されている。使用可能な定数はEnvironment.DIRECTORY_PICTURES
(画像)・Environment.DIRECTORY_MUSIC
(オーディオ)・Environment.DIRECTORY_MOVIES
(動画)等。他にも指定できるので Environmentクラス を参照。 -
実機のPixel5a(5G)(API30)で、引数
String type
へEnvironment.DIRECTORY_PICTURES
を指定した場合の返値(Fileオブジェクト)は/storage/emulated/0/Android/data/(パッケージ名)/files/Pictures
となる。 -
保存するファイルが一般的なフォーマットでない場合、引数
String type
にはnull
を指定する。 -
実機のPixel5a(5G)(API30)で、引数
String type
へnull
を指定した場合の返値(Fileオブジェクト)は/storage/emulated/0/Android/data/(パッケージ名)/files
となる。 -
上記メソッドで取得可能な保存場所の権限は、Pixel5a(5G)では
drwxrws---
、AVD上のPixel3(API30)では/storage/emulated/0/Android/data
までは見えるが、それ以下はPermission denied
と表示され見えない。(Android Studio のDevice File Explorer で確認。)AVD上では他のアプリからアクセスできないかもしれない。
その他
- 設定データ(Preference)については後で追記するかも。
- データベースについては調べたら追加するかも。
参考
変更履歴
- 2022/1/5 初版