Команда для установки приложения с телефона?

14

Я хотел бы подключить SSH к своему телефону, скачать APK и установить его удаленно. Есть ли на телефоне команда, которая позволила бы мне это сделать?

НАПРИМЕР:

wget localhost/file.apk 
android_install file.apk

Нужно автоматизировать установку, так как я просто случайно вытер свою SD-карту и все на ней. :(

Нафтули Кей
источник
1
stackoverflow.com/questions/7076240/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

12

В оболочке adb или эмуляторе терминала (и, скорее всего, через SSH) вы можете использовать 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 .

Chahk
источник
Это именно то, что я ищу. pmсуществует /system/bin/pm, но, к сожалению, по SSH (даже с правами root) ничего не делает. Выполнение любой pmкоманды не приводит к выводу. Я что-то не так делаю? Он работает в эмуляторе терминала, но не по SSH по какой-то причине :(
Naftuli Kay
У меня была PM работа как root от adb в CM6; за этим я не уверен.
Broam
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.

Оник
источник
На телефоне нет родной утилиты для этого?
Нафтули Кей
1
Нет, так как большинство приложений просто копируют свой файл .apk в / data / app. Вы можете попытаться скопировать все ваши apks и перезагрузить компьютер (обратите внимание, что для этого нужен root, но я полагаю, что из тега cyanogenmod у вас есть root).
Оник
Теперь это то, что я могу сделать по SSH,cp * /data/app && reboot
Нафтули Кей
1
обратите внимание, что команда cp недоступна в стандартной версии Android (то есть нестандартного ПЗУ), поэтому, если вы не используете Cyanogen, вам может понадобиться (ab) использовать catкоманду.
Ли Райан
2
Собственно, на телефоне есть такая команда. pm install /sdcard/app1.apkбудет выполнять то же самое, что adb installи может быть выполнено в оболочке adb, эмуляторе терминала и, скорее всего, через SSH. Посмотрите на вывод pmдля дополнительных опций. Существует даже переключатель, чтобы принудительно установить приложение непосредственно на внешнее хранилище (стиль Gingerbread).
Чахк
2

Я использую тот же метод, и да, SSH это здорово! Но кажется, что когда вы подключаетесь к Android по SSH, он получает оболочку, отличную от sh, поэтому, если вы поставите sh перед командой, она должна работать.

Вот пример: sh /system/bin/pm install app1.apk

mehellra
источник