Как заставить символические ссылки работать внутри /storage/emulated в 4.4.4

Я создал символическую ссылку из /storage/sdcard1/somefolderв /data/media/0/somefolder, но приложения рассматривают символическую ссылку как файл, а не папку (и вылетают, потому что они жестко запрограммированы на поиск файлов внутри папки по этому пути).

Корневые приложения, которые обращаются к символической ссылке из /data/media/0/somefolderработы и рассматривают ее как папку, некорневые приложения /storage/emulated/0/somefolderвместо этого используют плавную точку монтирования, потому что у них нет разрешения заглянуть внутрь /data/media.

Невозможно напрямую сделать символическую ссылку на точку плавления (ошибка перекрестной ссылки на устройство). Разрешение Symlink для точки слияния предназначено 770для a, app_ID:1028а не 777для root:root, как от /data/media, невозможно изменить разрешения с помощью root для точки слияния. /storage/sdcard1/somefolderесть 777.

Эксплойта debuggerd следует избегать как можно дольше, и точки монтирования не будут видны во всей системе.

Что нужно изменить, чтобы симлинк работал с точки плавления? Как это повлияет на остальную систему?

Ответы (2)

Android охраняет точки монтирования с момента выхода Android 4.2. Вы уже упомянули хак отладчика, поэтому я предполагаю, что вы знаете об этом ограничении.

Это может показаться очевидным, но сначала следует проверить, поддерживает ли файловая система, используемая в эмулируемом внешнем хранилище, и в реальном внешнем хранилище символические ссылки. Если ваша SD-карта отформатирована как FAT32, которая не поддерживает символические ссылки, ничего не произойдет, и вам нужно будет отформатировать внешнее хранилище во что-то вроде ext2/3/4 или yaffs.

Ошибку «ссылки между устройствами» можно исправить, используя ln -s /data/media/0/somefolder /storage/sdcard1/somefolderвместо ln /data/media/0/somefolder /storage/sdcard1/somefolder. Это создаст символическую ссылку вместо жесткой ссылки, поэтому она может охватывать файловые системы и устройства хранения. Вы должны сделать это как root, иначе это не сработает.

Если разрешения являются проблемой, вам может потребоваться исправить «внешнюю проблему с SD-картой». Эта проблема приводит к тому, что реальная внешняя SD-карта доступна только для чтения в версиях Kitkat. Подробности на этой странице . Все сводится к редактированию /system/etc/permissions/platform.xml, чтобы приложения с WRITE_EXTERNAL_STORAGEразрешением также могли записывать в «настоящее» внешнее хранилище. Это можно сделать, установив это приложение или выполнив следующие действия:

  1. Запустите свой любимый файловый менеджер с включенными правами root-доступа. Вы можете использовать любое приложение, которое вы предпочитаете, которое может работать на вашем устройстве с повышенными правами. Например, подойдет приложение «Root Explorer», «Total Commander» или «Диспетчер файлов» от CyanogenMod.

  2. Перейдите к следующему файлу:

/система/и т.д./разрешения/платформа.xml

  1. Найдите строки android.permission.WRITE_EXTERNAL_STORAGE и android.permission.WRITE_MEDIA_STORAGE. Это разделы XML. Вам нужно сделать так, чтобы они выглядели точно так же, как строки ниже:
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>
<permission name="android.permission.WRITE_MEDIA_STORAGE" >
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>

Сохраните файл platform.xml. Перед перезапуском мобильного устройства необходимо установить права доступа к файлу 644 (rw-/r–/r–). Теперь перезагрузите Android-устройство.

Кредиты идут на poolmaker@XDA

Извините, но я вас не понял, но если вы имеете в виду, что хотите освободить больше места во внутренней памяти, создав символические ссылки, почему бы вам не попробовать Link2SD сейчас, он может связать даже личные данные любого приложения с внешней SD-картой без каких-либо проблем, кроме того, но НЕ ПРИСОЕДИНЯЙТЕ НИКАКИЕ СИСТЕМНЫЕ ПРИЛОЖЕНИЯ К внешней SD-карте, так как это может привести к плохим последствиям для вашего телефона. Рекомендуется иметь SD-карту с высокой скоростью записи и чтения.

Link2SD обманывает debuggerd и не допускает произвольного связывания, из последних тестов, которые я провел с ним, не могли бы вы показать мне пример того, как произвольно перемещать /sdcard/arbitrary_folder в /storage/sdcard1/arbitrary_folder с помощью Link2SD с файлами в этой папке оставаться доступными в обоих местах для приложений, жестко закодированных для чтения по этому нетрадиционному пути? Как link2sd позволит мне заставить символические ссылки работать на плавной точке монтирования?