Comando per installare l'app dal telefono?


14

Vorrei SSH sul mio telefono, scaricare un APK e installarlo da remoto. C'è un comando disponibile sul telefono che mi consentirebbe di farlo?

PER ESEMPIO:

wget localhost/file.apk 
android_install file.apk

Ho bisogno di automatizzare un'installazione, poiché ho appena cancellato per sbaglio la mia scheda SD e tutto su di essa. :(


Risposte:


12

Nella shell adb o nell'emulatore di terminale (e molto probabilmente su SSH) è possibile utilizzare l' pmutilità per installare app. Il comando è:

pm installa /sdcard/app1.apk

I seguenti sono gli interruttori di 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

Ad esempio, puoi forzare l'installazione dell'app direttamente nella memoria esterna (stile Froyo / Gingerbread).

PS L' wgetutilità dovrebbe essere disponibile tramite BusyBox su CM7. In caso contrario, puoi sempre installarlo tramite Android Market .


Questo è esattamente quello che sto cercando. pmesiste /system/bin/pm, ma sfortunatamente su SSH (anche come root) non fa nulla. L'esecuzione di qualsiasi pmcomando non produce output. C'è qualcosa che sto facendo di sbagliato? Funziona nell'emulatore di terminale, non solo su SSH per qualche motivo :(
Naftuli Kay

Ho fatto lavorare PM come root da adb in CM6; oltre a ciò non sono sicuro.
Broam,

1
Posso chiederti qual è il motivo per cui preferisci SSH rispetto alla shell ADB?
Chahk,

1
@Chahk: adbfunziona solo tramite il cavo USB, vero? E SSH può essere su una rete wireless. Inoltre, sshè presente ovunque, ma adbdeve essere installato.
imz - Ivan Zakharyaschev,

Errore: java.lang.SecurityException: autorizzazione Negazione: runInstallCreate dal comando pm chiede di eseguire come utente -1 ma chiama dall'utente 11; questo richiede android.permission.INTERACT_ACROSS_USERS_FULL

6

Ti suggerirei di collegare il telefono a un PC con l'sdk (o almeno adb) installato e in modalità debug. Successivamente, scrivi uno script che passa attraverso le tue app e le installa tramite adb, ad es adb install x:\path\to\app1.apk.


Non c'è nessuna utility nativa al telefono per fare questo?
Naftuli Kay,

1
No, poiché la maggior parte delle app copia semplicemente il proprio file .apk in / data / app. Potresti provare a copiare tutti i tuoi apk lì e quindi riavviare (nota che questo ha bisogno di root, ma presumo dal tag cyanogenmod che sei rootato).
onik,

Ora che è qualcosa che posso fare su SSH,cp * /data/app && reboot
Naftuli Kay

1
si noti che il comando cp non è disponibile in stock Android (ovvero ROM non personalizzata), quindi se non si utilizza Cyanogen potrebbe essere necessario (ab) utilizzare il catcomando.
Lie Ryan,

2
In realtà, al telefono c'è un tale comando. pm install /sdcard/app1.apkfarà la stessa cosa adb installe può essere eseguita nella shell adb, nell'emulatore di terminale e molto probabilmente su SSH. Dai un'occhiata all'output di pmper ulteriori opzioni. C'è anche un interruttore per forzare l'installazione dell'app direttamente su memoria esterna (stile Gingerbread).
Chahk,

2

Sto usando lo stesso metodo e sì, SSH è fantastico! Ma sembra che quando SSH su Android ottiene una shell diversa rispetto a sh, quindi se metti sh davanti al comando dovrebbe funzionare.

Ecco un esempio: sh /system/bin/pm install app1.apk

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.