Комментарии 43
Спасибо, опробую сегодня на своем isc4. Хотя в наш век хочется иметь более простой тумблер для переключения.
А это относится ко всем аппаратам? Или только к HTC?
К сожалению проверить на других аппаратах кроме HTC возможности нет, но Вы ничего не потеряете если попробуете )
Это фишка самого Android, начиная с Fryo.
А кто-нибудь знает, как выпилить навсегда из памяти HTC стандартные приложения типа Facebook, Карты, GMail, Google Talk, которыми никогда не пользуешься?
Это возможность года 2 назад уже была (точнее с выходом android 2.2 и выше).
С выходом android 2.2 и выше появилась возможность перемещать стандартными средствами на карту но при условии что эту возможность разработчики перемещаемого приложения допускают. Об этом я упоминал в статье. А мой способ позволяет перемещать все кроме служебных, независимо от того разрешили разработчики или нет
Сработало только как pm setInstallLocation 2
При pm SetInstallLocation 2 выводило ошибку, в которой и было правильное написание…
(wildfaer s если это имеет значение)
При pm SetInstallLocation 2 выводило ошибку, в которой и было правильное написание…
(wildfaer s если это имеет значение)
Пара замечаний: во-первых, способ работает не только для аппаратов HTC. Поэтому на первом шаге надо ставить драйвер правильного производителя (не думаю, что мой LG будет работать через ваш драйвер).
Во-вторых, у этого способа есть забавный глюк (по крайней мере, в андроиде 2.2.2), о котором, наверное, стоит знать.
Берем приложение с виджетами. Устанавливаем без вашего твика — в память аппарата. Виджеты работают. Переносим штатными средствами на карту (если разработчик не запретил перенос) — виджеты перестают работать (пропадают из списка доступных виджетов). Пока все нормально — так и было задумано, чтобы виджеты нельзя было запускать с карты, иначе они упадут, если ее отмонтировать.
Теперь ставим InstallLocation в 2. Устанавливаем то же самое приложение на карту — виджеты работают. Но падают, если карту убрать. Пытаемся перенести приложение во внутреннюю память — виджеты пропадают из списка доступных.
Судя по всему, это глюк ОС, которая вместо простой проверки карта-или-память начинает вычислять что-то сложное из прописанного в манифесте места установки, реального места установки (перемещалось приложение вручную или нет) и т.п. Но глюк временами неприятный. Я в своем аппарате постоянно держу InstallLocation=2, поскольку памяти там мало. Но иногда приходится переключаться назад в 0 или 1, чтобы установить какое-нибудь приложение, иначе начинаются глюки.
Во-вторых, у этого способа есть забавный глюк (по крайней мере, в андроиде 2.2.2), о котором, наверное, стоит знать.
Берем приложение с виджетами. Устанавливаем без вашего твика — в память аппарата. Виджеты работают. Переносим штатными средствами на карту (если разработчик не запретил перенос) — виджеты перестают работать (пропадают из списка доступных виджетов). Пока все нормально — так и было задумано, чтобы виджеты нельзя было запускать с карты, иначе они упадут, если ее отмонтировать.
Теперь ставим InstallLocation в 2. Устанавливаем то же самое приложение на карту — виджеты работают. Но падают, если карту убрать. Пытаемся перенести приложение во внутреннюю память — виджеты пропадают из списка доступных.
Судя по всему, это глюк ОС, которая вместо простой проверки карта-или-память начинает вычислять что-то сложное из прописанного в манифесте места установки, реального места установки (перемещалось приложение вручную или нет) и т.п. Но глюк временами неприятный. Я в своем аппарате постоянно держу InstallLocation=2, поскольку памяти там мало. Но иногда приходится переключаться назад в 0 или 1, чтобы установить какое-нибудь приложение, иначе начинаются глюки.
а если как-то вернуть состояние перед командой «InstallLocation 2»? Что означает 2?
В статье же сказано: ноль — использовать место по выбору системы (обычно внутренняя память). 1 — ставить во внутреннюю память. 2 — на карточку. Все это работает только если автор программы не указал явно, куда ее надо ставить. Переключать этот параметр можно сколько угодно — мне так и приходится делать. Программы без виджетов ставлю с двойкой, с виджетами — с нулем.
Это не глюк ОС, это нормальное поведение ОС. Виджиты не работают при перемещении приложения на карту памяти, вне зависимости от того разрешил или запретил перенос разработчик.
Если вы внимательно перечитаете то, что я написал, то поймете, что виджеты не работают при переносе на карту только если InstallLocation равно 0 или 1. Если его выставить в 2 (установка по умолчанию на карту), то работать они будут именно с карты, а из внутренней памяти — нет. На мой взгляд, это именно баг. Возможно, в более новых версиях его исправили.
Вот из официального описания:
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).
По этой причине, виджеты, сервисы, живые обои, име и тд, не могут быть перенесены на внешнюю карту.
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).
По этой причине, виджеты, сервисы, живые обои, име и тд, не могут быть перенесены на внешнюю карту.
Еще один писатель-не-читатель. :) Если InslallLocation равен 2, то карта и внутренняя память меняются местами. Приложение устанавливается на внешнюю карту и система рарешает использовать виджеты прямо с нее. Но если вы потом перенесете приложение во внутреннюю память, андроид больше не разрешит вам пользоваться этими виджетами.
Это очень плохой способ. Приложения, которые не рассчитаны на перенос будут сильно глючить. А потом ещё народ возмущается, вот всё тормозит и глючит.
Получить рут права занимает примерно столько же времени, сколько танцы с бубнами, которые тут описаны. После этого можно создать раздел на карте памяти и перенести туда уже все программы и больше не напрягаться с местом вообще.
Естественно это актуально для андроид < 4.0.
Получить рут права занимает примерно столько же времени, сколько танцы с бубнами, которые тут описаны. После этого можно создать раздел на карте памяти и перенести туда уже все программы и больше не напрягаться с местом вообще.
Естественно это актуально для андроид < 4.0.
Да, с рутом легче, но как я уже говорил любой рутованый аппарат лишается гарантии и возможности получения официальных обновлений.
P.S. У меня HTC Explorer ни в одном из перемещенных приложений глюков или нестабильной работы не заметил
P.S. У меня HTC Explorer ни в одном из перемещенных приложений глюков или нестабильной работы не заметил
Кстати, это не какая то секретная информация, об это было написано на сайте гугла 2 года назад:
android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html
android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html
Маленький howto для Linux (драйвера от HTC — ненужны):
1. включаем режим отладки
2. находим в SDK такой путь android-sdks/platform-tools/
3. заходим в шелл
./adb shell
$ pm setInstallLocation 2
$
1. включаем режим отладки
2. находим в SDK такой путь android-sdks/platform-tools/
3. заходим в шелл
./adb shell
$ pm setInstallLocation 2
$
У мен Samsung Galaxy Ace. Большая часть программ и так ставится на карту. Если вдруг поставил в телефон — то можно переместить на карту. Но некоторые программы не перемещаемые. Кроме стандартных программ типа гмейла, есть еще программы, которые ставятся в телефон и не хотят перемещаться, ну например instagram. Этот способ поможет?
В шаге третьем при запуске шелла командная строка выдает error:device not found.
Все описанные условия были соблюдены. В чем может быть дело?
Все описанные условия были соблюдены. В чем может быть дело?
Избавил себя от необходимости устанавливать SDK и HTC Sync, установив на аппарат эмулятор терминала и в нем набрав следующее:
Тут телефон запросил у меня права суперюзера. Я ответил согласием
Затем подождал 5 секунд, нажал кнопку понижения громкости и «C» на клавиатуре телефона. После этого набрал
Получил ответ, что значение равняется двум. Обрадовался, закрыл эмулятор терминала, устанавливаю приложения на карточку(:
Аппарат — WildFire S с родной прошивкой
su bash
Тут телефон запросил у меня права суперюзера. Я ответил согласием
pm setInstallLocation 2
Затем подождал 5 секунд, нажал кнопку понижения громкости и «C» на клавиатуре телефона. После этого набрал
pm getInstallLocation
Получил ответ, что значение равняется двум. Обрадовался, закрыл эмулятор терминала, устанавливаю приложения на карточку(:
Аппарат — WildFire S с родной прошивкой
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».
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».
root@j3x3g:/ # pm set-install-location 2
root@j3x3g:/ # pm get-install-location
2[external]
root@j3x3g:/ # reboot
Samsung SM-J320H — не слушается — устанавливает в телефон :(
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Принудительное перемещение и/или установка приложений на карту памяти без Root'a