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