21 марта 2012

Пакетированный пингвин.



Продолжаем глумиться над Андроидом.
На этот раз будем ставить приложения так, как нам нужно, а не так, как это задумал производитель телефона или автор прошивки.
То, что Android - это маленький Линукс, уже выяснили. Как и во всех больших пингвинах у Android есть пакетный менеджер, не такой крутой, но кое-что умеет. Для apk-пакетов справедливо утверждение "всё своё ношу с собой", т.е. все необходимые программы и библиотеки как правило находятся внутри пакета. Такого понятия, как зависимости, является для Android чисто условным.
Перейдем к рассматрению самого пакетного менеджера.
При запуске программы без параметров она выдыает много интересной информации о своём использовании:
usage: pm [list|path|install|uninstall]
pm list packages [-f] [-d] [-e] [-u] [FILTER]
pm list permission-groups
pm list permissions [-g] [-f] [-d] [-u] [GROUP]
pm list instrumentation [-f] [TARGET-PACKAGE]
pm list features
pm list libraries
pm path PACKAGE
pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
pm uninstall [-k] PACKAGE
pm clear PACKAGE
pm enable PACKAGE_OR_COMPONENT
pm disable PACKAGE_OR_COMPONENT
pm setInstallLocation [0/auto] [1/internal] [2/external]

The list packages command prints all packages, optionally only
those whose package name contains the text in FILTER. Options:
-f: see their associated file.
-d: filter to include disbled packages.
-e: filter to include enabled packages.
-u: also include uninstalled packages.

The list permission-groups command prints all known
permission groups.

The list permissions command prints all known
permissions, optionally only those in GROUP. Options:
-g: organize by group.
-f: print all information.
-s: short summary.
-d: only list dangerous permissions.
-u: list only the permissions users will see.

The list instrumentation command prints all instrumentations,
or only those that target a specified package. Options:
-f: see their associated file.

The list features command prints all features of the system.

The path command prints the path to the .apk of a package.

The install command installs a package to the system. Options:
-l: install the package with FORWARD_LOCK.
-r: reinstall an exisiting app, keeping its data.
-t: allow test .apks to be installed.
-i: specify the installer package name.
-s: install package on sdcard.
-f: install package on internal flash.

The uninstall command removes a package from the system. Options:
-k: keep the data and cache directories around.
after the package removal.

The clear command deletes all data associated with a package.

The enable and disable commands change the enabled state of
a given package or component (written as "package/class").

The getInstallLocation command gets the current install location
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media

The setInstallLocation command changes the default install location
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media
Прежде всего он умеет устанавливать пакеты. Для этого используется команда:
pm install file.apk
Но просто так устанавливать пакеты из без таких выкрутасов можно. Для задания параметров установки к команде добавим ключи.
pm install -s file.apk
Эта команда установит указанный пакет сразу на SD-карту.
pm install -f file.apk
Эта команда установит указанный пакет в память телефона.
pm install -r file.apk
Эта команда переустановит указанный пакет без удаления настроек и параметров приложения.

Пакет можно удалить из системы командой:
pm uninstall PACKAGE
А если добавить ключ "-k", то все данные и настройки программы сохранятся в системе.

Так же менеджер умеет выводить список все установленного в системе добра, для этого его надо запустить так:
pm list packages
Для получения прочей информации эту команду можно снабдить дополнительными ключами.
-f - показать кроме названия пакета полный пусть файла, в котором он содержится.
-u - покажет еще удаленные пакеты. (Честно, я не понял, что это значит.)
-d - показать только отключенные (замороженные) пакеты.
-e - показать только активные пакеты. По смыслу противоположен предыдущему.
Кроме этого можно указать строку-фильтр, чтобы вывести только подходящие под нее пакеты.

С помощью пакетного менеджера можно настроить поведение системы при установке пакета обычным способом. Для этого можно использовать слудующую команду:
pm setInstallLocation location
Вместо "location" надо поставить одно из трех значений:
0 - система решает сама, куда ставить пакет.
1 - всегда устанавливать пакеты во внутреннюю память.
2 - всегда устанавливать пакеты на SD-карту.

Посмотреть действующие настройки можно такой командой:
pm getInstallLocation location

Назначение остальных параметров вполне понятно из их перевода.

С заморозкой и разморозкой приложений предлагаю разобраться самостоятельно, там тоже ничего сложного.