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

存儲

Android的外部存儲HAL圖標

Android已經隨著時間的演變,以支持各種存儲設備類型和特徵。所有版本的Android支持設備的傳統存儲 ,其中包括便攜式和仿真的存儲。 便攜式存儲可以通過物理介質來提供,像SD卡或USB,即臨時數據傳送/文件存儲。物理介質可以保持與該設備用於在延長的時間週期,但是不依賴於設備,並且可以被移除。 SD卡已經可以作為由於Android 1.0移動存儲;在Android 6.0中加入對USB的支持。 仿真的存儲是通過仿真層暴露內部存儲的一部分提供,並且由於Android 3.0已面世。

在的Android 6.0開始,Android支持可採用存儲 ,這是由物理媒體提供,像SD卡或USB,被加密和格式化的行為類似於內部存儲設備。可採用存儲可以存儲所有類型的應用程序數據。

權限

外部存儲訪問是由各種Android權限保護。在安卓1.0開始,寫訪問保護與WRITE_EXTERNAL_STORAGE許可。在搭載Android 4.1開始,讀訪問保護與READ_EXTERNAL_STORAGE許可。

在Android 4.4的開始,擁有者,組和文件的方式對外部存儲設備的基於目錄結構現在合成。這使得應用程序來管理他們的外部存儲特定的軟件包目錄,而不需要他們擁有廣闊的WRITE_EXTERNAL_STORAGE許可。例如,具有包名稱的應用程序com.example.foo現在可以自由地訪問Android/data/com.example.foo/上沒有權限外部存儲設備。這些合成的權限由在熔絲守護程序包裹原始存儲設備來實現。

Android中10開始,應用包含的目標的Android 9和下部默認到原有的存儲,並且可以到獨立存儲選擇 。應用程序針對Android 10和默認到獨立存儲可以暫時選擇出來 。使用清單屬性requestLegacyExternalStorage ,它控制的存儲模式,更改默認狀態。

由於兩個READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE權限是軟限制,如果安裝程序沒有白名單應用程序,允許控制訪問只聽覺和視覺的集合,沒有訪問SD卡。這適用,即使應用程序請求傳統存儲。有關硬約束和軟約束的更多信息,請參閱硬盤和Android的10柔軟的限制

如果安裝程序白名單的權限,在傳統模式下運行的應用程序獲取非隔離許可行為。該權限控制SD卡接入,聽覺和視覺的集合。這種情況發生時,無論是應用程序中的Android 9或更低,不選擇在分離的存儲,或它的目標的Android 10和選擇退出。

白名單國家只能指定在安裝時,不能被改變,直到應用程序已安裝完畢。

有關設置的更多信息READ_EXTERNAL_STORAGE權限,請與setWhitelistedRestrictedPermissions()PackageInstaller.SessionParams類。

運行權限

在Android 6.0引入了一個新的運行時權限模型,其中需要在運行時應用要求的能力。因為新的模型包括READ/WRITE_EXTERNAL_STORAGE權限,平台需要動態授予存儲訪問沒有殺死或重新啟動已經運行的應用程序。它通過維護所有的三個不同的觀點安裝存儲設備:

  • /mnt/runtime/default被示為應用程序沒有特殊的存儲的權限,並根名稱空間,其中adbd和其它系統部件住。
  • /mnt/runtime/read被示為應用程序與READ_EXTERNAL_STORAGE (設置LEGACY_STORAGE為Android 10)
  • /mnt/runtime/write被示為與應用程序WRITE_EXTERNAL_STORAGE

在受精卵叉的時候,我們為每一個運行的應用程序的安裝空間和綁定安裝適當的初始視圖到位。後來,當運行權限授予, vold跳進已經運行的應用程序和綁定安裝升級後的視圖到位的安裝命名空間。請注意,允許降級總是會導致應用程序被殺害。

setns()來實現此功能的功能至少需要Linux的3.8,但補丁已成功回遷到Linux 3.4。該PermissionsHostTest CTS測試可以用來驗證正確的內核行為。