Wie starte ich eine Anwendung mit Android ADB Tools?


Antworten:


630
adb shell
am start -n com.package.name/com.package.name.ActivityName

Oder Sie können dies direkt verwenden:

adb shell am start -n com.package.name/com.package.name.ActivityName

Sie können auch Aktionen angeben, die durch Ihre Absichtsfilter gefiltert werden sollen:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 

23
Vielen Dank, ich habe es Shell-Funktion in ~ / .bash_profile gemacht, um viel schneller zu sein function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }und seine Verwendungandroidrun com.example.test
AbdullahDiaa

3
adb shell amgibt Ihnen eine Liste anderer Optionen, die Sie an den amBefehl übergeben können. Weitere
Informationen

1
@shurane Wie finde ich -a Option?
Ericyoung

21
Ist es möglich, die Standardaktivität auszuführen, anstatt so spezifisch zu sein, welche Aktivität ich starten möchte?
Android-Entwickler

1
Ich hatte Probleme, die Anwendung und Aktivität zu finden. Ich habe diese Pipeline verwendet, adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedum alle angezeigten Anwendungen aufzulisten.
Att Righ

299

Es ist möglich, eine Anwendung unter Angabe des Paketnamens nur mit dem Affen- Tool auszuführen, indem Sie diesem Muster folgen:

adb shell monkey -p your.app.package.name -c android.intent.category.LAUNCHER 1

Mit dem Befehl wird die App mit dem Affen-Tool ausgeführt, das zufällige Eingaben für die Anwendung generiert. Der letzte Teil des Befehls ist eine Ganzzahl, die die Anzahl der generierten Zufallseingaben für die App angibt. In diesem Fall ist die Nummer 1, die tatsächlich zum Starten der App verwendet wird (Symbolklick).


91
Launcher ist Standard. Sie können vereinfachen, umadb shell monkey -p your.app.package.name 1
Androiderson

3
Ist es möglich, den APK-Dateinamen anstelle des Paketnamens zu verwenden? Angenommen, ich habe eine APK-Datei und möchte sie installieren und ausführen können. Ist dies möglich?
Android-Entwickler

1
Was passiert, wenn eine Fehlermeldung angezeigt wird? Es wurden keine Aktivitäten zum Ausführen gefunden. abbrechen ?
IgorGanapolsky

3
@IgorGanapolsky Wenn keine Aktivitäten gefunden wurden, handelt es sich um eine Service-App, die überhaupt keine Aktivität enthält.
m3nda

1
@IgorGanapolsky, wenn es sich um eine Dienstnutzung handelt, adb shell am startservice com.some.package.name/.YourServiceSubClassNamesiehe hier: stackoverflow.com/a/18703083/211292
ThomasW

122

Oder Sie könnten dies verwenden:

adb shell am start -n com.package.name/.ActivityName

75
Ist es möglich, dies ohne Angabe des Aktivitätsnamens zu tun, damit die Standardhauptaktivität gestartet wird?
Android-Entwickler

5
@androiddeveloper Siehe Affen Befehl unten aus depodefi : Sie brauchen keine Aktivität Namen angeben!
1111161171159459134

8
Was ist, wenn ich den Aktivitätsnamen nicht kenne ?
IgorGanapolsky

2
Führen Sie ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk aus, in dem der folgende Eintrag aufgeführt ist: launchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex

17
monkey -p com.package.name 1viaadb shell
Denys Vitali

60

Linux / Mac-Benutzer können auch ein Skript erstellen, um eine Apk mit den folgenden Funktionen auszuführen:

Erstellen Sie eine Datei mit dem Namen "adb-run.sh" mit diesen drei Zeilen:

pkg=$(aapt dump badging $1|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging $1|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
adb shell am start -n $pkg/$act

dann "chmod + x adb-run.sh", um es ausführbar zu machen.

Jetzt können Sie einfach:

adb-run.sh myapp.apk

Der Vorteil hierbei ist, dass Sie den Paketnamen oder den Namen der startbaren Aktivität nicht kennen müssen. Ebenso können Sie "adb-uninstall.sh myapp.apk" erstellen.

Hinweis: Dies setzt voraus, dass Sie Aapt in Ihrem Pfad haben. Sie finden es im SDK unter dem Ordner "Neue Build-Tools".


für Windows können Sie mit Cygwin (ungetestet) versuchen
dljava

3
Ihr Beitrag hat mich dazu gebracht, AWK nachzuschlagen. Ich habe Ihr Skript neu erstellt. pastebin.com/X7X1SsFa
Kyle

2
Das ist fabelhaft. Warum dies kein Standard-ADB-Befehl ist, werden wir nie erfahren.
John Tyree

Sie müssen kein Aapt in Ihrem Pfad haben (solange "android" ist), wenn Sie den Pfad im Skript adb-run.sh wie folgt festlegen: PATH = $ (dirname $ (welcher Android)) /. ./build-tools/20.0.0:$PATH
Steve Lemke

@dljava Warum funktioniert das nicht auf play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS

21

Ich möchte noch eine Sache erwähnen.

Wenn Sie eine Anwendung starten adb shell am, wird automatisch das Flag FLAG_ACTIVITY_NEW_TASK hinzugefügt, wodurch sich das Verhalten ändert. Siehe den Code .

Zum Beispiel, wenn Sie die Play Store-Aktivität von starten adb shell am , wird durch Drücken der Schaltfläche " Zurück " (Hardware-Zurück-Schaltfläche) nicht Ihre App angezeigt, sondern die vorherige Play Store-Aktivität, wenn einige vorhanden waren (wenn keine Play Store-Aufgabe vorhanden war) , dann würde es dir deine App bringen). In der Dokumentation zu FLAG_ACTIVITY_NEW_TASK heißt es:

Wenn für die Aktivität, die Sie gerade starten, bereits eine Aufgabe ausgeführt wird, wird keine neue Aktivität gestartet. Stattdessen wird die aktuelle Aufgabe einfach mit dem Status, in dem sie zuletzt war, an die Vorderseite des Bildschirms gebracht

Dies veranlasste mich, einige Stunden damit zu verbringen, herauszufinden, was schief gelaufen ist.

Denken Sie also daran, dass adb shell am Sie das Flag FLAG_ACTIVITY_NEW_TASK hinzufügen .


1
Erwähnenswert ist auch, dass es keine Möglichkeit gibt, die Flagge zu löschen, was ärgerlich ist
Kedar Paranjape

16

Wir können eine Anwendung auch starten, indem wir den Anwendungstyp kennen und ihn mit Daten versorgen:

adb shell am start -d "file:///sdcard/sample.3gp" -t "video/3gp" -a android.intent.action.VIEW

Dieser Befehl zeigt verfügbare Video-Player zum Abspielen der sample.3gp- Datei an


15

Schritt 1: Rufen Sie zuerst den gesamten Paketnamen der auf Ihrem Gerät installierten Apps ab, indem Sie Folgendes verwenden:

adb shell pm list packages

Schritt 2: Sie erhalten alle Paketnamen. Kopieren Sie den Namen, den Sie mit adb starten möchten.

Schritt 3: Fügen Sie im folgenden Befehl den gewünschten Paketnamen hinzu.

adb shell monkey -p 'your package name' -v 500

Zum Beispiel:
adb shell monkey -p com.estrongs.android.pop -v 500 um den Es Explorer zu starten.


11
Dadurch wird Ihre Anwendung gestartet und 500 pseudozufällige Ereignisse an sie gesendet. Verwenden Sie also '1', um '500' zu ersetzen, ist besser.
Lyn

14

Öffnen Sie ~ / .bash_profile und fügen Sie diese Bash-Funktionen am Ende der Datei hinzu

function androidinstall(){
   adb install -r ./bin/$1.apk
}
function androidrun(){
   ant clean debug
   adb shell am start -n $1/$1.$2
}

Öffnen Sie dann den Android-Projektordner

androidinstall app-debug && androidrun com.example.app MainActivity

2
Können Sie erklären, was app-debugtut?
JayQuerie.com

3
@TrevorSenior App-Debug ist der Titel der Apk-Datei, normalerweise im Debug-Modus trägt die generierte Apk-Datei den Titel "APPLICATION NAME-debug.apk"
AbdullahDiaa

7

monkey --pct-syskeys 0 für Entwicklungsboards

Ohne dieses Argument wird die App auf einem Entwicklungsboard ohne Schlüssel / Anzeige nicht geöffnet:

adb shell monkey --pct-syskeys 0 -p com.cirosantilli.android_cheat.textviewbold 1

und schlägt mit Fehler fehl:

SYS_KEYS has no physical keys but with factor 2.0%

Getestet auf HiKey960, Android O AOSP.

Gelernt von: https://github.com/ARM-software/lisa/pull/408

Ebenfalls gefragt unter: Affentest: Wenn das Android-System keine physischen Schlüssel hat, welche Parameter müssen in den Befehl aufgenommen werden


2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Ex:

adb shell am start -n 'com.android.settings/.wifi.WifiStatusTest'

Sie können die APK-INFO-Anwendung verwenden, um die Liste der App-Aktivitäten für jedes App-Paket zu kennen


0

Versuchen Sie dies, um eine Android-Foto-App zu öffnen und eine bestimmte Bilddatei als Parameter zu öffnen.

adb shell am start -n com.google.android.apps.photos/.home.HomeActivity -d file:///mnt/user/0/primary/Pictures/Screenshots/Screenshot.png

Es funktioniert auf dem neuesten Android, es wird kein Popup angezeigt, um eine Anwendung zum Öffnen auszuwählen, da Sie eine bestimmte App angeben, mit der Sie Ihr Bild öffnen möchten


Ich habe eine Player-App, die ein Video von einer URL streamen kann. Wie kann ich diese URL als Parameter übergeben und von dieser URL streamen? Angenommen, eine URL von YouTube?
Vishnu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.