为什么将SD卡安装到“ / sdcard / external_sd”而不是“ / sdcard”(或“ / mnt / sdcard”)?


18

我最近将手机升级到LG Motion 4G(Android 4 ICS)。我看到sdcard安装在/sdcard/external_sd。我还注意到,这似乎与其他一些较新的型号相同。应用程式预期sdcard位于/sdcard。我假设制造商想要包括很多内部存储器,但是为什么要在以下位置安装内部存储器/sdcard?这不应该违反某种形式的Android规范标准吗?


4
至于“规范标准”,这应该没有问题:正如您可以在External Storage的开发人员文档中阅读的那样,应用程序应该使用API​​调用(此处为:getExternalStorageState())来确定位置/ 可用性,而不是使用硬编码路径。
伊齐

好点Izzy,但是显然有些制造商通过getExternalStorageDirectory()错误地将应用程序重定向到内部空间。stackoverflow.com/questions/11281010/...
Sepero

嗯,还有一点好处-作为非开发人员,我没有意识到这一点。但是我看到Flow提供了很好的解释-再次指出了我所不知道的要点...
Izzy

Answers:


26

原因是Android的历史:第一代Android设备只有少量内部存储(大约100-400MiB),安装在下/data

接下来,出现了带有外部SD卡的设备。SD卡安装在下方/mnt/sdcard

之后,具有大内部存储空间的设备进入市场。由于/mnt/sdcard已成为应用程序,图片等大数据块的默认位置,因此该存储被分配了。因此,Android环境必须具有/data/mnt/sdcard目录。因此,一个分区用于/data,另一个分区用于/mnt/sdcard。这就是/data即使即使有足够的空间,存储空间(分区)也可能变低的原因/mnt/sdcard

这种情况与Android 3.0的改进:/data/mnt/sdcard现在指向同一个分区。很好的Google,这本来可以在以前完成的。这也是为什么在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()要查看“外部”存储是否可移动,再加上一个可以确定挂载点(使用mount命令)并检查挂载标志等。但是,如果我在这里没有记错的话,这仍然意味着每个开发人员都需要自己弄清楚他的应用,没有简单的API调用可以为他做这件事吗?
伊齐

没错 我链接了一些尝试添加该功能的库,但是没有官方的API调用来添加该功能。
流动

如果外部存储和/data分区都合并了,我如何安全地安装/卸载SD卡以将其插入PC?在我看来,具有单独的分区是合乎逻辑的,而且我不明白为什么所有这些都必须发生。
jadkik94 2012年

它不是外部存储,而是所谓的“内部SD”和/data要合并的分区。
流量

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition。仅供参考,至少在一部运行Android 4.0(Pantech Burst)的手机上情况并非如此,那里/data有1GB ext4分区和/mnt/sdcard12GB FAT32分区。
netvope 2013年

3

迫使外部SD卡架远离/mnt/sdcard没有技术优势,这是Google帮助硬件供应商为具有更多内部存储器的手机创建差异化点的方法。

毫无疑问,应用程序没有必要在/mnt/sdcard原本应该放置sdcard的位置时找到一种方法来定位外部卡,而Google未定义的加载外部SD卡的方式是另一个不那么消费者友好的计划,它使外部SD卡在较新的Android设备。没有任何理由/data,并/mnt/sdcard不得不对除了制造商为了区分手机与成本较低的单位更大的内部存储器用更少的内存新版Android合并到同一个分区。即使必须进行合并,Google也可以明确定义一个标准新的外部SD卡安装点,而不是完全模糊。通过笨拙的设计来帮助阻止供应商区分高端手机与内置内存较少的低成本手机,这完全有助于防止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位置,而大多数应用程序会使用越来越多的存储数据进行操作,因此,“瘦身”创建了一种充满活力的产品标记策略“只需在不安装外部SD卡的位置/mnt/sdcard


1
现在,这就是我所说的文字墙。似乎也有点保修。请在回答中添加一些段落。我也不明白为什么没有“没有理由合并/data/mnt/sdcard”,正如我清楚地看到一个原因:避免内部存储的碎片化。
流量

1
绝对是个大杂烩,Deecee,但不管怎么说,我感谢您的投入。干杯
Sepero 2012年

还有一件事更给它:与设备放置xternal SD卡的内部之一(例如/sdcard/external_sd,LG的P880),备份“共享存储” 包括,并创建一个巨大的存档。仅通过简单方法就无法备份内部SD。这没有多大意义,因为有很多更简便的方法来备份外部卡。一个让我抓狂的事实,因为我拥有提到的设备...
Izzy

2

您应该知道(如果已扎根),您可以进入/system/etc/vold.fstab并将/ sdcard和/ mnt / external_sd的挂载点交换。剩余的“内部存储空间”将挂载在/ mnt / external_sd上,或者如果您更喜欢/ sdcard / external_sd /


这适用于某些型号的手机,但不是全部。我的LG Motion 4G Android 4.0.4无法使用。Thx
Sepero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.