Wie kann ich die Aktion einer bestimmten App über ein Terminal ausführen?


13

Ich muss meine Android-App über SSH von einem Remotecomputer aus ausführen, bin jedoch kein Befehlszeilenexperte. Daher möchte ich wissen, wie eine bestimmte Aktion einer App ausgeführt wird. (nicht nur öffnen) Was bedeutet: Wie kann man die exakte Sintax der möglichen Aktionen einer App erkennen?

Beispiel: Ich möchte von meinem Computer aus eine Audio-Aufnahme-App auf meinem Telefon starten UND die Aufnahme von der Fernbedienung aus starten. Ist es möglich?

Danke, Andrea

Antworten:


12

Benutze das:

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

Um eine App zu steuern, müssen Sie die korrekten Werte von <package_name>und <full_class_name>in den Befehl eingeben. Beispielsweise können Sie com.google.gmail/com.google.gmail.check_mail(hypothetische Namen) als letzten Teil des Befehls verwenden.

Den Paketnamen einer App zu erhalten ist einfach , den Klassennamen einer Aktion jedoch nicht. Es gibt zwei Probleme:

  1. Viele App-Entwickler halten Klasseninformationen privat.

  2. Nicht alle Entwickler machen eine intelligente modulare Programmierung. Es ist eine gute Angewohnheit, eine App in mehrere Klassen zu unterteilen, was durch Absichten ausgelöst werden könnte, aber nicht alle Entwickler sind schlau.

Lösung des 1. Problems: Dekompiliere die App mit apktool und sieh dir alle Infos an. Es gibt auch andere Möglichkeiten, aber diese Methode funktioniert immer (es sei denn, die App basiert auf NDK anstelle von SDK).

Lösung des 2. Problems: Nichts.

Keine Sorge, die meisten populären Apps folgen der besten Programmierpraxis und bieten Public APIInformationen zu Klassen.


Können Sie Erklärungen zu den Parametern <package_name>und hinzufügen <full_class_name>und wie Sie diese erhalten? Zumindest letzteres ist mir nicht klar.
Izzy

@Izzy Die Erklärung hinzugefügt ... Überprüfen Sie die Antwort erneut.
Android Quesito

Vielen Dank! +1 von mir: D Kompakt und leicht zu verstehen. Ich werde die Freiheit nehmen einige Links hinzufügen, wenn es Ihnen nichts ausmacht, für apktools(nicht-Entwickler sonst vielleicht denken, es ist Teil des SDK und verloren gehen;)
Izzy

@Izzy Hier ist mein Problem: Ich bin nicht in der Lage , diese Aktivität von Einstellungen App zu starten: com.android.settings/.Settings$StorageSettingsActivity. Versuch es selber. Was ist eigentlich diese Zeichenfolge nach dem $Vorzeichen? Ist es wie eine Unterklasse in der Aktivität Einstellungen?
Gokul NC

@GokulNC Möglicherweise müssen Sie das gesamte Objekt in Anführungszeichen setzen (einfache Anführungszeichen), oder Sie $StorageSettingsActivitywerden als Variable betrachtet und zu einer leeren Zeichenfolge "erweitert" (sofern nicht eine Variable mit diesem Namen definiert ist).
Izzy

9

Wie Sachin Shekhar sagte, müssen Sie den folgenden Befehl verwenden:

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

Sehen Sie sich ein konkretes Beispiel an:

  • Holen Sie sich die APK-Datei von Ihrem Android-Gerät oder einem beliebigen Marktplatz
  • Führen Sie diesen Befehl aus:

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

Ich möchte das "Tethering" -Menü starten, also suche ich eine Aktivität in der Ausgabe:

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

Der letzte Befehl lautet also:

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

Der aaptBefehl ist Teil des Android SDK


1
: D Testen Sie es, es funktioniert wie ein Zauber. Dies ist ein reales © ® ™ Arbeitsbeispiel.
Gilles Quenot

2
Glück und Informatik sind genau das Gegenteil. Es ist ein relativer Weg.
Gilles Quenot

2
Nein, du kannst den com.android.settingsPATH weglassen , deshalb habe ich gesagt, dass er relativ ist. Testen Sie es mit jeder App, die Sie möchten.
Gilles Quenot

2
Ich habe nicht gesagt, dass es mit anderen Apps nicht funktioniert. Der Punkt vor dem Klassennamen macht die Magie. Dies sollte jedoch nicht gefördert werden.
Android Quesito

1
Sie sagten, das ist Glück, das ist nicht. Haben Sie Quellen für Ihre Behauptung? Warum sollte dies nicht gefördert werden?
Gilles Quenot
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.