Wo finden Sie eine Beschreibung aller Aufrufe von "/ system / bin / service"?

12

In einer Antwort wurde mir geraten, zu verwenden service call phone 2 s16 "$number". Es funktioniert, aber service listich sehe andere nützliche Dinge, die ich nicht verwenden kann, und kann die Informationen im Internet nicht leicht finden.

Ich sehe keine Selbstbeobachtung, serviceaußer service listmich selbst herauszufinden ...

Wo finden Sie eine ausführlichere Beschreibung der "Service" -Aufrufe und ihrer Parameter?

Vi0
quelle
1
Schöne Frage ...
Android Quesito

Antworten:

5

Zusamenfassend

Code, der sich auf den Befehl zum Aufrufen von Diensten bezieht, sind nur die Argumente der Funktion und Reihenfolge, in der die Funktion in der Hilfedatei dieses Dienstes auftritt. Hier ist eine Syntax

service call <your_service_name> <number at which the function appears in your_service_name.aidl> <type of the argument like i32 or i64> <argument>

Im Detail hatte
ich viele Probleme damit, darüber Bescheid zu wissen, und daher werde ich die Lösung mithilfe des Zwischenablagedienstes teilen.
Zuerst müssen Sie wissen, an welchem ​​Dienst Sie interessiert sind -
Dazu müssen Sie durch Eingabe nach allen Diensten suchen, die für ein bestimmtes Android-System verfügbar sind

adb shell service list

Hier ist was Sie bekommen -

.
.
.
59  ethernet: [android.net.IEthernetManager]
60  wifip2p: [android.net.wifi.p2p.IWifiP2pManager]
61  rttmanager: [android.net.wifi.IRttManager]
62  wifiscanner: [android.net.wifi.IWifiScanner]
63  wifi: [android.net.wifi.IWifiManager]
64  overlay: [android.content.om.IOverlayManager]
65  netpolicy: [android.net.INetworkPolicyManager]
66  netstats: [android.net.INetworkStatsService]
67  network_score: [android.net.INetworkScoreService]
68  textservices: [com.android.internal.textservice.ITextServicesManager]
69  network_management: [android.os.INetworkManagementService]
70  clipboard: [android.content.IClipboard]
71  statusbar: [com.android.internal.statusbar.IStatusBarService]
.
.
.

Da ich mich für den Service in der Zwischenablage interessiere, sieht es folgendermaßen aus

70  clipboard: [android.content.IClipboard]

Von hier aus können wir zusammenfassen, dass der Dienstname Zwischenablagedienst und der Paketpfad android.content.IClipboard ist

Dann müssen Sie den vollständigen Pfad kennen, in dem sich IClipboard.aidl befindet.
Um zu wissen, dass Sie auf Google nach IClipboard.aidl suchen müssen.
Sie müssen in den Ergebnissen nach etwas von der android.googlesource.com-Website suchen, wie in meinem Fall.

https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl

Nach + / android-4.2.2_r1 liegt also Ihr Pfad. Lassen Sie diesen Pfad path_of_clipboard.aidl = sein

/core/java/android/content/IClipboard.aidl

Da diese Serviceanrufcodes vom Android-System abhängig sind, müssen Sie Ihren Android-Betriebssystemnamen kennen. In meinem Fall ist es 8.1.0.
Ich gehe also auf die folgende Website, auf der Google den Code abgibt, und wähle meine Betriebssystemversion aus linke Seite für die Seite -

https://android.googlesource.com/platform/frameworks/base/

In meinem Fall ist es android-8.1.0_r50.Ich werde darauf klicken und danach wird meine URL so aussehen

https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51

Und nach dem Hinzufügen von path_of_clipboard.aidl sieht meine vollständige URL so aus

https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl

Hier gibt es viele Methoden in der Schnittstelle. Wie in meinem Fall

    void setPrimaryClip(in ClipData clip, String callingPackage);
    ClipData getPrimaryClip(String pkg);
    ClipDescription getPrimaryClipDescription(String callingPackage);
    boolean hasPrimaryClip(String callingPackage);
    void addPrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener,
            String callingPackage);
    void removePrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener);
    /**
     * Returns true if the clipboard contains text; false otherwise.
     */
    boolean hasClipboardText(String callingPackage);

Der Code für die erste Methode, dh setPrimaryClip, ist also 1, wie er an erster Stelle aufgetreten ist, und der für die letzte Methode, dh hasClipboardText, ist 7, wie er an siebter Stelle in der Hilfedatei aufgetreten ist. Ähnliches gilt für die anderen Methoden.
Wenn ich also die siebte Methode aufrufen möchte, gebe ich ein

adb shell service call clipboard 7 

Wie Sie vielleicht gesehen haben, habe ich den Namen callingPackage nicht eingegeben, da er nicht erforderlich ist.

Wenn die Methode Argumente benötigt, können Sie sie wie in diesem Beispiel gezeigt übergeben.
Nehmen wir eine Methode an, deren Code in der Zwischenablage 8 ist und die so aussieht:

getDemo(String arg1, int arg2, boolean arg3)

Also werde ich es so nennen

adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1

Hier steht i32 für 32-Bit-Ganzzahl und s16 für den String. Wir können sogar einen booleschen Wert als Ganzzahl übergeben, wie im Beispiel gezeigt.
In der booleschen Ganzzahl steht 1 für wahr und 0 für falsch.

TIPP Halten Sie die logcat offen (wie in Android Studio) für Fehler zu überprüfen , die aufgetreten , während dieses adb Befehl ausgeführt wird .
Quelle

Royatirek
quelle
6

Das eigentliche Problem dabei service callist, dass Transaktionscodes nicht nur nicht dokumentiert, sondern auch nicht garantiert stabil sind - sie können stillschweigend zwischen Android-Versionen geändert werden. Aus diesem Grund service callsollten Befehle nur für das private Debuggen verwendet werden, wenn Sie wissen, welche Android-Version verwendet wird.

Beispiel:

(Hier FIRST_CALL_TRANSACTION = 1, der tatsächliche Transaktionscode, der im service call phoneBefehl verwendet werden soll, ist die in der Quelle angegebene Nummer plus 1.)

Beachten Sie, dass in der neuen Version TRANSACTION_supplyPukin der Mitte eingefügt wurde und alle folgenden Codes jetzt um 1 verschoben werden. Alles, was service call phonezur Ausführung dieser Transaktion verwendet wurde, wird bei Verwendung unter Android 4.2.2 schrecklich kaputt gehen - dieselben Codes führen dazu, dass völlig andere Methoden aufgerufen werden möglicherweise mit katastrophalen Folgen.

Sergey Vlasov
quelle
Gibt es etwas, das etwas höher ist als das service call, aber dennoch viele Dinge über die Superuser-Konsole erledigt werden kann?
Vi0
4

Es gibt keine Dokumentation. Aber Sie können alle Informationen, die Sie suchen, im Android-Quellcode finden. service listgibt Ihnen den Paketnamen. Also für den phoneService ist es com.android.internal.telephony.ITelephony. Sie werden alle möglichen Parameter für finden service call phoneaufgelistet in com/android/internal/telephony/ITelephony.javafür Ihre Android - Version.


quelle