題:
為什麼將SD卡安裝到“ / sdcard / external_sd”而不是“ / sdcard”(或“ / mnt / sdcard”)?
Sepero
2012-11-10 14:43:24 UTC
view on stackexchange narkive permalink

我最近將手機升級到了LG Motion 4G(Android 4 ICS)。我看到sdcard安裝在 / sdcard / external_sd 上。我還注意到,這似乎與其他一些較新的型號相同。應用程序期望sdcard位於 / sdcard 。我假設製造商想包括很多內部存儲,但是為什麼將內部存儲安裝在 / sdcard 上?這不應該違反某種形式的Android規範標準嗎?

至於“規範標準”,這應該沒有問題:您可以在[外部存儲](http://developer.android.com/guide/topics/data/data-storage.html# filesExternal),應用應使用API​​調用(此處為[getExternalStorageState()](http://developer.android.com/reference/android/os/Environment.html#getExternalStorageState()))確定位置/可用性。硬編碼路徑。
好點Izzy,但是顯然一些製造商通過getExternalStorageDirectory()錯誤地將應用程序重定向到內部空間。 http://stackoverflow.com/questions/11281010/how-can-i-get-external-sd-card-path-for-android-4-0
嗯,還有一個好處-作為非開發人員,我沒有意識到這一點。但是我看到Flow提供了很好的解釋-再次說明了我不知道的幾點...
三 答案:
Flow
2012-11-10 17:35:21 UTC
view on stackexchange narkive permalink

原因是Android的歷史:第一代Android設備僅具有少量內部存儲(大約100-400MiB),該內部存儲安裝在 / data 下。

接下來,出現了帶有外部SD卡的設備。將SD卡安裝在 / mnt / sdcard 下。

然後,內部存儲空間較大的設備上市了。由於 / mnt / sdcard 已成為來自應用程序,圖片等的大數據塊的默認位置,因此該存儲被分配了。因此,Android環境必須具有 / data / mnt / sdcard 目錄。因此,一個分區用於 / data ,另一個分區用於 / mnt / sdcard 。這就是為什麼即使 / mnt / sdcard 上有足夠的空間,存儲空間也會變小( / data 分區)的原因。

使用Android 3.0改善了這種情況: / data / mnt / sdcard 現在指向同一分區。 好的Google,這本來可以在以前的版本中完成的。 sup>這也是在Android 3.0或更高版本上不再需要app2sd的原因:您只能在相同的捲中移動數據。

現在,如果您有任何問題,我們將為您解答:由於 / mnt / sdcard 已經安裝在內部存儲器上,因此外部SD卡必須使用其他安裝點。並且該掛載點不是Google指定的。可能是

  • / mnt / sdcard / ext_sd
  • / mnt / external
  • / mnt / extSdCard
  • / mnt / sdcard / external_sd
  • 等。

API調用 getExternalStorageDirectory()通常指向內部存儲目錄。此行為已記錄。有提供工具的開源項目,可以以規範的方式查找外部SD卡目錄。

這是否意味著應用沒有確定SD卡的“透明方式”?當然,有[`isExternalStorageRemovable()`](http://developer.android.com/reference/android/os/Environment.html#isExternalStorageRemovable())來查看“外部”存儲是否可移動,再加上一個確定掛載點(使用`mount`命令)並檢查掛載標誌等。但是,如果我在這裡沒有記錯的話,這仍然意味著每個開發人員都需要自己弄清楚自己的應用,並且沒有簡單的API調用為他這樣做嗎?
沒錯我鏈接了一些嘗試添加該功能的庫,但是沒有官方的API調用來添加該功能。
如果外部存儲和`/ data`分區都合併了,我如何安全地安裝/卸載SD卡以將其插入PC?在我看來,具有單獨的分區是合乎邏輯的,而且我不明白為什麼所有這些都必鬚髮生。
它不是外部存儲,而是所謂的“內部SD”和合併的“ / data”分區。
使用Android 3.0可以改善這種情況:/ data和/ mnt / sdcard現在指向相同的分區。僅供參考,至少在運行Android 4.0(Pantech Burst)的手機上不是這樣,其中“ / data”是1GB ext4分區,而“ / mnt / sdcard”是12GB FAT32分區。
所有聲明都考慮到了香草Android。製造商可以隨意離開Google設定的道路。
Google上的羞恥,因為他們沒有提供API調用來明確檢測安裝點,或者至少指定了“推薦”安裝點(而不是讓製造商自己去發明)。 GitHub上的Environment2項目(感謝其鏈接)確實減輕了痛苦,但太可惜的是,代碼中的(大量)文檔全部使用德語。
舉例來說,我使用的是Android 6.0.1,我的外部SD卡安裝在`/ storage / {random number,例如3430-3234}”,Astro將其重命名為“ / storage / SD卡”。
Deecee
2012-11-30 11:03:16 UTC
view on stackexchange narkive permalink

迫使外部SD卡遠離 / mnt / sdcard 沒有技術優點,這是Google幫助硬件供應商為具有更多內部存儲器的手機創建差異化點的方法。

/ mnt / sdcard 顯然是sdcard的原本位置,而Google未定義的加載外部SD卡的方式是另一個原因時,應用程序沒有理由必須找到一種方法來定位外部卡小於消費者友好的空間,從而使外部SD卡在較新的Android設備中不再有用。沒有理由將 / data / mnt / sdcard 合併到較新版本的Android的同一分區中,除非製造商將內置更大內存的手機與成本更低的單位,內部存儲器更少。即使必須合併,Google仍可以為外部SD卡明確定義一個 STANDARD 新安裝點,而不必完全模糊。通過笨拙的設計來防止供應商區分高端手機與內置內存較少的低成本手機,這完全可以防止Android生態系統的進一步“細分”。

Android應用二進製文件是體積很小,具有1-2 Gig內部存儲器的電話應該有足夠的空間來容納數百個應用程序,並且所有大數據都可以安全地存儲在外部SD卡中。但是隨後,供應商意識到他們必須有一種區分高端產品的方法,並聲稱更高的內部存儲器已成為該方案的一部分,而削弱外部存儲器的實用性是該方案要完全發揮作用所必需的另一個集成部分,因此不太有用的API,無法找到外部SD卡和未標準化的安裝點。

所以:不,將SD卡安裝在 / mnt / sdcard 之外的其他地方不過是一種在新版Android下銷售價格更高的新手機的商業策略,僅此而已。試想一下,如果Nexus 4 8GB和Nexus 16GB都可以使用64GB的外部SD卡存儲應用程序和媒體,那麼有人有理由購買16 GB版本嗎?如果涉及外部SD卡,那額外的8 GB NAND存儲器肯定不值50美元。由於智能手機中的大多數組件幾乎都必須相同(RAM,處理器,無線電),因此,留出更多利潤空間的唯一區域是內部存儲空間,因此還有怪異的外部存儲器安裝點。

每個人都還注意到目前的“ Google”品牌的android設備中缺少外部SD支持嗎?這種趨勢將繼續在“頂級” Android設備中擴展。外部SD卡支持是Android設備超越iPhone在移動市場上的主導地位的關鍵區別。現在,由於Android在數字遊戲中具有至高無上的統治力,這種利潤削減做法幾乎不需要保持更長的時間。

我不會對Android 5.0感到驚訝,外部SD卡支持將是過去的事情。因為如果應用程序很難找到外部SD卡,那麼大多數程序將只使用已知的 / data / mnt / sdcard 位置,而大多數應用程序使用的位置更多,無需在 / mnt / sdcard 上安裝外部SD卡,就可以憑空創建一個充滿活力的產品標記策略。

現在,這就是我所說的“文本牆”。似乎也有點保修。請在回答中添加一些段落。我也不明白為什麼沒有“沒有理由合併`/ data`和`/ mnt / sdcard`”,因為我清楚地看到了一個原因:避免內部存儲的碎片化。
絕對是個大雜燴,Deecee,但是無論如何,我感謝您的投入。乾杯
而且還有一件事:設備將內部xSD卡*內部*放在內部(例如LG P880上的`/ sdcard / external_sd`),備份“共享存儲” *包括兩者*,並創建一個巨大的存檔。僅通過簡單方法就無法備份內部SD。這沒有多大意義,因為有很多更簡便的方法來備份外部卡。我擁有提到的設備,這讓我發瘋了。
Rudi Pittman
2013-07-18 20:55:36 UTC
view on stackexchange narkive permalink

您應該知道(如果已root),您可以進入/system/etc/vold.fstab並將/ sdcard和/ mnt / external_sd的掛載點交換...。這將使您的sdcard位於/ sdcard上如您所願,其餘的“內部存儲”將安裝在/ mnt / external_sd上,或者如果您更喜歡/ sdcard / external_sd /

此功能適用於某些型號的手機,但不是全部。它不適用於我的LG Motion 4G Android 4.0.4。謝謝


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...