Перемещение места установки на нерутируемое устройство 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.