Некоторые устройства (например, мой Nexus 4) не имеют внешнего слота для SD-карты. Вместо этого есть корневая папка /sdcard/
, которая обрабатывается таким же образом. Но я также нахожу другие пути, которые все указывают на одни и те же файлы - должны быть какие-то перенаправления (я думаю, это называется символическими ссылками в Linux).
Все эти пути содержат одни и те же файлы:
/sdcard/
/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/
Какой путь является «настоящим»? А как насчет других путей? Для чего они используются, почему они существуют?
Рекомендуемая лекция: Почему /sdcard/ превратилась в /sdcard/0/ с 4.2? .
Вкратце: это связано с многопользовательской функциональностью, представленной в Jelly Bean:
/storage/emulated/0/
: насколько мне известно, это относится к "эмулируемой MMC" ("часть владельца"). Обычно это внутренний. Здесь «0» означает пользователя, «0» — это первый пользователь, он же владелец устройства. Если вы создадите дополнительных пользователей, это число будет увеличиваться для каждого./storage/emulated/legacy/
как и прежде, но указывая на часть работающего в данный момент пользователя (для владельца это будет симлинк на /storage/emulated/0/
). Так что этот путь должен привести каждого пользователя к своей «части»./sdcard/
: Согласно комментарию Shywim , это символическая ссылка на...
/mnt/sdcard
(Андроид < 4.0)/storage/sdcard0
(Андроид 4.0+)/storage/sdcard0/
: Поскольку legacy
брелка здесь нет (см. комментарии ниже), то "0" в данном случае скорее идентифицирует само устройство (карту). В конце концов, можно было бы подключить кард-ридер к другой SDCard через OTG, что тогда стало бы /storage/sdcard1
(нет доказательств, просто предположение, но я бы сказал хорошее)Хотя можно прийти к выводу, что также должен быть a /storage/sdcard/legacy
, его нет (см. комментарии) — что вполне логично с моим предположением о том, что числа здесь не связаны с пользователем, а скорее с возможными несколькими картами: " 0" всегда будет тем, что находится в слоте для карты устройства, поэтому здесь нет необходимости в "устаревшей символической ссылке".
Да, немного сбивает с толку, но это альтернативные пути для размещения памяти.
/mnt/sdcard0/ (внутренняя виртуальная SD-карта)
и, Иззи, вы правы, если подключено больше устройств, но названия могут отличаться в зависимости от устройства.
бывший. /mnt/sdcard1/ (физическая SD-карта в слоте SD)
но другие устройства, такие как USB-накопитель, подключаемый с помощью адаптера, могут называться
/mnt/media_rw/usbdisk (Android Kitkat 4.4 и выше?) или /mnt/usbdisk (jellybean 4.1–4.2)
/mnt/*
во всех этих случаях это только символическая ссылка — с «настоящими монтированиями», расположенными ниже /storage
:)
Торбен Гундтофте-Бруун
/storage/sdcard/legacy
пути нет.Иззи
/sdcard0/
по сравнению с/emulated/0
), «0» здесь может быть предназначен для случая, когда вы подключаете несколько SDCard через устройство чтения карт и режим USB-хоста. Просто предположение, не факт, но я бы сказал, хорошее.Матье Арле
/sdcard/
это просто символическая ссылка на/storage/sdcard0/
. В более старой версии, чем 4.0.0, это/mnt/sdcard/
.Мистер Уайт
/mnt/sdcard/
это символическая ссылка на/storage/sdcard0/
? Поскольку оба они доступны для навигации на моем Nexus 4.Иззи
Тони19
/storage/sdcard0/
противоречит ответу на вопрос, который вы связали , где вы говорите, что «0»sdcard0
связан с идентификатором пользователя.Иззи
/sdcard0
это первая SD-карта, а/sdcard/0
часть SD-карты первого пользователя :) Кроме того, здесь запрашивается 4.0+ — в то время как эти многопользовательские вещи были введен только с 4.2+.Гили Нахум