Мне просто интересно, есть ли способ связать внутреннюю /sdcard
папку с другой внутренней /sdcard
папкой, и обычные приложения могут писать в нее для версий Android, начиная с 4.4?
У меня есть папка с именем ./MyPics
во внутреннем файле /sdcard
. Я хочу привязать его к ./DCIM/Camera
, ./Pictures/Screenshots
, ./Movies/Screencasts
. SD-карта монтируется /mnt/shell/emulated/0
как sdcardfs
, и на нее есть символическая ссылка /storage/emulated/legacy
. Более того, есть директория /storage/emulated/0
, которая не является ни точкой монтирования, ни симлинком. Это очень странный каталог.
Я пробовал следующее:
mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/DCIM/Camera
mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/Pictures/Screenshots
mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/Movies/Screencasts
но это бесполезно: такие приложения, как Камера, не смогли записать в/DCIM/Camera
Я пробовал следующее:
mount -o bind,dmask=0000,fmask=0000 /storage/emulated/legacy/MyPics /mnt/shell/emulated/0/...
....
но это тоже бесполезно
Я пробовал следующее:
mount -o bind,dmask=0000,fmask=0000 /data/media/0/MyPics /data/media/0/...
....
Если есть файл с именем a.jpg
в /MyPics
, он появляется в /data/media/0/DCIM/Camera
, но не появляется в/storage/emulated/legacy/DCIM/Camera
Я пытался использовать такие приложения, как LuckPatcher, чтобы выполнить эту работу, но снова не получилось
К сожалению, начиная с Android 4.2, на большинстве устройств больше невозможно смонтировать папку и сделать ее доступной для других приложений. Подробности о том, как это работает и почему это было изменено, можно найти здесь: Исправление для пустых каталогов, установленных в приложениях (CifsManager и т. д.) в Android 4.2 .
На упомянутой выше странице говорится следующее:
Первоначально опубликовано сообщением фиксации патча Zygote
Zygote: ограничение пространства для монтирования ведомых устройств, чтобы приложения Dalvik могли монтировать общесистемные тома Android 4.2 реализует многопользовательское хранилище с использованием пространств имен монтирования для каждого процесса. Первоначально все под «/» (вся иерархия файловой системы) помечается как рекурсивно-ведомое пространство монтирования для всех экземпляров zygote. Это сделано для того, чтобы монтирование песочницы пользовательского хранилища в каталоге /storage/emulated было скрыто от других приложений и пользователей. К сожалению, это означает, что любое приложение Dalvik (на самом деле, любая программа, чьи предки клона/форка включают зиготу Dalvik, то есть все, кроме служб, порожденных непосредственно из init) не может монтировать общесистемные тома. Таким образом, такие приложения, как CifsManager, фактически сломаны в Android 4.2, поскольку его монтирования cifs видны только самому приложению CifsManager. Все остальные приложения видят пустые точки монтирования вместо смонтированного тома. Более того,
Здесь мы ограничиваем ведомое пространство монтирования /storage (и, из-за возможной ошибки ядра, /mnt/shell/emulated), чтобы приложения Dalvik могли монтировать общесистемные тома в другом месте (с соответствующим разрешением, как в более ранних версиях Android). , сохраняя при этом полную совместимость с многопользовательским хранилищем. Это изменение требует, чтобы том tmpfs был смонтирован как /storage в файле init.rc. Если этот том недоступен, Zygote возвращается к предыдущему поведению, помечая всю иерархию файловой системы как подчиненную. Это также неявно требует, чтобы EMULATED_STORAGE_TARGET имел префикс пути (часть подиерархии) ANDROID_STORAGE, что является типичным случаем.
Это сводится к тому, что если приложения монтируют каталог или блочное устройство, смонтированный каталог должен быть виден только для приложений, которые выполнили монтирование, если у приложения нет специальных разрешений, которые обычно недоступны для несистемных приложений. И даже если вам удастся смонтировать каталог глобально, разрешения Linux все равно будут мешать вам.
Таким образом, монтирование, вероятно, не самое простое решение вашей проблемы, но если вы действительно хотите использовать монтирование, вы должны иметь возможность добавить команды, /system/bin/debuggerd
а затем (как root) войти start debuggerd
, чтобы выполнить свой собственный скрипт с системными привилегиями.
Однако существует более простой способ обойти проблемы только для чтения: либо установить это приложение, либо вручную добавить media_rw
группу WRITE_EXTERNAL_STORAGE
в файл разрешений. Это позволяет приложениям, имеющим разрешение на запись на эмулируемую SD-карту, также записывать на «внешнюю» SD-карту.
После того, как ваше внешнее хранилище станет доступным для записи, вы сможете использовать символические ссылки ( ln -s /sdcard/MyPics /sdcard/DCIM/Camera
), чтобы обеспечить быстрый доступ к этим каталогам.
сохранять спокойствие
ln -s
?ln -s /sdcard/MyPics /sdcard/DCIM/Camera
. Сначала вам нужно переместить папку «Камера».Ирфан Латиф