Я создал символическую ссылку из /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 следует избегать как можно дольше, и точки монтирования не будут видны во всей системе.
Что нужно изменить, чтобы симлинк работал с точки плавления? Как это повлияет на остальную систему?
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
разрешением также могли записывать в «настоящее» внешнее хранилище. Это можно сделать, установив это приложение или выполнив следующие действия:
Запустите свой любимый файловый менеджер с включенными правами root-доступа. Вы можете использовать любое приложение, которое вы предпочитаете, которое может работать на вашем устройстве с повышенными правами. Например, подойдет приложение «Root Explorer», «Total Commander» или «Диспетчер файлов» от CyanogenMod.
Перейдите к следующему файлу:
/система/и т.д./разрешения/платформа.xml
- Найдите строки 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-карту с высокой скоростью записи и чтения.
Зульгриб