Comando para instalar o aplicativo do telefone?

14

Gostaria de fazer o SSH no meu telefone, baixar um APK e instalá-lo remotamente. Existe um comando disponível no telefone que me permita fazer isso?

POR EXEMPLO:

wget localhost/file.apk 
android_install file.apk

Preciso automatizar uma instalação, pois limpei acidentalmente meu cartão SD e tudo mais. :(

Naftuli Kay
fonte

Respostas:

12

No shell adb ou emulador de terminal (e provavelmente através do SSH), você pode usar o pmutilitário para instalar aplicativos. O comando é:

pm install /sdcard/app1.apk

A seguir estão as opções 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 exemplo, você pode forçar o aplicativo a instalar diretamente no armazenamento externo (estilo Froyo / Gingerbread).

PS O wgetutilitário deve estar disponível via BusyBox no CM7. Caso contrário, você sempre pode instalá-lo via Android Market .

Chahk
fonte
É exatamente isso que estou procurando. pmexiste em /system/bin/pm, mas infelizmente por SSH (mesmo como root) ele não faz nada. A execução de qualquer pmcomando não produz saída. Existe algo que estou fazendo errado? Ele funciona no emulador de terminal, mas não sobre o SSH, por algum motivo :(
Naftuli Kay
Eu tive o PM trabalhando como raiz do adb no CM6; além disso, não tenho certeza.
Broam 01/09/11
1
Posso perguntar qual é o motivo pelo qual você prefere o SSH sobre o shell ADB?
Chahk 01/09/11
1
@ Chahk: adbsó funciona através do cabo USB, não é? E o SSH pode estar em uma rede sem fio. Além disso, sshexiste em todo lugar, mas adbprecisa ser instalado.
imz - Ivan Zakharyaschev 26/08
Erro: java.lang.SecurityException: negação de permissão: comando runInstallCreate from pm pede para executar como usuário -1, mas está chamando do usuário 11; isso requer android.permission.INTERACT_ACROSS_USERS_FULL
6

Eu sugiro que você conecte seu telefone a um PC com o sdk (ou pelo menos adb) instalado e no modo de depuração. Depois disso, escreva um script que analise seus aplicativos e os instale via adb, por exemplo adb install x:\path\to\app1.apk.

onik
fonte
Não há utilitário nativo no telefone para fazer isso?
Naftuli Kay
1
Não, já que a maioria dos aplicativos apenas copia seu arquivo .apk para / data / app. Você pode tentar copiar todos os seus aplicativos lá e, em seguida, reiniciar (observe que isso precisa de raiz, mas eu assumo a partir da tag cyanogenmod que você está rooteado).
Onik
Agora que é algo que eu possa fazer por SSH,cp * /data/app && reboot
Naftuli Kay
1
observe que o comando cp não está disponível no Android (ou seja, ROM não personalizada), portanto, se você não estiver usando o Cyanogen, poderá ser necessário (ab) usar o catcomando
Lie Ryan
2
Na verdade, no telefone, existe esse comando. pm install /sdcard/app1.apkfará o mesmo adb installe poderá ser executado no shell adb, emulador de terminal e, provavelmente, no SSH. Dê uma olhada na saída de pmpara mais opções. Existe até uma opção para forçar o aplicativo a instalar diretamente no armazenamento externo (estilo Gingerbread).
Chahk 01/09/11
2

Estou usando o mesmo método e sim SSH é ótimo! Mas parece que quando você SSH para Android obtém um shell diferente do sh, portanto, se você colocar o sh na frente do comando, ele deverá funcionar.

Aqui está um exemplo: sh /system/bin/pm install app1.apk

mehellra
fonte