Pendeknya
Kode yang terkait dengan perintah panggilan layanan hanyalah argumen dari fungsi dan urutan di mana fungsi tersebut muncul di file helpl layanan tersebut. Berikut adalah sintaksisnya
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>
Secara rinci
saya menghadapi banyak masalah untuk mengetahuinya dan karenanya saya akan membagikan solusinya dengan bantuan layanan clipboard.
Pertama, Anda perlu tahu tentang layanan yang Anda minati -
Untuk itu Anda perlu mencari semua layanan yang ada untuk sistem android tertentu dengan mengetik
adb shell service list
Inilah yang akan Anda dapatkan -
.
.
.
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]
.
.
.
Karena saya tertarik dengan layanan clipboard, berikut tampilannya
70 clipboard: [android.content.IClipboard]
Jadi dari sini kita dapat meringkas bahwa nama layanan adalah layanan clipboard dan jalur paket adalah android.content.IClipboard
Maka Anda perlu tahu jalur lengkap di mana IClipboard.aidl berada.
Untuk mengetahui bahwa Anda perlu mencari di IClipboard.aidl google.
Anda perlu mencari sesuatu dari situs web android.googlesource.com dalam hasil, seperti dalam case- saya
https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl
Jadi setelah + / android-4.2.2_r1 di mana jalur Anda berada. Biarkan jalur itu menjadi path_of_clipboard.aidl =
/core/java/android/content/IClipboard.aidl
Karena kode panggilan layanan ini tergantung pada sistem android, maka Anda perlu tahu nama os android Anda - Dalam kasus saya adalah 8.1.0
Jadi saya akan pergi ke situs web berikut di mana google meletakkan kode di sana dan memilih versi os saya dari sisi kiri untuk halaman -
https://android.googlesource.com/platform/frameworks/base/
Dalam kasus saya ini adalah android-8.1.0_r50. Saya akan mengkliknya dan kemudian setelah itu url saya akan terlihat seperti ini
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
Dan kemudian setelah menambahkan path_of_clipboard.aidl, url lengkap saya akan terlihat seperti
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
Di sini akan ada banyak metode dalam antarmuka. Seperti dalam kasus saya
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);
Jadi kode untuk metode pertama yaitu setPrimaryClip akan menjadi 1 seperti yang terjadi di tempat pertama dan bahwa untuk metode terakhir yaitu hasClipboardText akan menjadi 7 seperti yang terjadi di tempat ketujuh dalam file Aidl. Demikian pula untuk metode lainnya.
Jadi jika saya ingin memanggil metode ketujuh saya akan mengetik
adb shell service call clipboard 7
Seperti yang Anda mungkin telah melihat bahwa saya belum memasukkan nama callingPackage karena tidak diperlukan.
Jika metode ini membutuhkan argumen, maka Anda dapat meneruskannya seperti yang ditunjukkan pada contoh ini.
Mari kita asumsikan metode yang kodenya 8 di clipboard dan terlihat seperti ini -
getDemo(String arg1, int arg2, boolean arg3)
Jadi saya akan menyebutnya seperti ini
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
Di sini i32 berarti integer 32 bit dan s16 untuk string. Kita dapat, bahkan meneruskan nilai boolean sebagai integer seperti yang ditunjukkan dalam contoh.
Dalam boolean integer 1 berarti true dan 0 untuk false.
TIP Biarkan logcat tetap terbuka (seperti di android studio) untuk memeriksa kesalahan yang terjadi saat menjalankan perintah adb itu.
Sumber