Проблема перемещения приложений на SD карту.
Общая постановки задачи хорошо освещена в публикации Андроид: [DirectoryBind] Простой способ связать внешнюю sd карту и внутреннюю память, чтобы освободить место https://habr.com/ru/post/169965/
В двух словах многие пользователи Андроид устройств имеют ограниченную внутреннюю память и возможность вставить SD-карту довольно большого объема. Но существует критический объем приложений, когда начинаются наглые сообщения о нехватке внутренней памяти, хотя под боком стоит огромного объема SD карта! У меня такое устройство и я ищу способ решить проблему с нехваткой внутренней памяти. Иногда я даже не могу включить bluetooth наушники, то есть они включаются, но фильм на ютубе замирает и не показывает...
1. У меня планшет Lenovo Tab 3 8 Plus (model TB-8703x), OS Android Marshmallow v.6.0.1, processor qualcomm snapdragon 625, имеется SD-карта Samsung — 64.0 GB.
Внутренняя память 16 Гб, из них используется под систему 3Гб, при установке приложений память быстро иссякает.
Мой планшет рутирован, установлен Magisk-v24.3.
ОС не позволяет грузить приложения на SD карту, поэтому возникла задача найти способ переместить приложения на SD карту.
Были просмотрены и испытаны различные модули по решению этой задачи.
ОС не имеет разделов типа init.d (и других, такого типа, например OTT), поэтому нашлось только одно решение экономии внутренней памяти за счет внешней карты.
Оно опубликовано в ранее упомянутой статье.
Статья эта датирована 19 февраля 2013 года. Ссылка habr.com/ru/post/169965/.
Также есть несколько статей подобного типа, датированные slig, Dec 25, 2011,
и другие.
Эти публикации довольно тесно переплетаются друг с другом.
Первая публикация [TOOL] DirectoryBind — move data to external_sd (GameLoft, Shadowgun etc.) ROOT req. forum.xda-developers.com/t/tool-directorybind-move-data-to-external_sd-gameloft-shadowgun-etc-root-req.1410262/ принадлежит slig, forum.xda-developers.com/m/slig.1212457/ Dec 25, 2011 forum.xda-developers.com/t/tool-directorybind-move-data-to-external_sd-gameloft-shadowgun-etc-root-req.1410262/.
К сожалению, работа по всей видимости сделана русскоязычным автором, и переведена на английский. Получившаяся инструкция перевирает понятия source, target, и т.д.,
так что что-то работающее сотворить просто не удается. С момента первой публикации инструкция не корректировалась, и можно сказать, что работает только создание символической ссылки на данные приложения и их можно переместить на SD карту. На моем планшете предлагаемые скрипты Autostart.sh не могут быть использованы, так как каталога OTT у меня на планшете нет, и он никак не может быть использован. Использовать приложение BIND использовать просто невозможно.
2. Что удается сделать:
Из всего, что там написано на моем планшете удалось лишь перенести данные приложения на SD карту, само приложение остается во внутренней памяти.
Пример: Делается это довольно просто:
Во-первых мы делим нашу SD карту на две части:
Первая создается как первичный раздел, форматируется как FAT32 или ExtFat,
Вторая создается также как первичный раздел и форматируется как EXT2,EXT3 или EXT4.
Разбивка SD 64 Гб сделана с помощью программы aparted на Линукс. Первая часть занимает 35 Гб FAT32,
вторая 25-29 Гб EXT4.
Первая часть видна из Андроид как карта SD-2 и используется как внешний диск для хранения произвольных данных.
Вторая часть служит для хранения данных приложений, сами приложения установлены во внутренней памяти. Чтобы она была доступна ее необходимо отмапить:
Первым делом в терминале выполняем (у меня Terminal Emuilator for Android OS: site termoneplus.com,
клавиатура для терминала Hacker's Keyboard) команду:
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p2 /data/sdext4
Теперь выбираем приложение, данные которого мы хотим перенести на SD карту:
У нас это Метеостанция — com.arf.weatherstation
Запускаем приложение APKInspector:
Выделяем данные нашего приложения:
Source Dir: /data/app/com.arf.weatherstation-1/base.apk
Data Dir: /data/user/0/com.arf.weatherstation
Запускаем программу totalcommander и смотрим свойства каталога данных
/data/user/0/com.arf.weatherstation — размер: 5.2 M
Удобно использовать эту программу для копирования и/или перемещения каталогов, а терминальные команды в эмуляторе терминала.
Мы хотим переместить данные приложения метеостанция в каталог
/data/sdext4/com.arf.weatherstation
из каталога
/data/user/0/com.arf.weatherstation
и делаем символическую ссылку.
Запускаем Terminal termoneplus, переходим в каталог / и выполняем команды под рутом:
su
ln -sf /data/sdext4/com.arf.weatherstation /data/user/0/com.arf.weatherstation
Это все.
Размер данных на SD карте составляет 5.9 М
Обратно, к сожалению не получается просто скопировать данные с нового места на старое и уничтожить линк.
Поэтому, когда вы хотите вернуть перемещенные данные в исходное состояние, придется просто удалить приложение и переустановить его.
Очистка хвостов:
Нужно удалить символическую ссылку:
Запускаем Terminal, запускаем команды unlink:
Если такая команда есть, то удаляем ссылку
unlink /data/user/0/com.arf.weatherstation
У меня такой команды нет, поэтому используем команду rm.
У нас имя символической ссылки /data/user/0/com.arf.weatherstation
запускаем Terminal, выполняем команду проверки символической ссылки:
ls -l /data/user/0/com.arf.weatherstation
Ответ должен быть:
root root 2022-08-04 16:46 com.arf.weatherstation ->/data/sdext4/com.arf.weatherstation
Удаляем символическую ссылку:
rm -r /data/user/0/com.arf.weatherstation
3. Практические результаты:
Я выбрал мои приложения, не являющиеся системными и объемом памяти данных свыше мегабайта и попробовал переместить их на SD-карту.
Получилось прогнозируемый объем перемещаемой памяти 146M
Приложения моего планшета:
Первая часть приложений, объем данных которого не очень велик, и овчинка выделки не стоит:
Apk Analyzer sk.styk.martin.apkanalyzer (3.0.5) Не устанавливалось
Data Dir: /dat/user/0/sk.styk.martin.apkanalyzer V=230.5k
Damumed ab.damumed (2.3.2) Не устанавливалось
Data Dir: /dat/user/0/ab.damumed V=267.5k
Hacker's Keyboard org.pocketworkstation.pckeyboard (v1.40.7) Не устанавливалось
Data Dir: /dat/user/0/org.pocketworkstation.pckeyboard V=54.9k
Magisk com.topjohnwu.magisk.videop (1.2.0) Не устанавливалось
Data Dir: /dat/user/0/com.topjohnwu.magisk V=493.2k
SD Maid eu.thedarken.sdm (5.3.18) Не устанавливалось
Data Dir: /dat/user/0/eu.thedarken.sdm V=1.3M
Titanium Backup com.keramidas.TitaniumBackup (8.4.0.2) Не устанавливалось
Data Dir: /dat/user/0/com.keramidas.TitaniumBackup V=647.4k
Titanium Backup Add-on com.keramidas.TitaniumBackupAddon (1.0.0) Не устанавливалось
Data Dir: /dat/user/0/
Total Commander com.ghisler.android.TotalCommander (3.33) Не устанавливалось
Data Dir: /dat/user/0/com.ghisler.android.TotalCommander V=89.9k
WordHunt onedict.wordhunt.pwa (1.2) Не устанавливалось
Тем не менее перестал запускаться
Data Dir: /dat/user/0/onedict.wordhunt.pwa V=6.4k
XAPK Installer com.apkpure.installer (2.2.2) Не устанавливалось
Data Dir: /dat/user/0/com.apkpure.installer V=28.5k
bGEO net.probki.bgeo (12.0.270) Не устанавливалось
Data Dir: /dat/user/0/net.probki.bgeo V=134.0k
Терминал com.termoneplus (4.0.1)
Data Dir: /dat/user/0/com.termoneplus V=1.2k
Вторая часть приложений, в которых удалось перенести область данных на SD-карту:
Apk Inspector net.jevinstudios.apkinspector (5.3.0)
Data Dir: /dat/user/0/net.jevinstudios.apkinspector V=6.6M
CallApp Contacts com.callapp.contacts (1.966)
Data Dir: /dat/user/0/com.callapp.contacts V=22.6M
Vivaldi Browser com.vivaldi.browser (5.4.2760.26)
Data Dir: /dat/user/0/com.vivaldi.browser V=20.2M
Метеостанция com.arf.weatherstation (6.9.7)
Data Dir: /dat/user/0/com.arf.weatherstation V=5.8M
Третья часть приложений, в которых удалось перенести область данных на SD-карту и они перестали работать:
MX Player com.mxtech.videoplayer.ad (1.48.12)
Data Dir: /dat/user/0/com.mxtech.videoplayer.ad V=22.2M
Ошибки: приложение не работает. Screenshot d:\Tasks\Phablet\Lenovo 8703R\MyPhabletMovingAppData\Screenshot_20220903-215914.png показывает множество файлов com.mxtech.videoplayer.ad в корневом каталоге. Причина в этом?
Potplayer mediaplayerclassic.window.videop (1.2.0)
Data Dir: /dat/user/0/mediaplayerclassic.window.videop V=4.8M
Ошибки: приложение не всегда правильно работает. При просмотре видео по окнчании вылетает сообщение: «В приложении potplayer произошла ошибка»
ReadEra org.readera (22.07.16+1670)
Data Dir: /dat/user/0/org.readera V=19.3M
Ошибки: Ошибка определения декодировки
Repeat Player kr.co.darby (3.3.2)
Data Dir: /dat/user/0/kr.co.darby V=4.7M
Ошибки: при работе приложения сообщение: «В приложении Repeat Player произошла ошибка»
WhatsApp com.whatsapp (2.22.17.76) Не устанавливалось
Data Dir: /dat/user/0/com.whatsapp V=24.0M
Ошибка: Произошла ошибка
Быстрый блокнот net.fast_notepad_notes_app.fasnotepad (7.10)
Data Dir: /dat/user/0/net.fast_notepad_notes_app.fasnotepad V=5.0M
Ошибка: внесенная информация перестала сохраняться! пришлось переустановить заново
Калькулятор++ org.solovyev.android.calculator (2.2.7)
Data Dir: /dat/user/0/org.solovyev.android.calculator V=4.6M
Ошибка: не открывается в плавающем окне, пришлось переустановить заново
Файловый менеджер+ com.alphainventor.filemanager (3.0.3)
Data Dir: /dat/user/0/com.alphainventor.filemanager V=5.4M
Ошибка: приложение удалено!
Общая сумма экономии составила 55.2 М
Заключение:
1.Для сколь-либо полезного выигрыша памяти, нужно перемещать также системные приложения, однако, невозможность откатить возвратом перемещенной памяти делает такую задачу трудно выполнимой.
2. По идее использование символической ссылки должно работать, если только творец не применяет собственные трюки для решения собственных задач.
3. Остается только поставить кастомную прошивку типа LineageOS. Кто использовал этот путь, подскажите работает ли при этом link2sd?
С уважением,
Radmir1948