Comando para instalar la aplicación desde el teléfono?

14

Me gustaría usar SSH en mi teléfono, descargar un APK e instalarlo de forma remota. ¿Hay un comando disponible en el teléfono que me permita hacer esto?

P.EJ:

wget localhost/file.apk 
android_install file.apk

Necesito automatizar una instalación, ya que accidentalmente limpié mi tarjeta SD y todo lo que contiene. :(

Naftuli Kay
fuente
1
stackoverflow.com/questions/7076240/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

12

En adb shell o emulador de terminal (y muy probablemente a través de SSH) puede usar la pmutilidad para instalar aplicaciones. El comando es:

pm instalar /sdcard/app1.apk

Los siguientes son los interruptores de 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

Por ejemplo, puede forzar la instalación de la aplicación directamente en el almacenamiento externo (estilo Froyo / Gingerbread).

PD La wgetutilidad debería estar disponible a través de BusyBox en CM7. Si no, siempre puede instalarlo a través de Android Market .

Chahk
fuente
Esto es exactamente lo que estoy buscando. pmexiste en /system/bin/pm, pero desafortunadamente sobre SSH (incluso como root) no hace nada. Ejecutar cualquier pmcomando no produce salida. ¿Hay algo que estoy haciendo mal? Funciona en el emulador de terminal, pero no sobre SSH por alguna razón :(
Naftuli Kay
He tenido trabajo PM como root desde adb en CM6; más allá de eso no estoy seguro.
Broam
1
¿Puedo preguntar cuál es la razón por la que prefiere SSH sobre ADB shell?
Chahk
1
@ Chak: adbsolo funciona a través del cable USB, ¿no? Y SSH puede ser a través de una red inalámbrica. Además, sshestá en todas partes, pero adbdebe instalarse.
imz - Ivan Zakharyaschev
Error: java.lang.SecurityException: denegación de permisos: el comando runInstallCreate from pm solicita ejecutarse como usuario -1 pero llama desde el usuario 11; esto requiere android.permission.INTERACT_ACROSS_USERS_FULL
6

Le sugiero que conecte su teléfono a una PC con el sdk (o al menos adb) instalado y en modo de depuración. Después de esto, escriba un script que recorra sus aplicaciones y las instale a través de adb, por ejemplo adb install x:\path\to\app1.apk.

onik
fuente
¿No hay una utilidad nativa en el teléfono para hacer esto?
Naftuli Kay
1
No, dado que la mayoría de las aplicaciones simplemente copian su archivo .apk a / data / app. Podría intentar copiar todas sus aplicaciones allí y luego reiniciar (tenga en cuenta que esto necesita root, pero supongo que, desde la etiqueta cyanogenmod, está rooteado).
onik
Ahora que es algo que puedo hacer sobre SSH,cp * /data/app && reboot
Naftuli Kay
1
tenga en cuenta que el comando cp no está disponible en Android (es decir, ROM no personalizada), por lo que si no está utilizando Cyanogen, es posible que necesite (ab) usar el catcomando.
Lie Ryan
2
En realidad, en el teléfono hay tal comando. pm install /sdcard/app1.apkhará lo mismo adb instally se puede ejecutar en adb shell, emulador de terminal y muy probablemente a través de SSH. Echa un vistazo a la salida de pmpara más opciones. Incluso hay un interruptor para forzar a la aplicación a instalarse directamente en el almacenamiento externo (estilo Gingerbread).
Chahk
2

Estoy usando el mismo método y sí, ¡SSH es genial! Pero parece que cuando usas SSH para Android obtiene un shell diferente de sh, por lo que si pones sh delante del comando, debería funcionar.

Aquí hay un ejemplo: sh /system/bin/pm install app1.apk

mehellra
fuente