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?
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.
Viele App-Entwickler halten Klasseninformationen privat.
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
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?
<package_name>
und hinzufügen<full_class_name>
und wie Sie diese erhalten? Zumindest letzteres ist mir nicht klar.apktools
(nicht-Entwickler sonst vielleicht denken, es ist Teil des SDK und verloren gehen;)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?$StorageSettingsActivity
werden als Variable betrachtet und zu einer leeren Zeichenfolge "erweitert" (sofern nicht eine Variable mit diesem Namen definiert ist).Wie Sachin Shekhar sagte, müssen Sie den folgenden Befehl verwenden:
Sehen Sie sich ein konkretes Beispiel an:
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:
Der letzte Befehl lautet also:
Der
aapt
Befehl ist Teil des Android SDKquelle
com.android.settings
PATH weglassen , deshalb habe ich gesagt, dass er relativ ist. Testen Sie es mit jeder App, die Sie möchten.