資料與檔案儲存空間總覽

Android 採用的檔案系統類似於其他平台的磁碟式檔案系統。系統為您提供多個儲存應用程式資料的選項:

  • 應用程式特定儲存空間:儲存僅供應用程式使用的檔案,無論是在內部儲存空間的專屬目錄,或是在外部儲存空間的其他專屬目錄皆可。使用內部儲存空間的目錄,可儲存其他應用程式不得存取的機密資訊。
  • 共用儲存空間:儲存應用程式可共用給其他應用程式的檔案,包括媒體、文件和其他檔案
  • 偏好設定:以鍵/值組合儲存私人、原始資料
  • 資料庫:使用 Room 持續性程式庫將結構化資料儲存在私人資料庫中

下表匯總了這些選項的特性:

內容類型 存取方法 必須授予權限 其他應用程式是否可存取? 解除安裝應用程式時是否會移除檔案?
應用程式特定檔案 僅限應用程式使用的檔案 來自內部儲存空間,getFilesDir()getCacheDir()

來自外部儲存空間:getExternalFilesDir()getExternalCacheDir()
內部儲存空間從不需要

如果應用程式是在執行 Android 4.4 (API 級別 19) 或以上版本的裝置上使用,則不需要外部儲存空間
媒體 可共用的媒體檔案 (圖片、音訊檔案、影片) MediaStore API READ_EXTERNAL_STORAGE在 Android 11 (API 級別 30) 或以上版本存取其他應用程式的檔案時

READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE在 Android 10 (API 級別 29) 上存取其他應用程式的檔案時

若是 Android 9 (API 級別 28) 或以下版本,則存取所有檔案都需要權限
是,但其他應用程式需要READ_EXTERNAL_STORAGE權限
文件和其他檔案 其他類型的可共用內容,包括已下載的檔案 儲存空間存取架構 是,透過系統檔案選擇器
應用程式偏好設定 鍵/值組合 Jetpack Preferences 程式庫
資料庫 結構化資料 Room 持續性程式庫

您可以根據自己的特定需求選擇解決方案:

您的資料需要多少空間?
內部儲存空間儲存應用程式特定資料的空間有限。如果您需要儲存大量資料,請使用其他類型的儲存空間。
資料存取要求的穩定性如何?
如果應用程式的基本功能需要某些資料 (如應用程式啟動時),請將資料置於內部儲存空間目錄或資料庫中。由於某些裝置允許使用者移除與外部儲存空間對應的實體裝置,因此可能無法隨時存取儲存在外部儲存空間中的應用程式特定檔案。
您需要儲存哪種資料?
如果您的資料僅對應用程式有意義,請使用應用程式特定儲存空間。若是可共用的媒體內容,請使用共用儲存空間,以便其他應用程式可存取該內容。若是結構化資料,請使用偏好設定 (鍵/值資料) 或資料庫 (包含超過 2 欄的資料)。
資料對於您的應用程式應當為私有嗎?
儲存機密資料 (不得透過其他應用程式存取的資料) 時,請使用內部儲存空間、偏好設定或資料庫。內部儲存空間對於使用者隱藏資料的額外好處。

儲存空間位置類別

Android 提供兩種實體儲存空間位置:內部儲存空間外部儲存空間。對於大多數裝置,內部儲存空間小於外部儲存空間。不過,由於所有裝置均提供內部儲存空間,使其能夠以更可靠的方式將資料置於應用程式所依附位置。

移除式磁碟區 (如 SD 卡) 做為外部儲存空間的一部分出現在檔案系統中。Android 使用 /sdcard 等路徑來表示這些裝置。

根據預設,應用程式本身會儲存在內部儲存空間中。不過,如果您的 APK 尺寸非常龐大,可以在應用程式的資訊清單檔案中指定偏好設定,將應用程式改為安裝在外部儲存空間:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

外部儲存空間的權限和存取權

Android 定義了下列儲存空間相關權限:READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGEMANAGE_EXTERNAL_STORAGE

在舊版 Android 中,應用程式必須宣告 READ_EXTERNAL_STORAGE 權限,才能存取外部儲存空間應用程式特定目錄之外的任何檔案。此外,應用程式必須宣告 WRITE_EXTERNAL_STORAGE 權限,才能寫入應用程式特定目錄之外的任何檔案。

較新版 Android 更依賴於檔案的用途,來判斷應用程式能否存取並寫入指定檔案。請特別注意,如果應用程式針對 Android 11 (API 級別 30) 或以上版本,WRITE_EXTERNAL_STORAGE 權限並不會影響您的應用程式存取儲存空間。以此用途為基礎的儲存模型改善了使用者隱私,因為應用程式只能存取其實際使用的裝置檔案系統所在區域。

Android 11 引入了 MANAGE_EXTERNAL_STORAGE 權限,該權限可針對應用程式特定目錄和 MediaStore 之外的檔案提供寫入存取權。如要進一步瞭解此權限,以及為什麼大多數應用程式不必宣告即可滿足其用途,請參閱「如何在儲存裝置上管理所有檔案」相關指南。

限定範圍儲存空間

為了讓使用者進一步控管檔案,並避免檔案過於雜亂,根據預設,指定 Android 10 (API 級別 29) 及以上目標版本的應用程式會取得外部儲存空間或限定範圍儲存空間的範圍存取權。此類應用程式只能存取外部儲存空間的應用程式特定目錄,以及應用程式已建立的特定媒體類型。

除非應用程式必須存取儲存在應用程式特定目錄MediaStoreAPI 可存取目錄之外的檔案,否則請使用限定範圍儲存空間。如果將應用程式特定檔案儲存在外部儲存空間,可以將這些檔案放置在外部儲存空間的應用程式特定目錄,讓您輕鬆採用限定範圍儲存空間。如此一來,即使啟用限定範圍儲存空間,您的應用程式仍然可以存取這些檔案。

如要準備對應用程式設置限定範圍儲存空間,請參閱儲存空間用途和最佳做法指南。如果您的應用程式有其他不在其涵蓋範圍內的用途,請提出功能要求。您可以暫時選擇不採用限定範圍儲存空間

檢視裝置上的檔案

如要檢視裝置上儲存的檔案,請使用 Android Studio 的 Device File Explorer

其他資源

如要進一步瞭解資料儲存,請參閱下列資源。

影片