Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

傳統存儲

Android外部存儲HAL圖標

Android支持具有傳統存儲的設備,傳統存儲被定義為不區分大小寫的文件系統,具有不可變的POSIX權限類和模式。傳統存儲的概念包括仿真存儲和便攜式存儲。便攜式存儲定義為系統不採用的任何外部存儲,因此不進行格式化,加密或綁定到特定設備。由於傳統的外部存儲對存儲的數據提供的保護最少,因此系統代碼不應在外部存儲上存儲敏感數據。具體來說,配置和日誌文件應僅存儲在內部存儲中,以對其進行有效保護。

多用戶外部存儲

從Android 4.2開始,設備可以支持多個用戶,並且外部存儲必須滿足以下約束:

  • 每個用戶必須擁有自己的隔離主外部存儲,並且不能訪問其他用戶的主外部存儲。
  • /sdcard路徑必鬚根據運行進程的用戶來解析為正確的用戶特定的主外部存儲。
  • 作為優化,可以在多個用戶之間共享Android/obb目錄中大型OBB文件的存儲。
  • 輔助外部存儲不得由應用程序寫入,但合成權限允許的軟件包特定目錄除外。

此功能的默認平台實現利用Linux內核名稱空間為每個Zygote分叉的進程創建隔離的安裝表,然後使用綁定安裝向該專用名稱空間提供正確的用戶特定的主外部存儲。

引導時,系統會在EMULATED_STORAGE_SOURCE掛載單個模擬的外部存儲FUSE守護程序,該守護程序對應用程序是隱藏的。在Zygote派生之後,它將從FUSE守護程序下的適當的特定於用戶的子目錄綁定到EMULATED_STORAGE_TARGET以便外部存儲路徑可以為應用正確解析。由於應用程序缺少其他用戶存儲的可訪問掛載點,因此他們只能訪問其最初使用的用戶的存儲。

此實現還使用共享子樹內核功能將安裝事件從默認的根名稱空間傳播到應用程序名稱空間,從而確保ASEC容器和OBB安裝之類的功能繼續正常運行。它通過將rootfs掛載為共享,然後在創建每個Zygote名稱空間後將其重新掛載為從屬來實現。

多個外部存儲設備

從Android 4.4開始,開發人員通過Context.getExternalFilesDirs()Context.getExternalCacheDirs()Context.getObbDirs()向開發人員展示了多個外部存儲設備。

通過這些API浮出水面的外部存儲設備必須是該設備的半永久性部件(例如電池倉中的SD卡插槽)。開發人員希望存儲在這些位置的數據可以長期使用。因此,暫態存儲設備(例如USB大容量存儲驅動器)不應通過這些API浮出水面。

WRITE_EXTERNAL_STORAGE權限必須僅授予對設備上主要外部存儲的寫訪問權限。除合成權限允許的應用程序特定於程序包的目錄外,不得允許應用程序寫入輔助外部存儲設備。以這種方式限制寫操作可確保系統在卸載應用程序時可以清理文件。

USB媒體支持

Android 6.0支持僅在短時間內連接到設備的便攜式存儲設備,例如USB閃存驅動器。當用戶插入新的便攜式設備時,平台會顯示一條通知,讓他們複製或管理該設備的內容。

在Android 6.0中,任何未採用的設備都被視為可移植設備。由於便攜式存儲設備連接的時間很短,因此該平台避免了繁重的操作,例如媒體掃描。第三方應用必須通過Storage Access Framework才能與便攜式存儲中的文件進行交互;出於隱私和安全原因,直接訪問被明確阻止。