Dove trovare la descrizione di tutte le chiamate "/ system / bin / service"?


12

In una risposta mi è stato consigliato di usare service call phone 2 s16 "$number". Funziona, ma service listvedo altre cose utili che non so come usare e non riesco a trovare facilmente le informazioni su Internet.

Non vedo alcuna introspezione serviceoltre service lista scoprire me stesso ...

Dove trovare una descrizione più completa delle chiamate "di servizio" e dei loro parametri?


1
Bella domanda ...
Android

Risposte:


5

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


6

Il vero problema service callè che i codici di transazione non sono solo privi di documenti, ma non sono garantiti come stabili, ma possono essere silenziosamente modificati tra le versioni di Android. Per questo service callmotivo , i comandi non dovrebbero mai essere utilizzati, tranne per il debug privato, quando si conosce la versione di Android utilizzata.

Esempio:

(Qui FIRST_CALL_TRANSACTION = 1, quindi il codice di transazione effettivo che dovrebbe essere utilizzato nel service call phonecomando è il numero visualizzato nell'origine più 1.)

Si noti che nella nuova versione è TRANSACTION_supplyPukstata inserita nel mezzo e tutti i seguenti codici sono ora spostati di 1. Qualsiasi cosa utilizzata service call phoneper eseguire tali transazioni si romperà orribilmente se utilizzata su Android 4.2.2 - gli stessi codici comporteranno la chiamata di metodi completamente diversi , forse con risultati disastrosi.


C'è qualcosa che è un po 'più alto livello di service call, ma consente comunque di fare molte cose dalla console dei superutente?
Vi0

4

Non c'è documentazione. Ma puoi trovare tutte le informazioni che stai cercando nel codice sorgente Android. service listti dà il nome del pacchetto. Quindi per il phoneservizio lo è com.android.internal.telephony.ITelephony. Troverai tutti i possibili parametri service call phoneelencati com/android/internal/telephony/ITelephony.javaper la tua versione di Android.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.