Commande pour installer l'application à partir du téléphone?

14

Je voudrais SSH sur mon téléphone, télécharger un APK et l'installer à distance. Y a-t-il une commande disponible sur le téléphone qui me permettrait de faire cela?

PAR EXEMPLE:

wget localhost/file.apk 
android_install file.apk

Besoin d'automatiser une installation, car je viens d'essuyer accidentellement ma carte SD et tout ce qui s'y trouve. :(

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

Réponses:

12

Dans l'adb shell ou l'émulateur de terminal (et très probablement via SSH), vous pouvez utiliser l' pmutilitaire pour installer des applications. La commande est:

pm installer /sdcard/app1.apk

Voici les commutateurs 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

Par exemple, vous pouvez forcer l'application à installer directement sur le stockage externe (style Froyo / Gingerbread.)

PS L' wgetutilitaire devrait être disponible via BusyBox sur CM7. Sinon, vous pouvez toujours l'installer via Android Market .

Chahk
la source
C'est exactement ce que je recherche. pmexiste à /system/bin/pm, mais malheureusement sur SSH (même en tant que root), il ne fait rien. L'exécution d'une pmcommande ne produit aucune sortie. Y a-t-il quelque chose que je fais mal? Il fonctionne dans l'émulateur de terminal, mais pas via SSH pour une raison quelconque :(
Naftuli Kay
J'ai fait travailler PM en tant que root depuis adb dans CM6; au-delà, je ne suis pas sûr.
Broam
1
Puis-je vous demander pour quelle raison vous préférez SSH au shell ADB?
Chahk
1
@Chahk: adbne fonctionne que via le câble USB, n'est-ce pas? Et SSH peut être sur un réseau sans fil. Aussi, sshest-il partout, mais adbdoit être installé.
imz - Ivan Zakharyaschev
Erreur: java.lang.SecurityException: refus d'autorisation: la commande runInstallCreate from pm demande à s'exécuter en tant qu'utilisateur -1 mais appelle depuis l'utilisateur 11; cela nécessite android.permission.INTERACT_ACROSS_USERS_FULL
6

Je vous suggère de brancher votre téléphone sur un PC avec le sdk (ou au moins adb) installé et en mode débogage. Après cela, écrivez un script qui passe par vos applications et les installe via adb, par exemple adb install x:\path\to\app1.apk.

onik
la source
Il n'y a pas d'utilitaire natif sur le téléphone pour le faire?
Naftuli Kay
1
Non, car la plupart des applications copient simplement leur fichier .apk dans / data / app. Vous pouvez essayer de copier toutes vos apks là-bas puis de redémarrer (notez que cela a besoin de root, mais je suppose à partir de la balise cyanogenmod que vous êtes enraciné).
1er
Maintenant, c'est quelque chose que je peux faire sur SSH,cp * /data/app && reboot
Naftuli Kay
1
notez que la commande cp n'est pas disponible en stock Android (c'est-à-dire ROM non personnalisée), donc si vous n'utilisez pas Cyanogen, vous devrez peut-être (ab) utiliser la catcommande.
Lie Ryan
2
En fait, au téléphone, il y a une telle commande. pm install /sdcard/app1.apkfera la même chose adb installet peut être exécuté dans le shell adb, l'émulateur de terminal et très probablement sur SSH. Jetez un oeil à la sortie de pmpour plus d'options. Il y a même un interrupteur pour forcer l'application à installer directement sur le stockage externe (style Gingerbread).
Chahk
2

J'utilise la même méthode et oui SSH est super! Mais il semble que lorsque vous SSH vers Android, il obtient un shell différent de sh, donc si vous mettez sh devant la commande, cela devrait fonctionner.

Voici un exemple: sh /system/bin/pm install app1.apk

mehellra
la source