Nói ngắn gọn
Mã liên quan đến lệnh gọi dịch vụ chỉ là đối số của hàm và thứ tự mà hàm xuất hiện trong tệp hỗ trợ của dịch vụ đó. Đây là một cú pháp
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>
Chi tiết
tôi gặp rất nhiều vấn đề cần biết về nó và do đó tôi sẽ chia sẻ giải pháp với sự trợ giúp của dịch vụ clipboard.
Trước tiên, bạn cần biết về dịch vụ mà bạn quan tâm -
Vì bạn cần tìm tất cả các dịch vụ dành cho hệ thống Android cụ thể bằng cách nhập
adb shell service list
Đây là những gì bạn sẽ nhận được -
.
.
.
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]
.
.
.
Như tôi quan tâm đến dịch vụ clipboard, đây là giao diện của nó
70 clipboard: [android.content.IClipboard]
Vì vậy, từ đây chúng ta có thể tóm tắt rằng tên dịch vụ là dịch vụ clipboard và đường dẫn gói là android.content.IClipboard
Sau đó, bạn cần biết đường dẫn đầy đủ nơi IClipboard.aidl.
Để biết rằng bạn cần tìm kiếm trên google cho IClipboard.aidl.
Bạn cần tìm kiếm thứ gì đó từ trang web android.googlesource.com trong kết quả, như trong trường hợp của tôi-
https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/core/java/android/content/IClipboard.aidl
Vì vậy, sau + / android-4.2.2_r1 là nơi đường dẫn của bạn nằm. Hãy xem đường dẫn đó là path_of_clipboard.aidl =
/core/java/android/content/IClipboard.aidl
Vì các mã cuộc gọi dịch vụ này phụ thuộc vào hệ thống Android, do đó bạn cần biết tên hệ điều hành Android của mình- Trong trường hợp của tôi là 8.1.0
Vì vậy, tôi sẽ truy cập trang web sau nơi google đặt mã và chọn phiên bản os của tôi từ phía bên trái cho trang -
https://android.googlesource.com/pl platform / frameworks / base /
Trong trường hợp của tôi, đó là android-8.1.0_r50. Tôi sẽ nhấp vào nó và sau đó url của tôi sẽ trông như thế này
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51
Và sau khi thêm path_of_clipboard.aidl, url hoàn chỉnh của tôi sẽ trông như thế
https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r51/core/java/android/content/IClipboard.aidl
Ở đây sẽ có nhiều phương thức trong giao diện. Giống như trong trường hợp của tôi
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);
Vì vậy, mã cho phương thức đầu tiên, ví dụ setPrimaryClip sẽ là 1 như đã xảy ra ở vị trí đầu tiên và đối với phương thức cuối cùng, ví dụ hasClipboardText sẽ là 7 vì nó xuất hiện ở vị trí thứ bảy trong tệp hỗ trợ. Tương tự cho các phương pháp khác.
Vì vậy, nếu tôi muốn gọi phương thức thứ bảy, tôi sẽ gõ
adb shell service call clipboard 7
Như bạn có thể đã thấy rằng tôi đã không đặt tên CallPackage vì nó không bắt buộc.
Nếu phương thức cần đối số, thì bạn có thể truyền nó như hiển thị trong ví dụ này.
Chúng ta hãy giả sử một phương thức có mã là 8 trong clipboard và trông giống như thế này -
getDemo(String arg1, int arg2, boolean arg3)
Vì vậy, tôi sẽ gọi nó như thế này
adb shell call clipboard 8 s16 "first_argument" i32 12 i32 1
Ở đây i32 là viết tắt của số nguyên 32 bit và s16 cho chuỗi. Chúng ta có thể, thậm chí chuyển giá trị boolean dưới dạng một số nguyên như trong ví dụ.
Trong boolean số nguyên 1 là viết tắt của true và 0 cho false.
MIPO Giữ logcat mở (như trong studio android) để kiểm tra xem có lỗi nào xảy ra trong khi thực hiện lệnh adb đó không.
Nguồn