У меня есть Moto G (2-го поколения) с Android 5.02. Внутренняя SD-карта составляет около 8 ГБ, и у меня есть внешняя SD-карта с 16 ГБ свободного места.
Перемещение приложения на SDCARD из меню приложения перемещает его на sdcard0, которая является внутренней SD-картой.
Команда оболочки adb:
pm get-install-location
дает мне:
0[auto]
Я попытался установить место установки через:
pm set-install-location 2
Но я получаю эту ошибку:
Error: java.lang.SecurityException: Package android does not belong to 2000
То есть я считаю, что жалуются на права root.
И поскольку это производственная сборка, пытающаяся:
adb root
дает мне:
adbd cannot run as root in production builds
Есть ли способ настроить приложения для установки их данных на внешнюю SD-карту?
PS: я не хочу устанавливать пользовательскую прошивку или устанавливать стороннее программное обеспечение для рутирования телефона.
Редактировать: я заметил, что данные приложений хранятся в папке /storage/sdcard0/Android
, поэтому я подумал о перемещении этой папки /storage/sdcard1/
и создании вместо этого символической ссылки:
ln -s /storage/sdcard1/Android /storage/sdcard0/Android
это сделает работу?
Спасибо.
В общем говоря: вы не можете. По крайней мере , без рута .
Основные причины, по которым Android не позволяет установить приложение на внешнюю SD-карту:
Безопасность : это основная причина этого ограничения. Базовые файловые системы, такие как NTFS или FAT (любая их версия), не позволяют управлять разрешениями в стиле Unix.
Это означает: любое приложение сможет записывать в любой файл в этом хранилище.
Думая о вредоносных приложениях, они могли бы заменить правильные приложения поддельными / зараженными, заблокировав ваш телефон и сделав его непригодным для использования.
Энергонезависимое хранилище . Внешнюю SD-карту небезопасно постоянно вставлять в устройство. Вы можете извлечь его в любое время, что делает вашу SD-карту не очень хорошим кандидатом на постоянное хранение. Представьте, что приложения работают с вашей SD-карты, и вы извлекаете ее. Эти приложения просто вылетают, и все другие приложения, сохраненные на вашей SD-карте, также исчезают. Вы не можете использовать их в это время, и на данные этих приложений также влияет причина № 1.
В принципе можно! ;)
После перезагрузки КАЖДОЕ приложение, которое вы устанавливаете, автоматически перейдет на SD-карту.
Если не знаете как создать раздел ищите гайд в гугле их полно
Это было настоящее путешествие в поисках ответа, не связанного с рутированием, но в итоге я:
Загрузка в TWRP без его установки:
fastboot boot recovery.img
Установка SuperSU от Chainfire через TWRP.
Из эмулятора терминала или оболочки adb :
su
pm set-install-location 2
Из меню приложения Settings > Applications
простым нажатием Move to SDCARD
перемещает его* - его данные и obb - на внешнюю SDCARD.
Удаление SuperSU....
Нет... Я этого не делал! 3 :)
Перейдите по этому адресу http://developer.android.com/tools/help/shell.html#shellcommands.
Android 5 и выше не поддерживает этоpm get-install-location
Попробуйте сделать резервную копию вашего apk и выполните следующие действия.
adb shell pm install -r -s <path of your apk>
Пример
adb shell pm install -r -s /storage/sdcard1/base.apk
-r означает переустановить apk с существующими данными, а -s означает SD-карту
Сначала установите Adbd insecure ( скачать apk с xda-developers ).
После установки на ваше устройство откройте его и установите флажок: «Включить небезопасный adbd».
Теперь вы можете изменить место установки приложений.
пр.низар
ГигантДерево
/sdcard/sdcard0/Android
. Приложения хранятся в скрытой папке под названием ,.android_secure
куда дажеroot
доступа нет (проверил на своем устройстве, нельзя дажеcd
в ту папку).пр.низар
ГигантДерево
sdcard_rw
принадлежать кroot
группе или вообще не отображают пользователяsdcard_rw
. Но с небольшими изменениями разрешений вы сможете разобраться с этим.пр.низар
ls -l /storage/sdcard0
дал мне это,lrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacy
и бегls -l /storage/sdcard0/
дал мне этоdrwxrwx--x root sdcard_r 2014-12-20 18:16 Android
... Это хорошая или плохая новость? Поскольку я не root, я считаю, что не могу устанавливать разрешения.ГигантДерево
/data/media
, гдеstorage/emulated/legacy
указывает на . Другим результатом является «легкое исправление»: сначала вам нужно переместить исходнуюAndroid
папку в другое место или переименовать ее, чтобы освободить место для символической ссылки. Затем дайте ссылку/storage/sdcard1/Android
и/storage/sdcard0/Android
назовите ссылкуAndroid
. Наконец исправьте все разрешения (777). Это просто теоретически, но я думаю, что это должно работать так.пр.низар
cp -R /storage/sdcard0/Android /storage/sdcard1/
(слишком шаткий по поводуmv
лол) тоrm -r /storage/sdcard0/Android
тогдаln -s /storage/sdcard1/Android /storage/sdcard0/Android
. Если это сработает, вы получите кредит, поэтому вы можете обновить свой ответ. Я дам Вам знать! ;-)ГигантДерево
Android
его, это приведет к поломке всех запущенных приложений (или, по крайней мере, большинства из них). Это просто теоретический подход, вылетевший из головы; нечего точно следовать. Если вы достаточно быстры, вы сможете восстановить приложения после сбоя, но имейте в виду, что все действия отменяются после следующей перезагрузки.пр.низар
ln: /storage/sdcard0/Android: Operation not permitted
. Итак, следующий вопрос: как создать символическую ссылку? (Я отменил свои изменения, и все в порядке.. или так я думаю на данный момент! LOL)ГигантДерево
Android
папок отсутствует, через мгновение создает их заново. по этой же причине такие приложения, как Link2SD, связывают папки отдельных приложений, а не всюAndroid
папку. Вы можете попробовать это, но я не могу обещать успеха.пр.низар
ГигантДерево
пр.низар
Operation not permitted
). Я считаю, что это просто потому, что мойsdcard1
отформатирован в fat32. Во что мне его форматировать (имею в виду его основной раздел)?ГигантДерево
fuse
вы не сможете создать символическую ссылку на вашу внешнюю SD-карту). Если вы можете, попробуйте отформатировать SD-карту,ext4
чтобы разрешения можно было применять без использованияfuse
в качестве промежуточного менеджера разрешений, который блокирует большинство попыток чтения и записи без надлежащего разрешения пакета.пр.низар
ГигантДерево
root
может создавать симлинки. Запомни.