Android 対象範囲別ストレージを理解する: 何が変わったのか、そしてなぜそれが重要なのか

A smartphone beside small storage drawers with one locked, illustrating Android scoped storage

Android デバイス上でファイルを管理しようとしたことがある場合は、実行している Android のバージョンに応じて動作が異なることにおそらく気づいたでしょう。 Android 10 以降、Google はアプリがファイル システムと対話する方法に根本的な変更を導入しました。 範囲指定されたストレージ として知られるこの変更は、共有ストレージ上のファイルの読み取りと書き込みに関するルールを再定義しました。アプリをサイドロードしたり、OBB ファイルを管理したり、ファイル マネージャーを使用したりするユーザーにとって、スコープ ストレージを理解することは不可欠です。

この記事では、スコープ付きストレージとは何か、Google がそれを実装した理由、それが日常のユーザーや開発者にどのような影響を与えるか、Play ストア以外で APK または XAPK ファイルをインストールする人にとってそれが何を意味するのかについて説明します。

古いストレージモデルの問題

Android 10 より前では、READ_EXTERNAL_STORAGE または WRITE_EXTERNAL_STORAGE 権限を要求したアプリは、デバイスの共有ストレージ上のほぼすべてのファイルにアクセスできました。これには、写真、ドキュメント、ダウンロード、さらには他のアプリで作成されたファイルも含まれます。これによりファイル管理は便利になりましたが、プライバシーとセキュリティに重大な懸念が生じました。

シンプルな懐中電灯アプリを考えてみましょう。古いモデルでは、ストレージ権限を付与すると、サイレントに写真を読み取ったり、ダウンロードしたドキュメントをスキャンしたり、他のアプリケーションに属するファイルを変更したりする可能性がありました。細かい制御はありませんでした。アプリにストレージ全体への完全なアクセスを許可したか、完全に拒否しました。

この広範なアクセスが現実世界の問題を引き起こしました。一部のアプリは、機密ファイルのストレージをスキャンすることによってユーザー データを収集しました。アプリがアンインストールされてから長い間、デバイスを乱雑にする孤立したファイルを残した人もいます。 Google は使いやすさとプライバシーのバランスをとるソリューションを必要としており、その答えが範囲指定型ストレージでした。

スコープ付きストレージが実際に行うこと

スコープ付きストレージは、アプリとファイル システムの関係を根本的に変えます。このモデルでは、各アプリは、通常は /Android/data/[package.name]/ にある外部ストレージ上に独自のプライベート サンドボックスを取得します。アプリは、権限をまったく必要とせずに、独自のサンドボックス内で自由に読み書きできます。

ただし、このサンドボックスの外部にあるファイルにアクセスするには、制御された API を経由する必要があります。新しいモデルの仕組みは次のとおりです。

アプリ固有のストレージ

すべてのアプリには、そのアプリだけがアクセスできる専用のディレクトリがあります。アプリがアンインストールされると、このディレクトリは自動的にクリーンアップされます。 root アクセス権がなければ、他のアプリはこの場所に読み書きすることはできません。これにより、孤立したファイルの問題が解消され、アプリ間のデータ スヌーピングが防止されます。

メディアコレクション

写真、ビデオ、オーディオ ファイルなどの共有メディアのために、Android は MediaStore API を提供します。アプリは、この構造化インターフェイスを介してのみ、共有コレクションにメディアを提供したり、他のアプリによって作成されたメディアを読み取ることができます。アプリは許可なしで自分のメディアを表示できますが、他のアプリのメディアにアクセスするには、Android 13 で導入された READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、または READ_MEDIA_AUDIO 権限が必要です。

ストレージアクセスフレームワーク

ドキュメントやその他の非メディア ファイルの場合、アプリはストレージ アクセス フレームワーク (SAF) を使用する必要があります。これにより、システム ファイル ピッカーがユーザーに表示され、ユーザーはアプリがアクセスできるファイルまたはディレクトリを明示的に選択します。アプリがファイル システム全体に包括的にアクセスすることはありません。

MANAGE_EXTERNAL_STORAGE 権限

ファイル マネージャー、バックアップ ツール、ウイルス対策ソフトウェアなど、広範なファイル アクセスを本当に必要とするアプリの場合、Android は MANAGE_EXTERNAL_STORAGE 権限を提供します。ただし、この権限には、Play ストアを通じて配布されるアプリに対して Google からの特別な承認が必要であり、ユーザーは単純なダイアログではなくシステム設定を通じて手動で許可を付与する必要があります。

ロールアウトのタイムライン

Google は、範囲指定されたストレージを一夜にして強制したわけではありません。移行は徐々に起こりました。

  • Android 10 (API 29): スコープ付きストレージ(Scoped Storage)が導入されましたが、アプリはマニフェスト内で requestLegacyExternalStorage="true" を使用してオプトアウトできました。これにより、開発者には適応する時間が与えられました。
  • Android 11 (API 30): 従来のフラグは、API 30 以降をターゲットとするアプリでは無視されました。 Play ストアの新規および更新されたアプリには、範囲指定されたストレージが必須になりました。
  • Android 12 以降: きめ細かなメディア権限や SAF パフォーマンスの向上など、さらなる改良が行われました。
  • Android 13 (API 33): 広範囲の READ_EXTERNAL_STORAGE 権限は非推奨になり、特定のメディア権限が優先されました。
  • Android 14 (API 34): 写真とビデオの部分的なアクセスが導入され、ユーザーがメディア ライブラリ全体ではなく特定のファイルへのアクセスを許可できるようになりました。

スコープ付きストレージがサイドローディングに与える影響

Play ストアの外部からアプリをインストールするユーザーにとって、スコープド ストレージには理解する価値のあるいくつかの実用的な課題があります。

APK ファイルのダウンロードとアクセス

ブラウザを通じて APK ファイルをダウンロードすると、通常、ダウンロード フォルダーにダウンロードされます。スコープ付きストレージでは、ブラウザー アプリがそのファイルを所有します。ファイル マネージャーなどの別のアプリを使用してインストールする場合は、そのファイル マネージャーに適切なアクセス権が必要です。最新のファイル マネージャーのほとんどは SAF を通じてこれを正しく処理しますが、古いファイル マネージャーでは問題が発生する可能性があります。

システム パッケージ インストーラーは、ファイル ピッカーを通じて明示的に選択したファイルに引き続きアクセスできるため、APK をダウンロードしてインストールする基本的なフローは引き続き機能します。ただし、ファイル パスへの直接アクセスに依存した自動インストール ワークフローは機能しなくなる可能性があります。

OBB ファイルとゲームデータ

これは、スコープ指定されたストレージがサイドローダーにとって最も摩擦を引き起こす場所です。多くの大規模なゲームは、/Android/obb/[package.name]/ に保存されている OBB (Opaque Binary Blob) ファイルを使用します。古いモデルでは、ファイル マネージャーを使用して OBB ファイルを正しいディレクトリにコピーするだけで済みました。

スコープ付きストレージでは、/Android/obb/ ディレクトリが制限されます。 Android 11 以降では、通常のアプリは別のアプリの OBB ディレクトリに書き込むことができません。つまり、OBB データを含む XAPK ファイルをダウンロードする場合、インストーラーはそれらのファイルを正しく配置するために特別な処理を必要とします。

OBB エクストラクター などのツールは、XAPK パッケージから OBB ファイルを抽出するのに役立ちますが、新しい Android バージョンの正しいディレクトリにファイルを配置するには、MANAGE_EXTERNAL_STORAGE 権限を持つファイル マネージャーを使用するか、コンピューターから ADB コマンドを使用する必要がある場合があります。

XAPK インストールに関する考慮事項

XAPK ファイルは、APK を OBB データとともにバンドルし、場合によっては APK 構成を分割します。 Android 11 以降を実行しているデバイスにこれらをインストールするには、対象範囲のストレージ制限を理解するインストーラーが必要です。インストーラーは、MANAGE_EXTERNAL_STORAGE 権限を保持するか、適切な API を使用して OBB ファイルを正しい場所に配置する必要があります。

これが、XAPK ファイルを標準 APK 形式に変換することが役立つ理由の 1 つです。スタンドアロン APK では OBB ファイルを配置する必要がないため、新しい Android バージョンでのインストール プロセスが簡素化されます。 XAPKSからAPKへのコンバーター を使用して、XAPK パッケージからベース APK を抽出できます。

開発者が知っておくべきこと

Android アプリを開発している場合、スコープ付きストレージではファイルの処理方法を再考する必要があります。

  • アプリのみが必要とするファイルの場合は アプリ固有のディレクトリを使用する。 これらは権限を必要とせず、アンインストール時に自動的に削除されます。
  • メディアストアを使用する は、他のアプリに表示され、アンインストール後も存続する必要がある写真、ビデオ、オーディオ用です。
  • SAF を使用する アプリがユーザーが選択したドキュメントまたはディレクトリを操作する必要がある場合。
  • ハードコーディングされたファイル パスは避けてください。 /sdcard/MyApp/ のようなパスは信頼できなくなりました。代わりに Context.getExternalFilesDir() を使用してください。
  • 複数の API レベルでテストします。 Android 10、11、13、14 では動作が大きく異なります。

移行戦略

アプリが以前にファイルを共有ストレージに保存していた場合は、移行計画が必要です。推奨されるアプローチは、更新後の最初の起動時に既存のファイルをアプリ固有のストレージにコピーし、その後古いコピーを削除することです。移行期間中にレガシー フラグを指定した Environment.getExternalStorageDirectory() を使用して古いファイルを読み取り、新しい場所に移動します。

よくある誤解

「スコープ付きストレージとは、アプリがどのファイルにもアクセスできないことを意味します」

これは誤りです。アプリは引き続き、独自のファイルに自由にアクセスしたり、共有メディア コレクションに参加したり、システム ピッカーを通じて特定のファイルへのアクセスを要求したりできます。変わったのは、アプリがファイル システム全体をサイレントに参照できなくなったことです。

「新しい Android バージョンではファイル マネージャーが壊れます」

MANAGE_EXTERNAL_STORAGE を要求するファイル マネージャーは引き続き機能します。ユーザーは、設定を通じてこの特別な権限を付与するだけで済みます。一般的なファイル マネージャーのほとんどは、すでにこの要件に対応しています。

「範囲指定されたストレージは SD カードにのみ影響します」

スコープ付きストレージは、内部共有ストレージを含むすべての共有ストレージに適用されます。 Android の「外部ストレージ」という用語は、複数のアプリからアクセスできる共有ストレージを指します。必ずしも物理的な SD カードを指すわけではありません。

ユーザーのための実践的なヒント

定期的にアプリをサイドロードしたり、Android デバイスでファイルを管理したりする場合は、次のような実用的な推奨事項がいくつかあります。

  1. MANAGE_EXTERNAL_STORAGEをサポートする最新のファイルマネージャーを使用する。 Solid Explorer、MiXplorer、Total Commanderなどのアプリは、スコープ付きストレージにうまく対応しています。
  2. 権限を慎重に付与してください。 ファイル マネージャーが「すべてのファイルへのアクセス」を要求する場合、これは MANAGE_EXTERNAL_STORAGE 権限であり、すべての機能を使用するために必要であることを理解してください。
  3. 頑固なファイル操作には ADB を使用します。 ファイル マネージャーを介して OBB ファイルを配置できない場合は、デバイスをコンピューターに接続し、adb push を使用すると、対象範囲のストレージ制限が完全にバイパスされます。
  4. 複雑なパッケージをより単純な形式に変換します。 新しいデバイスで XAPK ファイルが原因で問題が発生する場合は、APK コンポーネントだけを抽出するのが最も抵抗の少ない方法である可能性があります。
  5. インストーラー アプリを常に最新の状態に保ちます。 古いバージョンの XAPK インストーラーは、スコープ指定されたストレージを正しく処理できない可能性があります。

Android ストレージの未来

Google は、Android のリリースごとにストレージ モデルを改良し続けています。 Android 14 では部分的なメディア アクセスが導入され、ユーザーはライブラリ全体ではなく特定の写真をアプリと共有できるようになりました。 Android 15 では、Storage Access Framework のパフォーマンスと使いやすさがさらに向上することが期待されています。

傾向は明らかです。Android は、各アプリが表示および変更できる内容をユーザーがきめ細かく制御できるモデルに移行しています。これにより、パワー ユーザーやサイドローダーにとっては多少の摩擦が生じますが、より広範なユーザー ベースのプライバシーとセキュリティが大幅に向上します。

アプリデータを壊さずにスコープ付きストレージを操作する

スコープ付きストレージは、Android アーキテクチャに対する近年の最も重要な変更の 1 つです。アプリを独自のサンドボックスに制限し、より広範なアクセスに対して明示的なユーザーの同意を要求することで、Google はプラットフォームのプライバシー体制を劇的に改善しました。アプリをサイドロードし、手動でファイルを管理するユーザーの場合、これらの制限を理解することで、時折発生する問題点を回避することができます。また、開発者にとって、スコープ付きストレージへの適応はオプションではなく、最新の Android 開発の基本的な要件です。

APK のインストール、OBB ファイルの配置、日々のストレージ管理はすべて同じシステム、つまりスコープ ストレージで実行されます。その仕組みを理解すれば、広範なファイル アクセスを悪用する可能性のあるアプリに翻弄されるのではなく、デバイスを制御できるのはあなたです。

Mst Shaefale による設計と文書化 リード開発者兼 Android パッケージ アーキテクト • Android 12 ~ 15 で検証済み

Mst Shaefale は、クライアント側の XAPK/APKS マージ、バイナリ マニフェスト パーサー、APK v1+v2 署名ツールを xapktoapk.com で保守しています。古いコマンドや OS の変更を見つけましたか?編集メモを送信します。