comment exécuter l'action d'une application spécifique via un terminal?

13

Je dois exécuter mon application Android à partir d'un ordinateur distant via SSH, mais je ne suis pas un expert en ligne de commande, donc je voudrais savoir: comment exécuter une action spécifique d'une application? (pas seulement l'ouvrir) Ce qui implique: comment SAVOIR la sintax exacte des actions possibles d'une application?

Par exemple: je veux démarrer une application d'enregistrement audio sur mon téléphone à partir de mon ordinateur ET démarrer l'enregistrement à distance. C'est possible?

Merci, Andrea

Andrea
la source

Réponses:

12

Utilisez ceci:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Pour contrôler une application, vous devrez mettre les valeurs correctes de <package_name>et <full_class_name>dans la commande. Par exemple, vous pouvez utiliser com.google.gmail/com.google.gmail.check_mail(Noms hypothétiques) comme dernière partie de la commande.

L'obtention du nom de package d'une application est facile , mais l'obtention du nom d'action de classe ne l'est pas. Il y a deux problèmes:

  1. De nombreux développeurs d'applications gardent les informations de classe privées.

  2. Tous les développeurs ne font pas de programmation modulaire intelligente. Sa bonne habitude de diviser une application en plusieurs classes qui pourrait être déclenchée par des intentions, mais tous les développeurs ne sont pas intelligents.

Solution du 1er problème: décompilez l'application à l'aide d' apktool et consultez toutes les informations. Il existe également d'autres façons, mais celle-ci est toujours une méthode de travail (sauf si l'application est basée sur NDK au lieu de SDK).

Solution du 2ème problème: rien.

Ne vous inquiétez pas, la plupart des applications populaires suivent les meilleures pratiques de programmation et fournissent Public APIdes informations sur les cours.

Android Quesito
la source
Pourriez - vous ajouter quelques explications sur les paramètres <package_name>et <full_class_name>, et comment les obtenir? Pour moi, au moins, ce dernier n'est pas clair.
Izzy
@Izzy Ajouté l'explication ... Revoyez la réponse, encore une fois.
Android Quesito
Merci! +1 de moi: D Compact et facile à comprendre. Je prendrai la liberté d'ajouter des liens, si cela ne vous dérange pas, car apktools(les non-développeurs pourraient penser que cela fait partie du SDK et se perdre;)
Izzy
@Izzy Voici mon problème: je suis incapable de lancer cette activité d'application Paramètres: com.android.settings/.Settings$StorageSettingsActivity. Essayez-le vous-même. En fait, quelle est cette chaîne après le $signe? Est-ce comme une sous-classe dans l'activité Paramètres?
Gokul NC
@GokulNC, vous devrez peut-être citer l'intégralité de la chose (guillemets simples), ou $StorageSettingsActivityêtre considéré comme une variable et "étendu" dans une chaîne vide (sauf s'il existe une variable définie par ce nom).
Izzy
9

Comme l'a dit Sachin Shekhar, vous devez utiliser la commande suivante:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Voir un exemple concret:

  • obtenir le fichier apk depuis votre appareil Android ou n'importe quel marché
  • exécuter cette commande:

aapt dump xmltree com.android.settings*.apk AndroidManifest.xml

Je voudrais lancer le menu "tethering", donc je recherche une activité dans la sortie:

(...)
   E: activity (line=190)
    A: android:name(0x01010003)=".TetherSettings" (Raw: ".TetherSettings")
(...)

La commande finale est donc:

am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings

La aaptcommande fait partie du SDK Android

Gilles Quenot
la source
1
: D Testez-le, cela fonctionne comme un charme. Il s'agit d'un exemple de travail réel © ® ™.
Gilles Quenot
2
La chance et l'informatique sont tout à fait opposés. C'est un chemin relatif .
Gilles Quenot
2
Non, vous pouvez ignorer le CHEMIN com.android.settings, c'est pourquoi j'ai dit que c'était relatif. Testez-le sur n'importe quelle application que vous souhaitez.
Gilles Quenot
2
Je n'ai pas dit que cela ne fonctionnerait pas avec d'autres applications. Le point avant le nom de classe fait la magie. Mais cela ne devrait pas être encouragé.
Android Quesito
1
Vous avez dit que c'était de la chance, ce n'est pas le cas. Avez-vous des sources pour votre affirmation? Pourquoi cela ne devrait pas être encouragé?
Gilles Quenot