了解 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 權限的應用程式都可以存取裝置共用儲存上的幾乎任何檔案。這包括照片、文件、下載,甚至是其他應用程式創建的文件。雖然這使得文件管理變得方便,但也帶來了嚴重的隱私和安全問題。

考慮一個簡單的手電筒應用程式。在舊模型下,如果您授予它存儲權限,它可以默默地讀取您的照片,掃描您下載的文檔,甚至修改屬於其他應用程式的文件。沒有細粒度的控制。您要么授予應用程式對整個儲存的完全存取權限,要么完全拒絕它。

這種廣泛的訪問導致了現實世界的問題。一些應用程式透過掃描儲存中的敏感檔案來收集用戶資料。其他人則留下了孤立的文件,這些文件在應用程式被卸載後很長一段時間內使設備變得混亂。谷歌需要一個平衡可用性和隱私的解決方案,而範圍儲存就是他們的答案。

作用域儲存實際上是做什麼的

分區儲存從根本上改變了應用程式和檔案系統之間的關係。在此模型下,每個應用程式在外部儲存上都有自己的私人沙箱,通常位於 /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 的特別批准,並且用戶必須透過系統設定而不是簡單的對話框手動授予該權限。

推出時間表

谷歌並沒有在一夜之間強制實施範圍儲存。轉變是逐漸發生的:

  • 引入了 Android 10(API 29): 範圍存儲,但應用程式可以選擇在其清單中不使用 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(不透明二進位 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 格式非常有用的原因之一。獨立 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 預計將進一步改善儲存存取框架的效能和可用性。

趨勢很明顯:Android 正在轉向一種用戶可以對每個應用程式可以查看和修改的內容進行細粒度控制的模型。雖然這給高級用戶和側加載器帶來了一些摩擦,但它顯著提高了更廣泛用戶群的隱私和安全性。

使用分區儲存而不破壞應用程式數據

作用域儲存是近年來 Android 架構最重大的變化之一。透過將應用程式限制在自己的沙箱中並要求用戶明確同意才能進行更廣泛的訪問,谷歌極大地改善了該平台的隱私狀況。對於旁加載應用程式並手動管理文件的用戶來說,了解這些限制可以幫助您解決偶爾出現的摩擦點。對於開發人員來說,適應作用域儲存不是可選的,而是現代 Android 開發的基本要求。

安裝 APK、放置 OBB 檔案以及日常管理儲存都運行在同一個系統中:作用域儲存。一旦您了解了它的工作原理,您就可以控制您的設備,而不是受到可能濫用廣泛文件訪問的應用程式的擺佈。

由 Shaefale 女士設計並記錄 首席開發人員和 Android 套件架構師 • 在 Android 12–15 上經過驗證

Mst Shaefale 在 xapktoapk.com 維護用戶端 XAPK/APKS 合併、二進位清單解析器和 APK v1+v2 簽章工具。發現過時的命令或作業系統變更?發送編輯說明。