Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)
向原創(chuàng)者致敬!自己感覺(jué)好轉(zhuǎn)載了!
說(shuō)起Android“內(nèi)部存儲(chǔ)”,對(duì)于開(kāi)發(fā)者而言可以毫不猶豫地脫口而出,不就是/data/data目錄嘛,也不盡然,/data/user/0/又如何解釋?那說(shuō)起“外部存儲(chǔ)”,例如sd卡目錄獲取值,更是眾說(shuō)紛紜,是/mnt/sdcard?還是/storage/sdcard0?莫非是/storage/emulated/0?
此疑問(wèn)起源要追溯到筆者在寫(xiě)上一篇博文,即以DexClassLoader類加載原理編寫(xiě)demo實(shí)現(xiàn)類替換修復(fù),其中編碼過(guò)程中涉及到讀寫(xiě)Android內(nèi)外存儲(chǔ)的文件數(shù)據(jù),邏輯就是讀取外部存儲(chǔ)sd卡上的dex文件,寫(xiě)入到內(nèi)部存儲(chǔ)對(duì)應(yīng)的app包下的一個(gè)自定義目錄中。
以上邏輯并不復(fù)雜,但是筆者用模擬器和不同版本的Android真機(jī)測(cè)試時(shí),發(fā)現(xiàn)這獲取sd卡的路徑卻各不相同,思索不解一個(gè)百度,發(fā)現(xiàn)其中大有文章,有的目錄只是鏈接,是個(gè)軟連接,而大部分原因需歸咎于Android版本更新中“多用戶”的新特性出現(xiàn),Google對(duì)用戶的數(shù)據(jù)結(jié)構(gòu)進(jìn)行了調(diào)整。可具體實(shí)情如何,請(qǐng)看以下解說(shuō):
本篇博文涉及到的知識(shí)點(diǎn)如下:
Android內(nèi)、外部存儲(chǔ)基礎(chǔ)知識(shí)點(diǎn)及文件夾所在位置
存儲(chǔ)路徑中“0”的含義與變化
多種sd卡路徑表示含義與區(qū)別
一. Android內(nèi)外存儲(chǔ)基礎(chǔ)知識(shí)
Android手機(jī)上的存儲(chǔ)空間可做如下劃分:
內(nèi)存:RAM
內(nèi)部存儲(chǔ):內(nèi)部ROM
外部存儲(chǔ):外部ROM和SDCard
手機(jī)上的存儲(chǔ)在概念上分成了”內(nèi)部internal“和”外部external“兩部分,但其實(shí)都在手機(jī)內(nèi)部。因此無(wú)論Android手機(jī)是否有可移動(dòng)的sdcard,它都有外部存儲(chǔ)和內(nèi)部存儲(chǔ),且通過(guò)相同的Api方法來(lái)訪問(wèn)可移動(dòng)的sdcard或者手機(jī)自帶的存儲(chǔ)。
以下是一部SamSung手機(jī)的存儲(chǔ)展示圖,用AS自帶的Device File Explore打開(kāi)后展現(xiàn)的文件目錄。
(1)內(nèi)部存儲(chǔ):
Android可以說(shuō)是一個(gè)Linux操作系統(tǒng),它的內(nèi)部存儲(chǔ)空間對(duì)于應(yīng)用程序和用戶來(lái)講就是“/data/data“目錄。內(nèi)部存儲(chǔ)與外部存儲(chǔ)相比有著比較穩(wěn)定,存儲(chǔ)方便,操作簡(jiǎn)單,更加安全(可以控制訪問(wèn)權(quán)限)等優(yōu)點(diǎn),而它唯一的缺點(diǎn)就是空間有限。
內(nèi)部存儲(chǔ)空間的有限意味著應(yīng)物盡其用,用來(lái)保存比較重要的數(shù)據(jù),例如用戶信息資料,口令秘碼等不需要與其他應(yīng)用程序共享的數(shù)據(jù)。注意應(yīng)用程序被卸載時(shí),應(yīng)用程序在內(nèi)部存儲(chǔ)空間的文件數(shù)據(jù)將全部被刪除,避免占用寶貴的空間。
內(nèi)部存儲(chǔ)即data文件夾,其中里面有兩個(gè)文件夾值得關(guān)注:
app文件夾(未root無(wú)法打開(kāi)):存放著所有app的apk文件夾,當(dāng)開(kāi)發(fā)者調(diào)試某個(gè)app時(shí),AS控制臺(tái)輸出的內(nèi)容中有一項(xiàng)是uploading…,代表正在上傳apk到這個(gè)文件夾。
data文件夾:內(nèi)部都是app的包名,存儲(chǔ)著應(yīng)用程序相關(guān)的數(shù)據(jù),例如 data/data/包名/(shared_prefs、database、files、cache)
(2)外部存儲(chǔ)
外部存儲(chǔ)是指用戶在使用時(shí)自行在手機(jī)上添加的外部存儲(chǔ)介質(zhì),例如TS卡,SD卡等閃存儲(chǔ)介質(zhì)。其顯著的優(yōu)點(diǎn)就是存儲(chǔ)空間大,無(wú)需擔(dān)心數(shù)據(jù)清除問(wèn)題,與內(nèi)部存儲(chǔ)不同的是當(dāng)應(yīng)用程序卸載時(shí),它在外部存儲(chǔ)所創(chuàng)建的文件數(shù)據(jù)不會(huì)被清除,因此清理外部存儲(chǔ)空間的責(zé)任丟給了用戶自己。缺點(diǎn)則是不太穩(wěn)定,閃存介質(zhì)對(duì)于Android手機(jī)而言會(huì)出現(xiàn)SD卡不能正常使用的情況。
外部存儲(chǔ)即storage文件夾或mnt文件夾。需要注意的是storage中有一個(gè)sdcard0文件夾,其中又分為公有目錄和私有目錄:
公有目錄:有9大類,比如DCIM、Download等系統(tǒng)為用戶創(chuàng)建的文件夾;
私有目錄: 即Android文件夾/storage/sdcard/Android/,其中的data文件夾包含了許多包名組成的文件夾。
若應(yīng)用程序在運(yùn)行過(guò)程中需要向手機(jī)上保存數(shù)據(jù),通常是保存在sdcard中/storage/sdcard,即應(yīng)用直接在sdcard的根目錄創(chuàng)建一個(gè)文件夾用于數(shù)據(jù)保存,不過(guò)當(dāng)該app被卸載后,數(shù)據(jù)還保留在sdcard中,意味著留下了垃圾數(shù)據(jù)。
在開(kāi)發(fā)中,Google官方建議App數(shù)據(jù)存儲(chǔ)在外部存儲(chǔ)的私有目錄中對(duì)應(yīng)App的包名下storage/sdcard/Android/data/包名/,這樣當(dāng)用戶卸載掉App之后,相關(guān)的數(shù)據(jù)會(huì)一并刪除!
(3)內(nèi)外部存儲(chǔ)常用目錄操作
context.getFilesDir() 內(nèi)部存儲(chǔ)data/data/包名/files目錄
context.getCacheDir() 內(nèi)部存儲(chǔ)data/data/包名/cache目錄
Environment.getExternalStorageDirectory() 外部存儲(chǔ)根目錄
Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM) 外部存儲(chǔ)公有目錄
context.getExternalFilesDir() 外部存儲(chǔ)私有目錄storage/sdcard/Android/data/包名/files。一般存儲(chǔ)長(zhǎng)時(shí)間保存的數(shù)據(jù)。
context.getExternalCacheDir() 外部存儲(chǔ)私有目錄storage/sdcard/Android/data/包名/cache。一般存儲(chǔ)臨時(shí)緩存數(shù)據(jù)。
注意上述最后兩個(gè)API:當(dāng)app被卸載后,sdCard/Android/data/PackageName/下的所有文件都會(huì)被刪除,不會(huì)留下垃圾信息。兩個(gè)API對(duì)應(yīng)的目錄分別對(duì)應(yīng)著 設(shè)置->應(yīng)用->應(yīng)用詳情里面的“清除數(shù)據(jù)”與“清除緩存”選項(xiàng)。
二. 各個(gè)易混淆路徑識(shí)別
1. 文件夾中0的出現(xiàn)
在Android版本4.2JellyBean之前,獲取sdcard的路徑是/sdcard/,但在JellyBean版本之后的路徑成為了/sdcard/0,或者是/sdcard/legacy(legacy可以是0、1、2……),這個(gè)“0”到底代表著什么含義?
這是從JellyBean版本起的一個(gè)新特征——多用戶。因此為了處理單獨(dú)的賬戶,部分目錄結(jié)構(gòu)必須被改變,/sdcard/legacy始終指向當(dāng)前登錄的用戶的SD卡目錄。
正因“多用戶”功能的增加,內(nèi)外部存儲(chǔ)發(fā)生了以下變化:
內(nèi)部存儲(chǔ): 原先的/data/data/其實(shí)相當(dāng)于直接鏈接到當(dāng)前用戶文件夾的,變成了/data/user/0/。
外部存儲(chǔ):例如sd卡路徑不再是/sdcard/,而是/sdcard/legacy/(legacy可以是0、1、2……),其中的“0”可以當(dāng)成“設(shè)備擁有者”,或者稱為“第一用戶”(“第一用戶”毫無(wú)疑問(wèn)的是“設(shè)備所有者”,只有此用戶才能創(chuàng)建額外賬戶)。
大致理解了其由來(lái)后,可能少數(shù)人還遇到過(guò)/sdcard/0/0 這種表示,以下是谷歌對(duì)此的官方解釋:
Google在Android 4.2中引入了“多個(gè)用戶”作為新功能, 為了適應(yīng)“多個(gè)用戶”,Google現(xiàn)在為每個(gè)用戶提供了自己的文件夾以供存儲(chǔ)。 如果您從4.1升級(jí)到4.2,則4.2 ROM將在/data中查找某個(gè)文件,以確定是否需要將所有文件遷移到新的多用戶數(shù)據(jù)結(jié)構(gòu)。 默認(rèn)情況下,4.2將所有/data/media遷移到/data/media/0。不過(guò)使用自定義恢復(fù)會(huì)出現(xiàn)問(wèn)題,自定義恢復(fù)在出廠重置期間會(huì)保留/data/media文件夾。當(dāng)您重新設(shè)置工廠并再次啟動(dòng)4.2 ROM時(shí),4.2 ROM將再次遷移/data/media中的所有內(nèi)容。 每次出廠重置時(shí)它都會(huì)遷移您的文件,這種多次遷移會(huì)導(dǎo)致一些人將他們的文件移動(dòng)到/sdcard/0甚至/sdcard/0/0等等。
2. sd卡路徑隨著Android版本變化
public static final String SDPATH = Environment .getExternalStorageDirectory().getAbsolutePath();//獲取外部存儲(chǔ)的路徑返回絕對(duì)路徑的,就是你的設(shè)備SD卡的文件路徑
1
如上是獲取SD卡目錄的Api,你會(huì)發(fā)現(xiàn)使用不同Android移動(dòng)設(shè)備得到的sd卡目錄不同,不僅如此,其中路徑指向的都是相同的文件,緣由為何?
/sdcard/
/mnt/sdcard/
/storage/sdcard0/
/storage/emulated/legacy/
上面四個(gè)皆指代sd卡路徑,其中演變的由來(lái)見(jiàn)以下Android版本分享:
(1)android 4.0
Galaxy Nexus(GN)手機(jī)上的userData分區(qū)很大,被掛在/data 目錄下。用戶的數(shù)據(jù)通常是存儲(chǔ)在SD卡上,可是GN無(wú)SD卡,即只有intenal內(nèi)部存儲(chǔ)。(第四點(diǎn)中會(huì)講解Galaxy Nexus為何只有內(nèi)部存儲(chǔ)緣由)
Google爸爸并未被眼前困難打倒,直接在userData分區(qū)下虛擬了一個(gè)media目錄,它是是內(nèi)置sd卡的數(shù)據(jù)存儲(chǔ)位置,具體使用了fuse技術(shù)將/data/media虛擬成為一個(gè)叫做/dev/fuse的設(shè)備,為了讓程序能認(rèn)出來(lái),被同時(shí)掛載在 /mnt/sdcard 目錄,又為了兼容以前的程序,做了一個(gè)快捷方式(linux系統(tǒng)里叫軟連接),因此 /sdcard 指向的就是 /mnt/sdcard。
(2)android 4.1
以上是Android 4.0的應(yīng)對(duì)措施,在4.1中同樣使用fuse技術(shù),/dev/fuse 會(huì)被同時(shí)掛載到/storage/sdcard0 目錄?!皊dcard0”表示第一個(gè)sd卡(若有外置sd卡,那會(huì)多一個(gè) /storage/sdcard1) /sdcard 軟連接會(huì)指向 /storage/sdcard0 ,此時(shí)/mnt/sdcard 也是個(gè)軟連接,會(huì)指向/storage/sdcard0。
因此/storage/sdcard0才是最終源頭,/sdcard、/mnt/sdcard是指向它的一個(gè)軟連接而已。
如果你通過(guò)otg線接U盤(pán),會(huì)被掛載到 /storage/usb0目錄,stickmount這個(gè)軟件為了讓圖庫(kù)、快圖、mx player等軟件,能看到u盤(pán)里的數(shù)據(jù),又同時(shí)掛載到 /storage/sdcard0/usStorage/sda1。為何命名為“usb0”,而不是“sda1”?
這是Linux的對(duì)硬盤(pán)的命名方式,如果你的u盤(pán)有多個(gè)分區(qū),就分別是按sda1、sda2此規(guī)律命名下去。
(3)android 4.2及之后
在4.2之后,Android出現(xiàn)了一個(gè)“多用戶”的功能特征,意味著一臺(tái)設(shè)備可能被多個(gè)人同時(shí)應(yīng)用,因此需要將每個(gè)人的數(shù)據(jù)、應(yīng)用、個(gè)性配置分開(kāi)。后兩者容易實(shí)現(xiàn),通過(guò)權(quán)限控制即可,可是數(shù)據(jù)這一塊如何是好?
面對(duì)需求的變更,只好再調(diào)整用戶數(shù)據(jù)的掛載結(jié)構(gòu),4.2版本中同樣使用fuse技術(shù),而/dev/fuse 會(huì)被掛載到/storage/emulated/0 目錄。(若有多個(gè)用戶,0文件夾名稱依次增加,例如/storage/emulated/1)
不僅如此,為了兼容Android版本升級(jí),還同時(shí)掛載到/storage/emulated/legacy,建立了三個(gè)軟連接指向自己:
/storage/sdcard0
/sdcard
/mnt/sdcard
(4)不要太在意“0”
也許在手機(jī)設(shè)備開(kāi)發(fā)中似乎沒(méi)太注意到“多用戶”新特性的作用,無(wú)需太過(guò)在意,它主要在平板上使用,手機(jī)端是禁用的,但底層實(shí)現(xiàn)原理相同。
/mnt/shell/emulated 目錄和 /storage/emulated 下的文件夾是一樣的。
(此點(diǎn)“版本總結(jié)”來(lái)源于機(jī)鋒論壇之關(guān)于android的4.2的0文件夾的詳解,筆者稍有修改)
3. 多種sd卡路徑表示的區(qū)別總結(jié)
在上一點(diǎn)中了解了表示sd卡幾種路徑的演變過(guò)程,此部分對(duì)以下幾個(gè)路徑進(jìn)行簡(jiǎn)單總結(jié)區(qū)別:
(注意:下面路徑中的文件夾相同)
/sdcard/
/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/
/sdcard/:只是一個(gè)符號(hào)鏈接,鏈接到/storage/sdcard0/
/mnt/sdcard:Android4.0版本之前的顯示
/storage/sdcard0 :Android4.0版本之后的顯示
/storage/emulated/0/:這是參照“emulated MMC”,通常指其內(nèi)部,“0”代表第一個(gè)用戶,即設(shè)備擁有者。 如果您創(chuàng)建其他用戶,則此數(shù)字將為每個(gè)用戶增加。
/storage/emulated/legacy/:與上同理,但指向當(dāng)前工作用戶的部分。(對(duì)于“0”用戶而言,這是/storage/emulated/0/的符號(hào)鏈接)
/storage/sdcard0/:注意這里的“0”并非是一個(gè)單獨(dú)文件夾名,而是作為后綴一樣,意味著“0”并不代表用戶,而是設(shè)備(卡)本身,因此它不需要legacy鏈接。人們可以通過(guò)OTG將讀卡器與另一個(gè)SD卡連接起來(lái),然后路徑將成為/storage/sdcard1/。
為了兼容Android版本升級(jí),還同時(shí)掛載到/storage/emulated/legacy,建立了三個(gè)軟連接指向自己:/storage/sdcard0 、/sdcard、/mnt/sdcard。
sdcard0名稱變化
“sdcard”這個(gè)文件夾是手機(jī)外置SD卡的文件夾名稱,“sdcard0”這個(gè)文件夾是手機(jī)內(nèi)存文件夾名稱。手機(jī)內(nèi)存本身是無(wú)法擴(kuò)展的,但是外置SD卡的空間用戶可以根據(jù)手機(jī)最大使用限制購(gòu)買(mǎi)更換。因此“sdcard0”是內(nèi)置儲(chǔ)存,“sdcard1”是擴(kuò)展儲(chǔ)存,就是一般的sd卡。
如果更多的設(shè)備連接,但命名可能會(huì)有所不同,取決于設(shè)備:
當(dāng)內(nèi)部虛擬SD卡:/mnt/sdcard0/
SD插槽中的物理SD:/mnt/sdcard1/
可調(diào)用其他設(shè)備,如連接適配器的USB閃存驅(qū)動(dòng)器:/mnt/media_rw/usbdisk(kitkat 4.4及以上?)或/mnt/usbdisk(jellybean 4.1 - 4.2)
命名可能取決于設(shè)備、制造商、 ROM等, 但通常情況下,/mnt/*在所有這些情況下只是一個(gè)符號(hào)鏈接,而源頭是位于/storage路徑下。
(此點(diǎn)回答來(lái)自于StackExchange,結(jié)合自身理解翻譯敘述)
4. “/sdcard/”是一個(gè)“假”路徑?
上一點(diǎn)解決了各個(gè)路徑的識(shí)別問(wèn)題,可仍剩下一個(gè)疑惑:Glaxy Nexus沒(méi)有用于SD卡的外部插槽,即只有內(nèi)部存儲(chǔ),但它仍有一個(gè)名為/sdcard/的根文件夾(第二點(diǎn)中的(1)部分已簡(jiǎn)單解釋了原因),詳情為何?以下是Google工程師回應(yīng)Galaxy Nexus背后缺乏USB大容量存儲(chǔ)的理由,即Android為什么從USB大容量存儲(chǔ)轉(zhuǎn)移到內(nèi)部存儲(chǔ)的MTP訪問(wèn)的解釋,可以揭秘為何GN中/sdcard/“假”路徑的問(wèn)題。
UMS:通信技術(shù);
MTP:multi-path transmission網(wǎng)絡(luò)傳輸機(jī)制,多路徑傳輸是指采用多條不相交的路徑來(lái)投遞應(yīng)用分組以增加連接的容量和可靠性的機(jī)制;
ICS:Internet連接共享
Galaxy Nexus不支持USB海量存儲(chǔ)(UMS),即不支持USB存儲(chǔ)模式,這給許多用戶帶來(lái)了震撼。 所有擁有XOOM,Nexus S,Galaxy Tab 10.1或任何缺少SD卡插槽的設(shè)備的人都熟悉這種設(shè)置,因?yàn)樯鲜鏊性O(shè)備的工作方式與Galaxy Nexus類似,都是使用MTP網(wǎng)絡(luò)傳輸機(jī)制而不是UMS通信技術(shù)。以下Google工程師回應(yīng)了Galaxy Nexus相關(guān)問(wèn)題:
Q: ICS不支持USB大容量存儲(chǔ)?
A: ICS支持USB海量存儲(chǔ)(UMS), Galaxy Nexus不會(huì),這與Honeycomb(蜂巢)相同,例如HC支持USB大容量存儲(chǔ),而Xoom不支持。
如果給定設(shè)備有可移動(dòng)的SD卡,它將支持USB大容量存儲(chǔ)。如果設(shè)備只有內(nèi)置存儲(chǔ)(如Xoom、Galaxy Nexus),它通常僅支持MTP和PTP。在沒(méi)有專用存儲(chǔ)分區(qū)的設(shè)備上(如可移動(dòng)SD卡或像Nexus S這樣的單獨(dú)分區(qū)),在物理上不可能支持UMS。這是因?yàn)閁MS是塊級(jí)協(xié)議,主機(jī)PC直接訪問(wèn)存儲(chǔ)上的物理塊,以便Android不能同時(shí)安裝它。
通過(guò)我們?cè)贖oneycomb中引入的統(tǒng)一存儲(chǔ)模型,可以在應(yīng)用程序數(shù)據(jù)和媒體數(shù)據(jù)之間分享完整的32GB(或16GB其他),即當(dāng)您的內(nèi)部應(yīng)用數(shù)據(jù)分區(qū)已滿時(shí),Nexus S上的5GB免費(fèi)空間不會(huì)再無(wú)所事事。然而這樣的代價(jià)是,Android不能再為主PC直接通過(guò)USB傳輸存儲(chǔ)。相反使用MTP。在Windows(大多數(shù)用戶使用)上,它在資源管理器中內(nèi)置了MTP支持,使其看起來(lái)完全像磁盤(pán)。(Linus和Mac上沒(méi)那么容易,sad)
總體而言,這是一個(gè)更好的手機(jī)體驗(yàn)。
Q: 由于Galaxy Nexus僅具有內(nèi)部存儲(chǔ),因此ASTRO文件管理器等應(yīng)用程序如何在不需要root權(quán)限的情況下工作?
A:首先我們?cè)趦?nèi)部存儲(chǔ)器上指定一個(gè)特定的目錄作為“SD卡”, 然后實(shí)現(xiàn)了一個(gè)FUSE文件系統(tǒng),除了丟棄所有權(quán)限檢查之外,什么也不做,除非重新將該目錄掛載為/sdcard。 除了權(quán)限之外,FUSE文件系統(tǒng)是直通的,因此實(shí)際的文件可以從目錄中讀取或?qū)懭肽夸洝?/p>
我們使用“假代理” FUSE文件系統(tǒng)來(lái)重新安裝特定的目錄以偽裝成SD卡, 這對(duì)于應(yīng)用程序來(lái)說(shuō)是完全透明的,他們不能說(shuō)沒(méi)有直接與磁盤(pán)通話。
(閱讀自此,GN中為何有/sdcard/ 這個(gè)“假”路徑的秘密已經(jīng)被揭開(kāi),下一個(gè)Q&A則是幫助開(kāi)發(fā)者更深入理解Glaxy Nexus為何舍棄USB大容量存儲(chǔ),他們考慮的思路又是如何?)
Q: Galaxy Nexus這么做也許有它的理由,可是Micro-SD卡插槽需要多少空間?為何不可兩者兼得?
A:舍棄SD卡插槽主要原因并不在硬件上,而是沒(méi)有一個(gè)適合的使用UI。Android核心原則之一是你永遠(yuǎn)不需要文件管理器,因此我們想要避開(kāi)其他操作系統(tǒng)的一個(gè)綜合癥——文件選擇器。app應(yīng)該知道如何處理它的本地?cái)?shù)據(jù),即存儲(chǔ)在本地或者云端,而不是搜查你的Micro-SD卡來(lái)獲取數(shù)據(jù)。
同時(shí)擁有內(nèi)部存儲(chǔ)和SD卡的這個(gè)目標(biāo)確實(shí)有些難以實(shí)現(xiàn),例如指定的相片,相機(jī)應(yīng)該保存在內(nèi)部的16GB還是SD卡?市場(chǎng)中的app應(yīng)該安裝到內(nèi)部存儲(chǔ)還是SD?諸如此類等等。沒(méi)錯(cuò),你也許會(huì)說(shuō)一個(gè)簡(jiǎn)單的選擇或者設(shè)置即可解決,但那樣類似于文件選擇器的體驗(yàn)并非是我們的理想期望。除此缺點(diǎn)之外,還要考慮到API,若用戶在SD卡上存儲(chǔ)照片,是否將其添加到系統(tǒng)媒體內(nèi)容提供商?如果需要的話這對(duì)app而言是個(gè)災(zāi)難,因?yàn)樗麄儧](méi)有操作照片來(lái)去這種概念。
而我們最終可能做的是將“導(dǎo)入/導(dǎo)出”這種概念添加到可移動(dòng)存儲(chǔ)。因此相機(jī)將始終保存到內(nèi)部存儲(chǔ)中,并且當(dāng)您彈出SD卡時(shí)(或在USB主機(jī)設(shè)備上插入拇指驅(qū)動(dòng)器),您可以啟動(dòng)“”遷移或“導(dǎo)入/導(dǎo)出”對(duì)話框。
(此點(diǎn)Q&A來(lái)源于androidpolice新聞,結(jié)合自身理解翻譯敘述)
Android開(kāi)發(fā)中有一個(gè)隱性的問(wèn)題,就是市面上各個(gè)手機(jī)的Android版本并不統(tǒng)一。會(huì)被不同版本所影響的邏輯處理,開(kāi)發(fā)人員需要做好兼容處理,去適應(yīng)市場(chǎng)上大部分機(jī)型,例如此篇文章的混淆點(diǎn)。
此篇文章主要的疑問(wèn)通過(guò)搜索多篇文章最終解決,其中涉及到不少英文網(wǎng)站,例如StackOverflow、Stack Exchange,還有國(guó)內(nèi)的論壇、博客等等,知識(shí)開(kāi)源的感覺(jué)還是很棒的,雖然國(guó)內(nèi)還是偏少,共勉~
若翻譯、理解有誤,虛心指教~
?
總結(jié)
以上是生活随笔為你收集整理的Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 转:彻底搞懂Android文件存储---
- 下一篇: U盘挂载