Перемещение места установки на нерутируемое устройство Android 5 Lollipop


12

У меня есть 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

это сделает работу?

Спасибо.

Ответы:


10

По сути, вы не можете. По крайней мере, не без рута .
Основные причины, по которым Android не позволяет устанавливать приложение на внешнюю SD-карту:

  1. Безопасность : это главная причина этого ограничения. Базовые файловые системы, такие как NTFS или FAT (любая их версия), не допускают Unix-подобное управление разрешениями.
    Это означает, что любое приложение сможет записывать в любой файл в этом хранилище.
    Думая о вредоносных приложениях, они смогут заменить правильные приложения поддельными / зараженными, взломав ваш телефон и сделав его непригодным для использования.

  2. Энергозависимое хранение : Ваша внешняя SD-карта не всегда надежно вставлена ​​в ваше устройство. Вы можете извлечь его в любое время, что делает вашу SD-карту не очень хорошим кандидатом на постоянное хранение. Рассмотрим приложения, работающие с вашей SD-карты, и вы ее извлекаете. Эти приложения просто рухнут, а все остальные приложения, сохраненные на вашей SD-карте, также исчезнут. Вы не можете использовать их в то время, и на данные этого приложения также влияет причина # 1.


У меня есть опыт работы с Linux, поэтому я рассмотрел этот подход: я заметил, что пункт меню приложения «Переместить на SDCARD» создал папку с именем Android на sdcard0 (внутреннюю) с данными приложений на ней; Будет ли работать символическая ссылка (в sdcard0) под названием Android на папку Android в sdcard1?
пр.низар

Проблема в том, что Android хранит только данные приложений и объекты в /sdcard/sdcard0/Android. Приложения хранятся в скрытой папке, которая называется .android_secureтам, где к ней даже rootнет доступа (я тестировал ее на своем устройстве, вы даже не можете открыть cdэту папку).
GiantTree

На самом деле это именно то, что мне нужно! Основная проблема, заставляющая меня задуматься об этом, - это данные, особенно в тяжелых играх. Основные приложения не такие большие по сравнению с данными, которые они добавляют позже. Так ты думаешь, это может сработать?
пр.низар

Если это только data или obb, то это, безусловно, работает. По крайней мере, в тех версиях Android, которые не sdcard_rwвходят в rootгруппу или вообще не принадлежат пользователю sdcard_rw. Но с небольшими изменениями разрешений вы сможете разобраться с этим.
GiantTree

Бег 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, я считаю, что не могу установить разрешения.
пр.низар

6

В принципе, вы можете! ;)

  • Во-первых, рутируйте свой телефон!
  • Во-вторых, создайте дополнительный раздел на вашей SD-карте (Ext.4)> = 2 ГБ и установите его в качестве основного.
  • В-третьих, скачайте и установите приложение Link2sd из playstore. Откройте приложение, и я попрошу вас создать точку монтирования для вашего второго раздела. Выберите Да. Перезагрузка.

После перезагрузки КАЖДОЕ приложение, которое вы устанавливаете, автоматически перейдет на SD-карту.

Если вы не знаете, как создать раздел для поиска руководства в Google, их много.


Это то, чего я стараюсь избегать: установка стороннего программного обеспечения. :-)
pr.nizar

4

Это было настоящее путешествие в поисках ответа, не связанного с рутированием, но я в итоге:

  1. Разблокировка моего загрузчика

  2. Загрузка по TWRP без его установки:

    fastboot boot recovery.img
    
  3. Установка SuperSU Chainfire с помощью TWRP.

  4. С помощью эмулятора терминала или ADB оболочки «S:

    su
    pm set-install-location 2
    
  5. Из меню приложения Settings > Applicationsпростым нажатием Move to SDCARDперемещает его * - его данные и obb - на внешнюю SDCARD.

  6. Удаление SuperSU ......

Полный рут

Нет ... я этого не делал! 3 :)


0

Перейдите по этому адресу 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 означает sdcard


« Android 5 и выше не поддерживают этот get-install-location » - откуда вы знаете? Попробуйте это: android.googlesource.com/platform/frameworks/base/+/… . Это для Android 5.1.1. У меня есть поддержка этого аргумента в моих Android 5.0.2, 5.1.1 и 6.0.1!
Повелитель огня


-1

Сначала установите Adbd небезопасно ( скачать apk от xda-developers ).

После установки на устройстве откройте его и отметьте поле «Включить небезопасный adbd».

Теперь вы можете изменить местоположение для установки ваших приложений.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.