Befehl zum Installieren der App vom Telefon?

14

Ich möchte in mein Telefon SSH, ein APK herunterladen und es remote installieren. Ist auf dem Telefon ein Befehl verfügbar, mit dem ich dies ausführen kann?

Z.B:

wget localhost/file.apk 
android_install file.apk

Müssen Sie eine Installation automatisieren, da ich gerade versehentlich meine SD-Karte und alles darauf gelöscht. :(

Naftuli Kay
quelle

Antworten:

12

In der ADB-Shell oder im Terminal-Emulator (und höchstwahrscheinlich über SSH) können Sie das pmDienstprogramm zum Installieren von Apps verwenden. Der Befehl lautet:

pm install /sdcard/app1.apk

Das Folgende sind die Schalter von 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

Beispielsweise können Sie die App zwingen, direkt auf dem externen Speicher zu installieren (Froyo / Gingerbread-Stil).

PS Das wgetDienstprogramm sollte über BusyBox auf CM7 verfügbar sein. Wenn nicht, können Sie es jederzeit über Android Market installieren .

Chahk
quelle
Genau das suche ich. pmgibt es bei /system/bin/pm, aber leider über SSH (auch als root) macht es nichts. Das Ausführen eines pmBefehls erzeugt keine Ausgabe. Gibt es etwas, was ich falsch mache? Es funktioniert im Terminal-Emulator, nur nicht über SSH aus irgendeinem Grund :(
Naftuli Kay
Ich hatte PM-Arbeit als root von ADB in CM6; Darüber hinaus bin ich mir nicht sicher.
Broam
1
Darf ich fragen, warum Sie SSH der ADB-Shell vorziehen?
Chahk
1
@Chahk: Funktioniert adbnur über das USB-Kabel, nicht wahr ? Und SSH kann über ein drahtloses Netzwerk erfolgen. Auch sshist es überall, adbmuss aber installiert werden.
imz - Ivan Zakharyaschev
Fehler: java.lang.SecurityException: Berechtigungsverweigerung: Der Befehl runInstallCreate from pm fragt nach der Ausführung als Benutzer -1, ruft jedoch von Benutzer 11 aus auf. Dies erfordert android.permission.INTERACT_ACROSS_USERS_FULL
6

Ich würde vorschlagen, dass Sie Ihr Telefon an einen PC anschließen, auf dem SDK (oder zumindest ADB) installiert ist und der sich im Debugging-Modus befindet. Schreiben Sie anschließend ein Skript, das Ihre Apps durchläuft und sie über adb installiert, z adb install x:\path\to\app1.apk.

onik
quelle
Es gibt kein natives Dienstprogramm auf dem Telefon, um dies zu tun?
Naftuli Kay
1
Nein, da die meisten Apps ihre .apk-Datei einfach nach / data / app kopieren. Sie könnten versuchen, alle Ihre Apks dort zu kopieren und dann neu zu starten (beachten Sie, dass dies root benötigt, aber ich gehe vom cyanogenmod-Tag aus, dass Sie root sind).
Onik
Jetzt , Das ist etwas , was ich über SSH tun,cp * /data/app && reboot
Naftuli Kay
1
Beachten Sie, dass der Befehl cp in Android nicht verfügbar ist (dh nicht benutzerdefiniertes ROM). Wenn Sie also Cyanogen nicht verwenden, müssen Sie möglicherweise den catBefehl (ab) verwenden .
Lie Ryan
2
Tatsächlich gibt es am Telefon einen solchen Befehl. pm install /sdcard/app1.apkwird dasselbe tun wie adb installund kann in der ADB-Shell, im Terminal-Emulator und höchstwahrscheinlich über SSH ausgeführt werden. Schauen Sie sich die Ausgabe von an, pmum weitere Optionen zu erhalten. Es gibt sogar einen Schalter, mit dem die App direkt auf einem externen Speicher installiert werden kann (Lebkuchenstil).
Chahk
2

Ich benutze die gleiche Methode und ja, SSH ist großartig! Aber es scheint, wenn Sie SSH für Android verwenden, bekommt es eine andere Shell als sh. Wenn Sie sh vor den Befehl setzen, sollte es funktionieren.

Hier ist ein Beispiel: sh /system/bin/pm install app1.apk

Mehellra
quelle