सभी "/ प्रणाली / बिन / सेवा" कॉल का विवरण कहां से प्राप्त करें?


12

में एक ही जवाब मैं उपयोग करने के लिए सलाह दी गई थी service call phone 2 s16 "$number"। यह काम करता है, लेकिन service listमैं अन्य उपयोगी चीजों को देखता हूं जिन्हें मैं नहीं जानता कि कैसे उपयोग करना है और इंटरनेट पर आसानी से जानकारी नहीं मिल सकती है।

मैं खुद को खोजने के serviceअलावा किसी भी आत्मनिरीक्षण को नहीं देखता service list...

"सेवा" कॉल और उनके मापदंडों का अधिक संपूर्ण विवरण कहां मिलेगा?


1
अच्छा सवाल ...
Android Quesito

जवाबों:


5

संक्षेप में

सेवा कॉल कमांड से संबंधित कोड केवल फ़ंक्शन और ऑर्डर के तर्क हैं, जिस पर फ़ंक्शन उस सेवा की सहायता फ़ाइल में होता है। यह एक सिंटैक्स है

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>

विस्तार से
मैंने इसके बारे में जानने के लिए बहुत सारी समस्याओं का सामना किया और इसलिए मैं क्लिपबोर्ड सेवा की मदद से समाधान साझा करूंगा।
सबसे पहले आपको उस सेवा के बारे में जानना
होगा जिसमें आप रुचि रखते हैं - इसके लिए आपको उन सभी सेवाओं को देखना होगा जो टाइपिंग के लिए विशेष रूप से एंड्रॉइड सिस्टम के लिए हैं।

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 है।
यह जानने के लिए कि आपको IClipboard.aidl के लिए Google पर खोजना होगा।
आपको परिणामों में 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 के बाद आपका रास्ता कहाँ है।

/core/java/android/content/IClipboard.aidl

जैसा कि ये सेवा कॉल कोड एंड्रॉइड सिस्टम पर निर्भर हैं, इसलिए आपको अपना एंड्रॉइड ओएस नाम जानना होगा- मेरे मामले में यह 8.1.0 है,
इसलिए मैं निम्नलिखित वेबसाइट पर जाऊंगा जहां Google वहां कोड डालता है और मेरे ओएस संस्करण का चयन करता है। पृष्ठ के लिए बाएं हाथ की ओर -

https://android.googlesource.com/platform/frameworks/base/

मेरे मामले में यह एंड्रॉइड-8.1.0_r50 है। मैं उस पर क्लिक करूंगा और फिर उसके बाद मेरा यूआरएल इस तरह दिखाई देगा

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 होगा क्योंकि यह सहायक फाइल में सातवें स्थान पर होता है। इसी तरह अन्य तरीकों के लिए।
तो अगर मैं सातवीं विधि को कॉल करना चाहता हूं, तो मैं टाइप करूंगा

adb shell service call clipboard 7 

जैसा कि आपने देखा होगा कि मैंने CallPackage नाम नहीं डाला है क्योंकि इसकी आवश्यकता नहीं है।

यदि विधि को तर्कों की आवश्यकता है, तो आप इसे इस उदाहरण में शो के रूप में पास कर सकते हैं।
आइए हम एक विधि मानते हैं जिसका कोड क्लिपबोर्ड में 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 झूठे के लिए है।

TIP उस adb कमांड को निष्पादित करते समय होने वाली किसी भी त्रुटि के लिए जाँच करने के लिए logcat (android स्टूडियो में) खुला रखें।
स्रोत


6

इसके साथ वास्तविक समस्या service callयह है कि लेन-देन कोड न केवल अनिर्दिष्ट हैं, बल्कि स्थिर होने की गारंटी नहीं है - उन्हें एंड्रॉइड संस्करणों के बीच चुपचाप बदला जा सकता है। इस वजह से, service callनिजी डिबगिंग को छोड़कर कमांड का उपयोग कभी नहीं किया जाना चाहिए, जब आप जानते हैं कि एंड्रॉइड संस्करण का उपयोग क्या है।

उदाहरण:

(यहां FIRST_CALL_TRANSACTION 1), इसलिए वास्तविक लेनदेन कोड जो service call phoneकमांड में इस्तेमाल किया जाना चाहिए , स्रोत 1 में देखा गया नंबर है।)

ध्यान दें कि नए संस्करण TRANSACTION_supplyPukमें बीच में डाला गया था, और सभी निम्नलिखित कोड अब 1 से स्थानांतरित कर दिए गए हैं। जो कुछ भी service call phoneउन लेनदेन को करने के लिए उपयोग किया जाता है वे एंड्रॉइड 4.2.2 पर उपयोग किए जाने पर बुरी तरह से टूट जाएंगे - एक ही कोड के परिणामस्वरूप पूरी तरह से अलग-अलग तरीकों से कॉल किया जाएगा। , संभवतः विनाशकारी परिणामों के साथ।


क्या कोई ऐसी चीज़ है जो थोड़ा अधिक उच्च स्तर की है service call, फिर भी सुपरयूज़र कंसोल से कई चीजों को करने की अनुमति देता है?
वि ०

4

कोई दस्तावेज नहीं है। लेकिन आप सभी जानकारी पा सकते हैं जो आप एंड्रॉइड सोर्स कोड में देख रहे हैं। service listआपको पैकेज नाम देता है। तो phoneसेवा के लिए यह है com.android.internal.telephony.ITelephony। आपको अपने Android संस्करण के लिए service call phoneसूचीबद्ध सभी संभावित पैरामीटर मिल जाएंगे com/android/internal/telephony/ITelephony.java

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.