En bref
Le code lié à la commande d'appel de service n'est que les arguments de la fonction et l'ordre dans lequel la fonction se produit dans le fichier aidl de ce service. Voici une syntaxe
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>
En détail,
j'ai rencontré beaucoup de problèmes pour le savoir et je vais donc partager la solution avec l'aide du service de presse-papiers.
Vous devez d'abord connaître le service qui vous intéresse -
Pour cela, vous devez rechercher tous les services disponibles pour un système Android particulier en tapant
adb shell service list
Voici ce que vous obtiendrez -
.
.
.
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]
.
.
.
Comme je suis intéressé par le service de presse-papiers, voici à quoi il ressemble
70 clipboard: [android.content.IClipboard]
Donc, à partir d'ici, nous pouvons résumer que le nom du service est service de presse-papiers et que le chemin du package est android.content.IClipboard
Ensuite, vous devez connaître le chemin complet où se trouve IClipboard.aidl.
Pour savoir que vous devez rechercher sur google IClipboard.aidl.
Vous devez rechercher quelque chose sur le site android.googlesource.com dans les résultats, comme dans mon cas-
https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl
Donc, après + / android-4.2.2_r1 se trouve votre chemin. Que ce chemin soit path_of_clipboard.aidl =
/core/java/android/content/IClipboard.aidl
Étant donné que ces codes d'appel de service dépendent du système Android, vous devez donc connaître le nom de votre système d'exploitation Android. Dans mon cas, il s'agit de la version 8.1.0.
Je vais donc aller sur le site Web suivant où Google met du code et sélectionner ma version de système d'exploitation dans le côté gauche de la page -
https://android.googlesource.com/platform/frameworks/base/
Dans mon cas, c'est android-8.1.0_r50.Je clique dessus, puis mon URL ressemblera à ceci
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
Et puis après avoir ajouté path_of_clipboard.aidl, mon URL complète ressemblera à
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
Ici, il y aura de nombreuses méthodes dans l'interface, comme dans mon cas
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);
Ainsi, le code de la première méthode, c'est-à-dire setPrimaryClip, sera 1 comme il est apparu à la première place et celui de la dernière méthode, c'est-à-dire hasClipboardText, sera 7 comme il est apparu à la septième place dans le fichier aidl. De même pour les autres méthodes.
Donc, si je veux appeler la septième méthode, je vais taper
adb shell service call clipboard 7
Comme vous l'avez peut-être vu, je n'ai pas mis le nom de callingPackage car il n'est pas requis.
Si la méthode a besoin d'arguments, vous pouvez la passer comme indiqué dans cet exemple.
Supposons une méthode dont le code est 8 dans le presse-papiers et qui ressemble à ceci -
getDemo(String arg1, int arg2, boolean arg3)
Donc je l'appellerai comme ça
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
Ici, i32 signifie entier 32 bits et s16 pour la chaîne. Nous pouvons même passer la valeur booléenne sous forme d'entier comme le montre l'exemple.
En entier booléen 1 signifie vrai et 0 pour faux.
CONSEIL Gardez le logcat ouvert (comme dans Android Studio) pour vérifier toute erreur survenue lors de l'exécution de la commande adb.
La source