k001
k001
:...

April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

k001 [userpic]
Android 2.2: adb; install to SD card

Разобрался, почему приложения не хотят ставиться на SD-карточку. Оказалось, что просто пока таких приложений ещё пока нет, но ставить их на карточку всё равно уже можно, только с небольшим вывертом. Перенёс несколько штук из телефона на карту. Расскажу, как.

I. Получение доступа к шеллу от телефона.

Длинный способ -- поставить (на "большой компьютер") и настроить adb. Короткий -- поставить на телефон Terminal Emulator. Описываю оба.

ADB

(0) Поставьте Android SDK.

(1) Пропишите себя в группу plugdev:
sudo /usr/sbin/usermod -a -G plugdev $USER

(2) Пропишите настройки для udev (эти -- для Nexus One):
# cat << EOF > /etc/udev/rules.d/90-android.rules
SUBSYSTEM=="usb|usb_device", SYSFS{idVendor}=="18d1", MODE="0660", GROUP="plugdev"
SUBSYSTEM=="usb|usb_device", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", SYMLINK+="android_adb"
SUBSYSTEM=="usb|usb_device", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", SYMLINK+="android_fastboot"
EOF


(3) Перелогиньтесь и проверьте, что вы в группе plugdev (id | grep plug)

(4) На телефоне поставьте галочку на Settings -> Applications -> Development -> USB debugging

(5) Подключите телефон к компу посредством USB шнурка, смотрите, появился ли нужный девайс (ls -l /dev/andr*)

(6) Запустите adb shell:
adb shell
Если вам выдали доллар -- это шелл от телефона (не рутовый, конечно).

Альтернативный вариант -- поставить на телефон Terminal Emulator, и нижеперечисленные команды делать уже в нём.

II. Инсталляция на SD card.

(1) В шелле телефона пишем:
pm getInstallLocation
в ответ получим
0 [auto]

Это значит, что приложения будут сами выбирать, куда им ставиться. Но таких приложений, у которых в манифесте указано, куда они хотят ставиться, ещё нет. Поэтому в этом режиме "авто" всё будет ставиться в память телефона. Но это можно изменить

(2) В шелле телефона пишем:
pm setInstallLocation 2
Это значит, что хотим непременно на SD card.

(3.1) Теперь можно пойти в Settings -> Applications -> Manage Applications, там ткнуть в любое приложение и нажать на (уже теперь не-серую) кнопочку "Move to SD card". Таким же образом перенести все "толстые" приложения. Не рекомендуется переносить на карточку часто используемые приложения, живые обои и т.п.

(3.2) Также можно пойти и в Маркет, где что-нибудь себе поставить. Ставиться оно будет сразу на SD card.

(4) "И увидел он, что это хорошо". Закончив работы по п. 3, надобно опять пойти в шелл телефона и восстановить там старое значение параметра InstallLocation:
pm setInstallLocation 0

Деньги, как всегда, шлите мне по почте конвертами и бандеролями.

Tags: ,
Comments

О, ништяк. У тебя какой тел? У меня Hero с 1.5
Можно как-то самому проапгрейдить до 2.2 или лучше подождать оф. релиз от HTC, не в курсе?

можно поставить симлинк на СД

Это крайне фиговый способ, о такие костыли можно все ноги себе переломать.

В случае нахождения приложения на SD карте, система должна обрабатывать множество дополнительных ситуаций.
Например что флешка в любой момент может быть извлечена, или подмонтирована к компьютеру, или тупо начнёт глючить. Если система не будет готова к подобным ситуациям - то её надёжность мягко говоря уменьшится.

Вместо Terminal Emulator кошернее использовать ConnectBot, он помимо ssh умеет и локальную консоль.

P.S. можно ли сделать перепост вашей инструкции на форум http://forum.androidfan.ru/ ?
Администратором, которого я являюсь.

У меня есть ConnectBot, но я не знал, что он умеет и локально.

Конечно можно, с указанием авторства и ссылки :)

Вообще это две инструкции, на самом деле. А вики у вас нет?

Указание авторства само собой подразумевается.

Вики - http://wiki.androidfan.ru/