En bref
Les codes liés à la commande d'appel de service sont juste les arguments de la fonction et l'ordre à dans lequel la fonction apparaît dans le fichier aidl du service en question.
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-papier.
Tout d'abord, vous devez connaître le service qui vous intéresse.
Pour cela, vous devez rechercher tous les services qui existent pour un système Android particulier en tapant
adb shell service list
Voici ce que vous recevrez -
.
.
.
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 comment il se présente
70 clipboard: [android.content.IClipboard]
Nous pouvons donc résumer que le nom du service est le service de presse-papiers et que le chemin du paquetage est Android.content.IClipboard.
Vous devez alors connaître le chemin complet où se trouve le fichier IClipboard.aidl.
Pour le savoir, il faut chercher sur google IClipboard.aidl.
Vous devez chercher quelque chose du 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, c'est là que se trouve votre chemin, que ce chemin soit path_of_clipboard.aidl=.
/core/java/android/content/IClipboard.aidl
Comme ces codes d'appel de service dépendent du système Android, vous devez connaître le nom de votre système Android. Dans mon cas, c'est 8.1.0.
Je vais donc me rendre sur le site suivant, où Google place son code, et sélectionner ma version du système d'exploitation dans la partie gauche de la page.
https://Android.googlesource.com/platform/frameworks/base/
Dans mon cas, il s'agit d'Android-8.1.0_r50. Je vais cliquer dessus et après cela, mon url ressemblera à ceci
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
Et après avoir ajouté path_of_clipboard.aidl, mon url complète ressemblera à ceci
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
Ici, il y aura plusieurs 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, car il est apparu au premier endroit, et celui de la dernière méthode, c'est-à-dire hasClipboardText, sera 7, car il est apparu au septième endroit du 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 avez pu le constater, je n'ai pas mis le nom du callingPackage car il n'est pas nécessaire.
Si la méthode a besoin d'arguments, alors vous pouvez les 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)
Je vais donc l'appeler comme ceci
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
Ici, i32 représente un entier de 32 bits et s16 une chaîne de caractères. Nous pouvons même passer la valeur booléenne comme un entier comme le montre l'exemple.
Dans un nombre entier booléen, 1 correspond à vrai et 0 à faux.
TIP Gardez le logcat ouvert (comme dans Android studio) pour vérifier toute erreur qui s'est produite lors de l'exécution de cette commande adb.
Source :