En resumen
El código relacionado con el comando de llamada al servicio son sólo los argumentos de la función y el orden en de la función en el archivo aidl de ese servicio.Aquí hay una sintaxis
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 detalle
Me enfrenté a un montón de problemas para saber sobre él y por lo tanto voy a compartir la solución con la ayuda del servicio de portapapeles.
En primer lugar, debe conocer el servicio que le interesa.
Para ello es necesario buscar todo el servicio que hay para el sistema Android en particular escribiendo
adb shell service list
Esto es lo que obtendrá -
.
.
.
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]
.
.
.
Como estoy interesado en el servicio de portapapeles, así es como se ve
70 clipboard: [android.content.IClipboard]
Así que de aquí podemos resumir que el nombre del servicio es clipboard service y la ruta del paquete es Android.content.IClipboard
Entonces necesitas saber la ruta completa donde está el IClipboard.aidl.
Para saber eso tienes que buscar en google IClipboard.aidl.
Tienes que buscar algo del sitio web Android.googlesource.com en los resultados, como en mi caso.
https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl
Así que después de +/Android-4.2.2_r1 es donde se encuentra su ruta.Que esa ruta sea path_of_clipboard.aidl=
/core/java/android/content/IClipboard.aidl
Como estos códigos de llamada de servicio dependen del sistema Android, por lo que necesitas saber el nombre de tu sistema operativo Android. En mi caso es 8.1.0
Así que voy a ir a la siguiente página web donde google pone el código y seleccionar mi versión de os de la mano izquierda para la página -
https://Android.googlesource.com/platform/frameworks/base/
En mi caso es Android-8.1.0_r50.Voy a hacer clic en él y después de que mi url se verá así
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
Y después de añadir path_of_clipboard.aidl, mi url completa será como
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
Aquí habrá muchos métodos en la interfaz.Como en mi caso
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);
Así que el código para el primer método, es decir, setPrimaryClip será 1, ya que se produjo en el primer lugar y que para el último método, es decir, hasClipboardText será 7, ya que se produjo en el séptimo lugar en el archivo aidl. Lo mismo ocurre con los demás métodos.
Así que si quiero llamar al séptimo método escribiré
adb shell service call clipboard 7
Como habrás visto no he puesto el nombre del callingPackage ya que no es necesario.
Si el método necesita argumentos, entonces puedes pasarlos como se muestra en este ejemplo.
Supongamos un método cuyo código es 8 en el portapapeles y que tiene el siguiente aspecto
getDemo(String arg1, int arg2, boolean arg3)
Así que lo llamaré así
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
Aquí i32 representa un entero de 32 bits y s16 la cadena. Podemos, incluso pasar el valor booleano como un entero como se muestra en el ejemplo.
En los enteros booleanos, 1 significa verdadero y 0 falso.
TIP Mantenga el logcat abierto (como en Android studio) para comprobar cualquier error que se produjo durante la ejecución de ese comando adb.
Fuente