はじめに
5 月 5 日より、アプリがストレージへの広範なアクセスを必要とする理由をお知らせいただく必要があります
Google Play Console に上記の警告が来ていて、何のことか分からなかったので調べてみました。
背景
アプリデータのアクセス権をより限定的にしていく(他のアプリからアクセスできないようにする)ことで、これからますますセキュリティを高めたいと Google は思ってる
前提
通常のテキストデータなどは SQLite に保存できるが、画像は SQLite には保存できない。
じゃあどこに保存してるのかというと、ストレージ。
で、ストレージには内部ストレージと外部ストレージ(SD カードとか)があるが、画像などの容量が大きいものは外部ストレージを使うのが一般的。
自分のアプリもそうしてる。
Android 9(API 28)まで
デフォルト設定の場合、外部ストレージはどのアプリでも自由に使えたし、他のアプリのディレクトリも見れた。セキュリティはガバガバだった。
Android 10(API 29)から
ユーザーがファイルを詳細に管理して整理できるように、Android 10(API レベル 29)以降をターゲットとするアプリには、外部ストレージに対する特別アクセス権限がデフォルトで付与されます(対象範囲別ストレージ)。
このようなアプリでアクセスできるのは、外部ストレージにあるアプリ固有ディレクトリと、そのアプリが作成したメディアタイプだけに限られます。
参考:https://developer.android.com/about/versions/11/privacy/storage?hl=ja
つまりアプリ固有のディレクトリが付与された(対象範囲別ストレージ)。
だけどこれを利用するためにはコードの修正が必要で開発コストがかかる、、
ので、特別に対象範囲別ストレージを利用しない設定にできる
それがrequestLegacyExternalStorage
を true にすること
そういう理由で今は自分のアプリは true にしてる
Android 11(API 30)から
なんとrequestLegacyExternalStorage
が使えなくなった!
つまり絶対に対象範囲別ストレージを使わないといけない、、!
ただし、もしどうしても対象範囲別ストレージを使いたくないって場合はマニフェストファイルを修正(MANAGE_EXTERNAL_STORAGE)し、Google Play Console で申告が必要!
現在の自分のアプリのターゲット
targetSdkVersion 29
Android 10
利用箇所の調査
検索ワード
- getExternalFilesDir
- getExternalCacheDir
結論
現在の自分のアプリのターゲットは Android 10 なので、これを変更しない限りは対応不要。
と言ってももちろん近いうちに Android 11 に更新はしたい。
で、せっかくなのでその時に対象範囲別ストレージを利用するように修正すればいい、と思う。
開発コストがどのくらいかかるかは不明だけど多分そこまでだと思うし、セキュリティ的にもその方が良い。