Comment démarrer une application à l'aide des outils Android ADB?

Réponses:

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

Ou vous pouvez l'utiliser directement:

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

Vous pouvez également spécifier les actions à filtrer par vos filtres d'intention:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 
Cristian
la source
23
Merci beaucoup, je l'ai fait fonctionner le shell dans ~ / .bash_profile pour être beaucoup plus rapide function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }et son utilisationandroidrun com.example.test
AbdullahDiaa
3
adb shell amvous donnera une liste d'autres options à passer à la amcommande. Vous pouvez en savoir plus sur developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury
1
@shurane Comment puis-je trouver l'option -a?
ericyoung
21
est-il possible d'exécuter l'activité par défaut, au lieu d'être aussi spécifique à l'activité que j'ai l'intention de démarrer?
développeur Android
1
J'ai eu des problèmes pour trouver l'application et l'activité. J'ai utilisé ce pipeline adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedpour répertorier toutes les applications qui ont été affichées.
Att Righ
299

Il est possible d'exécuter une application en spécifiant le nom du package uniquement à l'aide de l' outil singe en suivant ce modèle:

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

La commande est utilisée pour exécuter l'application à l'aide de l'outil singe qui génère une entrée aléatoire pour l'application. La dernière partie de la commande est un entier qui spécifie le nombre d'entrées aléatoires générées pour l'application. Dans ce cas, le nombre est 1, qui est en fait utilisé pour lancer l'application (cliquez sur l'icône).

Michal
la source
92
Le lanceur est par défaut. Vous pouvez simplifier pouradb shell monkey -p your.app.package.name 1
Androiderson
3
Est-il possible d'utiliser le nom du fichier APK au lieu du nom du package? Supposons que je possède un fichier APK et que je souhaite pouvoir l'installer et l'exécuter, est-ce possible?
développeur Android
1
Que faire si j'obtiens une erreur: aucune activité n'a été trouvée pour s'exécuter. avorter ?
IgorGanapolsky
3
@IgorGanapolsky si aucune activité trouvée, c'est une application de service et n'a aucune activité du tout.
m3nda
1
@IgorGanapolsky s'il s'agit d'une utilisation de service, adb shell am startservice com.some.package.name/.YourServiceSubClassNamevoir ici: stackoverflow.com/a/18703083/211292
ThomasW
123

Ou, vous pouvez utiliser ceci:

adb shell am start -n com.package.name/.ActivityName
Joilnen
la source
76
est-il possible de le faire sans spécifier le nom de l'activité, afin que l'activité principale par défaut démarre?
développeur android
5
@androiddeveloper Voir la commande monkey ci-dessous de depodefi : pas besoin de spécifier le nom de l'activité!
1111161171159459134
8
Et si je ne connais pas le ActivityName ?
IgorGanapolsky
2
Exécutez ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk, qui répertoriera l'entrée suivante: launchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex
17
monkey -p com.package.name 1viaadb shell
Denys Vitali
60

Les utilisateurs linux / mac peuvent également créer un script pour exécuter une apk avec quelque chose comme ceci:

créez un fichier nommé "adb-run.sh" avec ces 3 lignes:

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

puis "chmod + x adb-run.sh" pour le rendre exécutable.

vous pouvez maintenant simplement:

adb-run.sh myapp.apk

L'avantage ici est que vous n'avez pas besoin de connaître le nom du package ou le nom de l'activité lancable. De même, vous pouvez créer "adb-uninstall.sh myapp.apk"

Remarque: Cela nécessite que vous ayez un aapt sur votre chemin. Vous pouvez le trouver dans le nouveau dossier des outils de génération du SDK.

dljava
la source
pour Windows, vous pouvez essayer avec cygwin (non testé)
dljava
3
Votre message m'a fait rechercher AWK. Je suis allé de l'avant et j'ai recréé votre script. pastebin.com/X7X1SsFa
Kyle
2
C'est fabuleux. Pourquoi ce n'est pas une commande adb standard, nous ne le saurons jamais.
John Tyree
Vous n'aurez pas besoin d'avoir aapt dans votre chemin (tant que "android" est) si vous définissez le PATH dans le script adb-run.sh, comme ceci: PATH = $ (dirname $ (which android)) /. ./build-tools/20.0.0:$PATH
Steve Lemke
@dljava pourquoi cela ne fonctionne-t-il pas sur play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS
21

Je voudrais également mentionner une dernière chose.

Lorsque vous démarrez une application à partir de adb shell am, elle ajoute automatiquement l'indicateur FLAG_ACTIVITY_NEW_TASK, ce qui modifie le comportement. Voir le code .

Par exemple, si vous lancez l'activité Play Store à partir de adb shell am, appuyer sur le bouton ` ` Retour '' (bouton de retour matériel) ne vous amènerait pas votre application, mais plutôt votre activité Play Store précédente s'il y en avait (s'il n'y avait pas de tâche Play Store) , il vous faudrait alors votre application). La documentation de FLAG_ACTIVITY_NEW_TASK indique:

si une tâche est déjà en cours d'exécution pour l'activité que vous démarrez maintenant, une nouvelle activité ne sera pas démarrée; au lieu de cela, la tâche en cours sera simplement amenée à l'avant de l'écran avec l'état dans lequel elle était en dernier

Cela m'a fait passer quelques heures pour découvrir ce qui n'allait pas.

Gardez donc à l'esprit que vous adb shell am ajoutez l'indicateur FLAG_ACTIVITY_NEW_TASK .

김준호
la source
1
Aussi, il convient de mentionner qu'il n'y a aucun moyen d'effacer ledit drapeau, ce qui est ennuyeux
Kedar Paranjape
16

Nous pouvons également démarrer une application en connaissant le type d'application et en l'alimentant en données:

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

Cette commande affiche les lecteurs vidéo disponibles pour lire le fichier sample.3gp

Anvesh Yalamarthy
la source
15

Étape 1: Obtenez d'abord tous les noms de packages des applications installées sur votre appareil, en utilisant:

adb shell pm list packages

Étape 2: Vous obtiendrez tous les noms de packages, copiez celui que vous souhaitez commencer à utiliser adb.

Étape 3: Ajoutez le nom de votre package souhaité dans la commande ci-dessous.

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

Par exemple:
adb shell monkey -p com.estrongs.android.pop -v 500 pour démarrer l'explorateur Es.

Tushar Pandey
la source
11
Cela lancera votre application et lui enverra 500 événements pseudo-aléatoires. Donc, utilisez «1» pour remplacer «500», c'est mieux.
Lyn
14

ouvrez ~ / .bash_profile et ajoutez ces fonctions bash à la fin du fichier

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

puis ouvrez le dossier du projet Android

androidinstall app-debug && androidrun com.example.app MainActivity
AbdullahDiaa
la source
2
Pouvez-vous expliquer ce que app-debugfait?
JayQuerie.com
3
@TrevorSenior app-debug est le titre du fichier apk, généralement en mode débogage, le fichier apk généré est intitulé "APPLICATION NAME-debug.apk"
AbdullahDiaa
7

monkey --pct-syskeys 0 pour les conseils de développement

Sans cet argument, l'application ne s'ouvrira pas sur une carte de développement sans clés / affichage:

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

et échoue avec une erreur:

SYS_KEYS has no physical keys but with factor 2.0%

Testé sur HiKey960, Android O AOSP.

Tiré de: https://github.com/ARM-software/lisa/pull/408

Également demandé à: test de singe: si le système Android ne possède pas de clés physiques, quels sont les paramètres à inclure dans la commande

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
la source
2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Ex:

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

Vous pouvez utiliser l'application APK-INFO pour connaître la liste des activités d'application par rapport à chaque package d'application

ImSaleem
la source
0

Essayez ceci, pour ouvrir une application photo Android et avec un fichier image spécifique à ouvrir en tant que paramètre.

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

Cela fonctionnera sur le dernier Android, aucun pop-up ne viendra pour sélectionner une application à ouvrir car vous donnez une application spécifique à laquelle vous souhaitez ouvrir votre image avec

Varun Sharma
la source
J'ai une application de lecture, qui est capable de diffuser une vidéo à partir d'une URL, comment puis-je passer cette URL en tant que paramètre et diffuser à partir de cette URL? suppose une URL de YouTube?
Vishnu