Команда встановити додаток з телефону?


14

Я хотів би SSH у свій телефон, завантажити APK та встановити його віддалено. Чи є в телефоні команда, яка дозволила б мені це зробити?

EG:

wget localhost/file.apk 
android_install file.apk

Потрібно автоматизувати установку, оскільки я просто випадково витер мою SD-карту і все на ній. :(


Відповіді:


12

У емуляторі adb shell або терміналу (і, швидше за все, в SSH) ви можете використовувати pmутиліту для встановлення програм. Команда така:

pm встановіть /sdcard/app1.apk

Нижче перелічені перемикачі pm:

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

Наприклад, ви можете змусити додаток встановлювати безпосередньо у зовнішній сховище (стиль Froyo / Gingerbread.)

PS wgetУтиліта повинна бути доступна через BusyBox на CM7. Якщо ні, ви завжди можете встановити його через Android Market .


Це саме те, що я шукаю. pmіснує в /system/bin/pm, але, на жаль, через SSH (навіть як root) він нічого не робить. Запуск будь-якої pmкоманди не дає результату. Чи є щось, що я роблю неправильно? Це працює в термінальному емуляторі, тільки не над SSH чомусь :(
Naftuli Kay

Я працював на ПМ як корінь adb в CM6; поза цим я не впевнений.
Брам

1
Чи можу я запитати, з якої причини ви віддаєте перевагу SSH над оболонкою ADB?
Чах

1
@Chahk: adbпрацює тільки через кабель USB, чи не так? І SSH може бути по бездротовій мережі. Крім того, sshє скрізь, але adbмає бути встановлений.
imz - Іван Захарящев

Помилка: java.lang.SecurityException: Заборона дозволу: runInstallCreate from pm команда просить запустити як користувач -1, але дзвонить від користувача 11; для цього потрібен android.permission.INTERACT_ACROSS_USERS_FULL

6

Я б запропонував підключити телефон до ПК із встановленим sdk (або принаймні adb) та в режимі налагодження. Після цього напишіть сценарій, який проходить ваші програми та встановлює їх через adb, наприклад adb install x:\path\to\app1.apk.


Немає в телефоні рідної утиліти для цього?
Naftuli Kay

1
Ні, оскільки більшість програм просто копіює свій .apk файл у / data / app. Ви можете спробувати скопіювати всі свої apks туди, а потім перезавантажити (зауважте, що для цього потрібен корінь, але я вважаю, що з тегу cyanogenmod, що ви вкорінені).
onik

Тепер , що це те , що я можу зробити через SSH,cp * /data/app && reboot
Naftuli Кей

1
зауважте, що команда cp недоступна в наявності на Android (тобто не на замовлення ROM), тому якщо ви не використовуєте Cyanogen, можливо, вам доведеться (ab) використовувати catкоманду.
Лі Лі Раян

2
Власне, по телефону є така команда. pm install /sdcard/app1.apkзробить те саме, що adb installі може бути виконано в оболонці adb, емуляторі терміналу і, швидше за все, в SSH. Подивіться на вихід, щоб pmотримати більше варіантів. Існує навіть перемикач, щоб змусити додаток встановлювати безпосередньо на зовнішнє сховище (стиль пряників).
Чах

2

Я використовую той самий метод, і так, SSH - це чудово! Але здається, що коли ви SSH для Android, він отримує іншу оболонку, ніж sh, тому якщо ви поставите sh перед командою, це має спрацювати.

Ось приклад: sh /system/bin/pm install app1.apk

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.