外部儲存由vold init
服務和mountservice
系統服務的組合管理。物理外部儲存卷的安裝由vold
處理,vold
執行臨時操作以在將**暴露給應用程式之前準備**。
對於android 4.2.2及更早版本,裝置特定的vold.fstab
配置檔案定義了從sysfs
裝置到檔案系統掛接點的對映,每行都遵循以下格式:
dev_mount [flags]複製**
對於android 4.3版本和更高版本,init
,vold
和recovery
使用的各種fstab
檔案在/fstab.
檔案中統一。對於由vold
管理的外部儲存卷,條目應具有以下格式:
複製**
框架級別及以上的外部儲存互動通過mountservice
進行處理。由於android6.0中的配置更改(如刪除storage_list.xml
資源覆蓋),配置詳細資訊分為兩類。
android 5.x and earlier
特定於裝置的storage_list.xml
配置檔案通常通過frameworks/base
覆蓋來提供,定義了儲存裝置的屬性和約束。元素包含乙個或多個
元素,其中乙個應標記為主。
屬性包括:
mountpoint
:此安裝的檔案系統路徑。
storagedescription
:描述此安裝的字串資源。
primary
:如果此安裝是主外部儲存,則為true。
removable
:如果此安裝程式具有可移動介質(如物理sd卡),則為true。
emulated
:true如果此安裝被模擬並由內部儲存器支援,可能使用fuse
守護程式。
mtp-reserve
:mtp應為免費儲存預留的儲存的mb數。僅當安裝標記為模擬時使用。
allowmassstorage
:如果此安裝可通過usb大容量儲存共享,則為true。
maxfilesize
:最大檔案大小(mb)。
裝置可以通過模擬由內部儲存支援的不區分大小寫,無許可權的檔案系統來提供外部儲存。乙個可能的實現由system/core/sdcard
中的fuse
守護程式提供,可以作為裝置特定的init.rc
服務新增:
# virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard 1023 1023
class late_start複製**
其中source_path
是後端內部儲存,dest_path
是目標安裝點。
在配置特定於裝置的init.rc
指令碼時,必須將external_storage
環境變數定義為主外部儲存器的路徑。/sdcard
路徑還必須解析到相同的位置,可能通過符號鏈結。 如果裝置在平台更新之間調整外部儲存的位置,應該建立符號鏈結,以便舊路徑繼續工作。
storage_list.xml
資源覆蓋已被刪除,並且不再由框架使用。儲存裝置現在由vold
檢測時動態配置。
已刪除emulated_storage_source/target
環境變數,zygote
不再使用它來配置使用者特定的裝入點。相反,使用者分離現在使用使用者特定的gid
實施,並且主共享儲存在執行時通過vold
安裝到位。
開發人員可以根據其用例繼續動態或靜態地構建路徑。在路徑中包括uuid
標識每卡使開發人員的位置更清楚。(例如,/storage/abcd-1234/report.txt
顯然是與/storage/dcba-4321/report.txt
不同的檔案。)
硬編碼的fuse
服務已從裝置特定的init.rc
檔案中刪除,並在需要時從vold
動態分支。
除了這些配置更改,android6.0包括可採用的儲存的概念。對於android6.0裝置,任何未採用的物理介質都被視為可移植。
adoptable storage
要在fstab
中指示可採用的儲存裝置,請在fs_mgr_flags
欄位中使用encryptable = userdata
屬性。這裡有乙個典型的定義:
/devices/platform/mtk-msdc.1/mmc_host* auto auto defaults
voldmanaged=sdcard1:auto,encryptable=userdata複製**
當採用儲存裝置時,平台擦除內容並寫入定義兩個分割槽的guid
分割槽表:
乙個小的空android_meta
分割槽,留作將來使用。分割槽型別guid
是19a710a2-b3ca-11e4-b026-10604b889dcf
。乙個大的android_ext
分割槽,使用dm-crypt
加密,並根據核心功能使用ext4
或f2fs
格式化。分割槽型別guid
為193d1ea4-b3ca-11e4-b075-10604b889dcf
。
portable storage
在fstab
中,預設情況下具有voldmanaged
屬性的儲存裝置是可移植的,除非定義了另乙個屬性,如encryptedable = userdata
。例如,以下是usb otg裝置的典型定義:
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults
voldmanaged=usb:auto
複製**
該平台使用blkid
在裝入之前檢測檔案系統型別,並且當檔案系統不受支援時,使用者可以選擇格式化**。 Android裝置儲存那些事
外部儲存 公共 共享 目錄 在之前的開發過程中,對於應用儲存目錄存在一些模糊的觀念,在androidq版本中,google對應用儲存空間又做了調整,藉此機會梳理一下。移動裝置儲存空間大致可劃分為內部儲存與外部儲存,而外部儲存又可細分為外部私有儲存與外部共享儲存,具體區別如下 儲存結構 訪問方式 獲取...
android 獲取外部儲存裝置路徑
通常的獲取sdcard的路徑,我們會用environment.getexternalstoragedirectory 但是當我們的裝置有多個外部儲存裝置,environment就顯得捉襟見肘了。那麼有什麼方法可以解決這種問題?看下面的方法,通過反射的方式獲取外部儲存裝置的路徑,完美解決 nice。p...
android 獲取 內外儲存裝置路徑疑問
android 系統是開源的,於是各種產商各種瞎改android系統,工作了幾個月,我發現單單就android的內外儲存裝置的路徑我就不知道怎麼獲取了。上網查了幾種方案,自己試驗了下,感覺好迷茫啊。在這裡記錄下我試驗的幾種方案。方案一 通過enviroment類獲取儲存裝置路徑 android的官方...