Nơi tìm mô tả của tất cả các cuộc gọi trên hệ thống / hệ thống / thùng / dịch vụ


12

Trong một câu trả lời tôi đã được khuyến khích sử dụng service call phone 2 s16 "$number". Nó hoạt động, nhưng trong service listtôi thấy những điều hữu ích khác tôi không biết cách sử dụng và không thể dễ dàng tìm thấy thông tin trên Internet.

Tôi không thấy bất kỳ sự hướng nội nào servicengoài việc service listtự mình tìm ra ...

Nơi để tìm mô tả đầy đủ hơn về các cuộc gọi "dịch vụ" và các tham số của chúng?


1
Câu hỏi hay ...
Android Quesito

Câu trả lời:


5

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


6

Vấn đề thực sự service calllà mã giao dịch không chỉ không có giấy tờ mà còn không được đảm bảo ổn định - chúng có thể được thay đổi âm thầm giữa các phiên bản Android. Do đó, service callcác lệnh không bao giờ được sử dụng ngoại trừ gỡ lỗi riêng tư, khi bạn biết phiên bản Android nào được sử dụng.

Thí dụ:

(Ở đây FIRST_CALL_TRANSACTION = 1, vì vậy mã giao dịch thực tế nên được sử dụng trong service call phonelệnh là số được thấy trong nguồn cộng 1.)

Lưu ý rằng trong phiên bản mới TRANSACTION_supplyPukđã được chèn vào giữa và tất cả các mã sau đây được chuyển sang 1. Mọi thứ được sử dụng service call phoneđể thực hiện các giao dịch đó sẽ bị phá vỡ khủng khiếp khi được sử dụng trên Android 4.2.2 - các mã tương tự sẽ dẫn đến việc gọi các phương thức hoàn toàn khác nhau , có thể với kết quả thảm hại.


Có một số thứ cao hơn một chút so với service call, nhưng vẫn cho phép nhiều thứ được thực hiện từ bảng điều khiển siêu người dùng?
Vi0

4

Không có tài liệu. Nhưng bạn có thể tìm thấy tất cả thông tin bạn đang tìm kiếm trong mã nguồn Android. service listcung cấp cho bạn tên gói. Vì vậy, đối với các phonedịch vụ đó là com.android.internal.telephony.ITelephony. Bạn sẽ tìm thấy tất cả các thông số có thể service call phoneđược liệt kê trong com/android/internal/telephony/ITelephony.javaphiên bản Android của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.