Принудительное перемещение и/или установка приложений на карту памяти без Root'a

Данный топик посвящен пользователям ОС Android а в частности решению насущной проблемы с нехваткой внутренней памяти устройства.
А самое главное что действия описанные в статье не требуют получения Root прав, что является отпугивающим фактором для большинства рядовых пользователей, так как рутованный Андроид лишается гарантии и получения официальных обновлений. Всех кто заинтригован прошу под кат.

Наверное всем пользователям гуглоосиAndroid известна проблема когда в статус баре появляется уведомление информирующее Вас о исчерпании внутренней памяти устройства и предлагает либо удалить временные файлы приложений либо удалить сами приложения. А если у вас Android версии 2.2 и выше то предлагает переместить приложения на карту. Но вот беда, приложения то перемещаются не все, а лишь те, авторы которых благословили их на это. Что же делать спросите вы, если все приложения нужны, память исчерпана а авторы не сделали возможность перемещения на карту? Об этом расскажу далее.

Шаг первый

Установка HTC Sync. Всю можно не ставить, достаточно только ее компонента HTC Driver Installer.

Шаг второй

Установка Android SDK. Инсталлятор берем Тут и устанавливаем в корень системного диска например: C:\android-sdk-windows.

Далее создаем новую системную переменную. Для этого идем в Мой компьютер-Свойства-Дополнительные параметры системы, нажимаем переменные среды, и создаем новую системную переменную. Имя переменной: adb значение переменной: C:\android-sdk-windows\tools.

Затем запускаем SDK Manager из папки Android-sdk-windows. Программа проверит наличие нужных компонентов и предложит установить недостающие, на это смело отвечайте отказом. Если выдает ошибку то заходим в Tools и ставим две галочки в Misc. На этом подготовка софта закончена, переходим к самому интересному.

Шаг третий

Активация кнопки «Переместить на SD-карту». Подключаем телефон кабелем к ПК и выбираем режим синхронизации. На ПК запускаем командную строку и в ней набираем: C:\android-sdk-windows\platform-tools\adb shell нажимем enter, должен появиться значок $.

Далее набираем следующее: pm setInstallLocation 2 (Регистр важен!). В ответ должна появиться строчка Pm set InstallLocation 2 и символ $.

После этого отключаем аппарат от ПК и перезагружаем его. После перезагрузки заходим в настройки-приложения-управление приложениями, выбрать приложение и убедиться что кнопка Переместить на SD-карту стала активной. Теперь по умолчанию все приложения будут ставиться на карту. Но не забываем что при подключении телефона к ПК в режиме «Дисковый накопитель» карта размонтируется и приложения находящиеся на ней приостановятся. Так что приложения которые висят в фоне (Виджеты, живые обои, мессенджеры) рекомендуется после установки переместить в телефон.

И еще: на всякий случай атрибуты команды pm SetInstallLocation:
pm setInstallLocation 0 — автовыбор места установки приложений.
pm setInstallLocation 1 — установка во внутреннюю память («в телефон»)
pm setInstallLocation 2 — установка во внешнюю память («на карту»)

На этом все, удачных перемещений и спасибо за внимание.
Поделиться публикацией
Комментарии 43
    0
    Спасибо, опробую сегодня на своем isc4. Хотя в наш век хочется иметь более простой тумблер для переключения.
      +4
      А это относится ко всем аппаратам? Или только к HTC?
        +1
        К сожалению проверить на других аппаратах кроме HTC возможности нет, но Вы ничего не потеряете если попробуете )
          +1
          Телефон LGP500:
          Установил драйвер
          Установил JDK и Android SDK
          Подключил телефон в режиме Debugging
          Выполнил необходимые команды (только у меня в приглашении ком.строки был символ $. Не знаю, о чем это говорит)

          Результат: Не работает :(
            0
            Ну, всмысле, не активировалась кнопка Move to SD
              0
              Скажите, а кнопка заработала?
              0
              А ребутнули?
            +2
            Это фишка самого Android, начиная с Fryo.
            +5
            А кто-нибудь знает, как выпилить навсегда из памяти HTC стандартные приложения типа Facebook, Карты, GMail, Google Talk, которыми никогда не пользуешься?
            • НЛО прилетело и опубликовало эту надпись здесь
                +1
                Забыл дописать… чтобы без рута :)
                  +1
                  Без рута увы
                    0
                    ну а вот если их описанным способом переместить на карту, а потом с карты просто удалить физически?
                      +1
                      Это не распространяется на встроенные приложения.их удалять только с рутом
                  0
                  На HTC такая фишка не пройдет, перво наперво нужно сделать S-OFF, так как папка system по умолчанию в режиме ro.
                  +1
                  GTalk удалить не получится, ибо не будет работать маркет тогда.
                    +1
                    Если сервис — да. Если удалить только IM, Маркет продолжит работать без проблем. Говорю как человек, удаляющий часть системных приложений сразу после получения доступа.
                      0
                      Да, вы правы. Лишь без GTalkService не будет работать.
                    –1
                    Без рута никак.
                    В Андройд 4 появилась возможность их индивидуально отключить (disable), что убирает все их ярлыки и в списке программ сортирует в конец с припиской «отключено».

                    Подробно тут.
                    0
                    Это возможность года 2 назад уже была (точнее с выходом android 2.2 и выше).
                      +2
                      С выходом android 2.2 и выше появилась возможность перемещать стандартными средствами на карту но при условии что эту возможность разработчики перемещаемого приложения допускают. Об этом я упоминал в статье. А мой способ позволяет перемещать все кроме служебных, независимо от того разрешили разработчики или нет
                      +5
                      А мой способ позволяет перемещать все кроме служебных
                      Извините, Ваш? Достаточно сформулировать нужный запрос и результат получится выше ожидаемого.
                        0
                        Сработало только как pm setInstallLocation 2
                        При pm SetInstallLocation 2 выводило ошибку, в которой и было правильное написание…
                        (wildfaer s если это имеет значение)
                          +1
                          Спасибо за замечание, поправил
                          +1
                          Пара замечаний: во-первых, способ работает не только для аппаратов HTC. Поэтому на первом шаге надо ставить драйвер правильного производителя (не думаю, что мой LG будет работать через ваш драйвер).

                          Во-вторых, у этого способа есть забавный глюк (по крайней мере, в андроиде 2.2.2), о котором, наверное, стоит знать.

                          Берем приложение с виджетами. Устанавливаем без вашего твика — в память аппарата. Виджеты работают. Переносим штатными средствами на карту (если разработчик не запретил перенос) — виджеты перестают работать (пропадают из списка доступных виджетов). Пока все нормально — так и было задумано, чтобы виджеты нельзя было запускать с карты, иначе они упадут, если ее отмонтировать.

                          Теперь ставим InstallLocation в 2. Устанавливаем то же самое приложение на карту — виджеты работают. Но падают, если карту убрать. Пытаемся перенести приложение во внутреннюю память — виджеты пропадают из списка доступных.

                          Судя по всему, это глюк ОС, которая вместо простой проверки карта-или-память начинает вычислять что-то сложное из прописанного в манифесте места установки, реального места установки (перемещалось приложение вручную или нет) и т.п. Но глюк временами неприятный. Я в своем аппарате постоянно держу InstallLocation=2, поскольку памяти там мало. Но иногда приходится переключаться назад в 0 или 1, чтобы установить какое-нибудь приложение, иначе начинаются глюки.
                            –1
                            а если как-то вернуть состояние перед командой «InstallLocation 2»? Что означает 2?
                              0
                              В статье же сказано: ноль — использовать место по выбору системы (обычно внутренняя память). 1 — ставить во внутреннюю память. 2 — на карточку. Все это работает только если автор программы не указал явно, куда ее надо ставить. Переключать этот параметр можно сколько угодно — мне так и приходится делать. Программы без виджетов ставлю с двойкой, с виджетами — с нулем.
                              –1
                              Это не глюк ОС, это нормальное поведение ОС. Виджиты не работают при перемещении приложения на карту памяти, вне зависимости от того разрешил или запретил перенос разработчик.
                                +1
                                Если вы внимательно перечитаете то, что я написал, то поймете, что виджеты не работают при переносе на карту только если InstallLocation равно 0 или 1. Если его выставить в 2 (установка по умолчанию на карту), то работать они будут именно с карты, а из внутренней памяти — нет. На мой взгляд, это именно баг. Возможно, в более новых версиях его исправили.
                                  –1
                                  Наверное баг, потому что в 2.2, 2.3 и 2.3.4 (сборки cyanogenmod) такого точно не было.
                                    +1
                                    Не знаю, как в циане, а в родной прошивке LG с версией 2.2.2 это присутствует. Такое ощущение, что вы из моего комментария прочитали всего пару слов.
                                0
                                Вот из официального описания:

                                App Widgets
                                Your App Widget will be removed from the home screen. When external storage is remounted, your App Widget will not be available for the user to select until the system resets the home application (usually not until a system reboot).

                                По этой причине, виджеты, сервисы, живые обои, име и тд, не могут быть перенесены на внешнюю карту.
                                  0
                                  Еще один писатель-не-читатель. :) Если InslallLocation равен 2, то карта и внутренняя память меняются местами. Приложение устанавливается на внешнюю карту и система рарешает использовать виджеты прямо с нее. Но если вы потом перенесете приложение во внутреннюю память, андроид больше не разрешит вам пользоваться этими виджетами.
                                0
                                Это очень плохой способ. Приложения, которые не рассчитаны на перенос будут сильно глючить. А потом ещё народ возмущается, вот всё тормозит и глючит.

                                Получить рут права занимает примерно столько же времени, сколько танцы с бубнами, которые тут описаны. После этого можно создать раздел на карте памяти и перенести туда уже все программы и больше не напрягаться с местом вообще.

                                Естественно это актуально для андроид < 4.0.
                                  0
                                  Да, с рутом легче, но как я уже говорил любой рутованый аппарат лишается гарантии и возможности получения официальных обновлений.
                                  P.S. У меня HTC Explorer ни в одном из перемещенных приложений глюков или нестабильной работы не заметил

                                    0
                                    Возможности получения официальных обновлений не лишается, если прошивку не обновляли, а рут был получен с помощью локального эксплоита.
                                  0
                                  Кстати, это не какая то секретная информация, об это было написано на сайте гугла 2 года назад:
                                  android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html
                                    0
                                    Маленький howto для Linux (драйвера от HTC — ненужны):
                                    1. включаем режим отладки
                                    2. находим в SDK такой путь android-sdks/platform-tools/
                                    3. заходим в шелл

                                    ./adb shell
                                    $ pm setInstallLocation 2
                                    $
                                      0
                                      У мен Samsung Galaxy Ace. Большая часть программ и так ставится на карту. Если вдруг поставил в телефон — то можно переместить на карту. Но некоторые программы не перемещаемые. Кроме стандартных программ типа гмейла, есть еще программы, которые ставятся в телефон и не хотят перемещаться, ну например instagram. Этот способ поможет?
                                        0
                                        В шаге третьем при запуске шелла командная строка выдает error:device not found.
                                        Все описанные условия были соблюдены. В чем может быть дело?
                                          0
                                          Избавил себя от необходимости устанавливать SDK и HTC Sync, установив на аппарат эмулятор терминала и в нем набрав следующее:
                                          su bash
                                          Тут телефон запросил у меня права суперюзера. Я ответил согласием
                                          pm setInstallLocation 2
                                          Затем подождал 5 секунд, нажал кнопку понижения громкости и «C» на клавиатуре телефона. После этого набрал
                                          pm getInstallLocation
                                          Получил ответ, что значение равняется двум. Обрадовался, закрыл эмулятор терминала, устанавливаю приложения на карточку(:
                                          Аппарат — WildFire S с родной прошивкой
                                            0
                                            1. На телефоне должна стоять галочка «Настройки» — «Для разработчиков» — «Отладка по USB»

                                            2. Если adb shell выдаёт «device not found», возможно, достаточно будет просто перезагрузить компьютер: у меня, например, на ZTE V790 для устройства ZTE Composite ADB Interface установились драйвера, но заработало оно только после перезагрузки компьютера. Список устройств, которые видит adb, можно посмотреть командой adb devices.

                                            3. В версии SDK 20130522 уже не «pm setInstallLocation 2», а «pm set-install-location 2».
                                              0
                                              root@j3x3g:/ # pm set-install-location 2
                                              root@j3x3g:/ # pm get-install-location
                                              2[external]
                                              root@j3x3g:/ # reboot

                                              Samsung SM-J320H — не слушается — устанавливает в телефон :(

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

                                              Самое читаемое