ในระยะสั้น
โค้ดที่เกี่ยวข้องกับคำสั่ง call service เป็นเพียงข้อโต้แย้งของฟังก์ชันและลำดับที่ฟังก์ชันเกิดขึ้นในไฟล์ aidl ของเซอร์วิสนั้นนี่คือไวยากรณ์
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>
ในรายละเอียด
ฉันประสบปัญหามากมายที่ต้องรู้เกี่ยวกับมันและด้วยเหตุนี้ฉันจะแบ่งปันวิธีแก้ปัญหาด้วยความช่วยเหลือของบริการคลิปบอร์ด
ก่อนอื่นคุณต้องรู้เกี่ยวกับบริการที่คุณสนใจ -
เพื่อที่คุณจะต้องมองหาบริการทั้งหมดที่มีสำหรับระบบ Android โดยเฉพาะโดยพิมพ์
adb shell service list
นี่คือสิ่งที่คุณจะได้รับ -
.
.
.
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]
.
.
.
เนื่องจากฉันสนใจบริการคลิปบอร์ดนี่คือลักษณะที่ปรากฏ
70 clipboard: [android.content.IClipboard]
ดังนั้นจากที่นี่เราสามารถสรุปได้ว่าชื่อบริการคือบริการคลิปบอร์ดและเส้นทางของแพ็คเกจคือ android.content.IClipboard
จากนั้นคุณจำเป็นต้องรู้เส้นทางที่สมบูรณ์ที่ IClipboard.aidl อยู่
หากต้องการทราบว่าคุณต้องค้นหาใน Google สำหรับ IClipboard.aidl
คุณต้องมองหาบางอย่างจากเว็บไซต์ android.googlesource.com ในผลลัพธ์เช่นในกรณีของฉัน -
https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl
ดังนั้นหลังจาก + / android-4.2.2_r1 เป็นที่ที่พา ธ ของคุณอยู่ให้พา ธ นั้นเป็น path_of_clipboard.aidl =
/core/java/android/content/IClipboard.aidl
เนื่องจากรหัสการโทรบริการเหล่านี้ขึ้นอยู่กับระบบ Android ดังนั้นคุณต้องทราบชื่อระบบปฏิบัติการ android ของคุณ - ในกรณีของฉันคือ 8.1.0
ดังนั้นฉันจะไปที่เว็บไซต์ต่อไปนี้ที่ google ใส่รหัสและเลือกรุ่นระบบปฏิบัติการของฉันจาก ด้านซ้ายของหน้า -
https://android.googlesource.com/platform/frameworks/base/
ในกรณีของฉันมันเป็น android-8.1.0_r50 ฉันจะคลิกมันหลังจากนั้น URL ของฉันจะมีหน้าตาแบบนี้
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
และหลังจากเพิ่ม path_of_clipboard.aidl แล้ว URL ที่สมบูรณ์ของฉันจะมีลักษณะดังนี้
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
ที่นี่จะมีวิธีการมากมายในส่วนต่อประสานเหมือนในกรณีของฉัน
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);
ดังนั้นรหัสสำหรับวิธีแรกเช่น setPrimaryClip จะเป็น 1 ตามที่เกิดขึ้นในตอนแรกและสำหรับวิธีสุดท้ายคือ hasClipboardText จะเป็น 7 ตามที่เกิดขึ้นที่อันดับที่เจ็ดในไฟล์ aidl ในทำนองเดียวกันสำหรับวิธีอื่น ๆ
ดังนั้นถ้าฉันต้องการเรียกวิธีที่เจ็ดฉันจะพิมพ์
adb shell service call clipboard 7
อย่างที่คุณอาจเห็นว่าฉันไม่ได้ใส่ชื่อแพคเกจการโทรเพราะมันไม่จำเป็น
หากวิธีการนั้นต้องการอาร์กิวเมนต์คุณสามารถผ่านมันเหมือนดังที่แสดงในตัวอย่างนี้
ให้เราสมมติวิธีการที่มีรหัส 8 ในคลิปบอร์ดและที่มีลักษณะเช่นนี้ -
getDemo(String arg1, int arg2, boolean arg3)
ดังนั้นฉันจะเรียกมันว่าอย่างนี้
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
นี่คือ i32 หมายถึงจำนวนเต็ม 32 บิตและ s16 สำหรับสตริง เราสามารถทำได้แม้ผ่านค่าบูลีนเป็นจำนวนเต็มตามที่แสดงในตัวอย่าง
ในจำนวนเต็มบูลีน 1 หมายถึงจริงและ 0 เป็นเท็จ
เคล็ดลับเปิด logcat (เช่นใน android studio) เพื่อตรวจสอบข้อผิดพลาดที่เกิดขึ้นขณะเรียกใช้คำสั่ง adb
แหล่ง