In breve
Il codice relativo al comando di chiamata di servizio sono solo gli argomenti della funzione e dell'ordine in cui si trova la funzione nel file helpl di quel servizio. Ecco una sintassi
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>
Nel dettaglio
ho dovuto affrontare molti problemi per conoscerlo e quindi condividerò la soluzione con l'aiuto del servizio di appunti.
Per prima cosa devi conoscere il servizio che ti interessa -
Per questo devi cercare tutto il servizio che è lì per un particolare sistema Android digitando
adb shell service list
Ecco cosa otterrai:
.
.
.
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]
.
.
.
Come sono interessato al servizio di appunti, ecco come appare
70 clipboard: [android.content.IClipboard]
Quindi da qui possiamo riassumere che il nome del servizio è il servizio appunti e il percorso del pacchetto è android.content.IClipboard
Quindi è necessario conoscere il percorso completo in cui si trova IClipboard.aidl.
Per sapere che è necessario cercare su Google IClipboard.aidl.
Devi cercare qualcosa dal sito web android.googlesource.com nei risultati, come nel mio caso-
https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl
Quindi dopo + / android-4.2.2_r1 è dove si trova il tuo percorso. Lascia che quel percorso sia path_of_clipboard.aidl =
/core/java/android/content/IClipboard.aidl
Poiché questi codici di chiamata del servizio dipendono dal sistema Android, quindi è necessario conoscere il nome del proprio sistema operativo Android. Nel mio caso è 8.1.0
Quindi andrò al seguente sito Web in cui Google inserisce il codice lì e selezionerò la mia versione del sistema operativo dal lato sinistro per la pagina -
https://android.googlesource.com/platform/frameworks/base/
Nel mio caso è android-8.1.0_r50. Farò clic su di esso e successivamente il mio URL apparirà in questo modo
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
E dopo aver aggiunto path_of_clipboard.aidl, il mio URL completo sarà simile
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
Qui ci saranno molti metodi nell'interfaccia, come nel mio 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);
Quindi il codice per il primo metodo cioè setPrimaryClip sarà 1 come si è verificato al primo posto e quello per l'ultimo metodo cioè hasClipboardText sarà 7 come si è verificato al settimo posto nel file di helpl. Allo stesso modo per gli altri metodi.
Quindi, se voglio chiamare il settimo metodo, scriverò
adb shell service call clipboard 7
Come avrai visto, non ho inserito il nome del pacchetto di chiamata in quanto non è richiesto.
Se il metodo necessita di argomenti, puoi passarlo come mostrato in questo esempio.
Supponiamo che un metodo il cui codice sia 8 negli Appunti e che assomigli a questo -
getDemo(String arg1, int arg2, boolean arg3)
Quindi lo chiamerò così
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
Qui i32 sta per intero a 32 bit e s16 per la stringa. Possiamo anche passare il valore booleano come numero intero, come mostrato nell'esempio.
Nell'intero booleano 1 sta per vero e 0 per falso.
SUGGERIMENTO Tenere aperto logcat (come in Android Studio) per verificare la presenza di errori verificatisi durante l'esecuzione del comando adb.
fonte