टर्मिनल के माध्यम से विशिष्ट ऐप की कार्रवाई कैसे चलाएं?


13

मुझे SSH के माध्यम से एक दूरस्थ कंप्यूटर से अपना एंड्रॉइड ऐप चलाने की आवश्यकता है, लेकिन मैं कमांड-लाइन विशेषज्ञ नहीं हूं, इसलिए मैं जानना चाहूंगा: ऐप की एक विशिष्ट कार्रवाई कैसे चलाएं ? (न सिर्फ इसे खोलें) जिसका तात्पर्य है: किसी एप्लिकेशन के संभावित कार्यों का सटीक सिंटैक्स कैसे पता करें?

उदाहरण: मैं अपने कंप्यूटर से अपने फोन पर एक ऑडियो-रिकॉर्डिंग ऐप शुरू करना चाहता हूं, और रिमोट से रिकॉर्डिंग शुरू करना चाहता हूं। क्या यह संभव है?

धन्यवाद, एंड्रिया

जवाबों:


12

इसे इस्तेमाल करो:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

किसी ऐप को नियंत्रित करने के लिए, आपको <package_name>और <full_class_name>कमांड के सही मान रखने होंगे । उदाहरण के लिए, आप com.google.gmail/com.google.gmail.check_mailकमांड के अंतिम भाग के रूप में (Hypothetical नाम) का उपयोग कर सकते हैं ।

किसी ऐप का पैकेज नाम प्राप्त करना आसान है , लेकिन कार्रवाई का वर्ग नाम प्राप्त करना आसान नहीं है। दो समस्याएं हैं:

  1. कई ऐप डेवलपर वर्ग की जानकारी को निजी रखते हैं।

  2. सभी डेवलपर्स स्मार्ट मॉड्यूलर प्रोग्रामिंग नहीं करते हैं। कई वर्गों में एक ऐप को विभाजित करने की इसकी अच्छी आदत है, जिसे इंटेंट्स द्वारा ट्रिगर किया जा सकता है, लेकिन सभी डेवलपर्स स्मार्ट नहीं हैं।

1 समस्या का समाधान: एपीकेटूल का उपयोग करके एप्लिकेशन को डिकम्पाइल करें और सभी जानकारी देखें। अन्य तरीके भी हैं, लेकिन यह एक हमेशा काम करने वाला तरीका है (जब तक कि ऐप एसडीके के बजाय एनडीके पर आधारित नहीं है)।

दूसरी समस्या का हल: कुछ नहीं।

चिंता न करें, अधिकांश लोकप्रिय ऐप सर्वोत्तम प्रोग्रामिंग अभ्यास का पालन करते हैं और वे प्रदान करते Public APIहैं जिनसे आप कक्षा की जानकारी प्राप्त कर सकते हैं।


आप मानकों के आधार पर कुछ स्पष्टीकरण जोड़ा नहीं जा सका <package_name>और <full_class_name>, और उन्हें कैसे प्राप्त करने के लिए? मेरे लिए, कम से कम उत्तरार्द्ध स्पष्ट नहीं है।
इज़्ज़

@ इज़ी ने स्पष्टीकरण जोड़ा ... उत्तर की समीक्षा करें, फिर से।
बजे Android क्वेसिटो सेप

धन्यवाद! +1 मुझसे: डी कॉम्पैक्ट और समझने में आसान। मैं कुछ लिंक जोड़ने की स्वतंत्रता लूंगा, अगर आप बुरा न मानें, तो apktools(गैर-डेवलपर्स अन्यथा सोच सकते हैं कि यह एसडी का हिस्सा है और खो गया;)
इज़ी

@Izzy यहाँ मेरी समस्या है: मैं सेटिंग ऐप की इस गतिविधि को लॉन्च करने में असमर्थ हूँ com.android.settings/.Settings$StorageSettingsActivity:। इसे स्वयं आज़माएं। दरअसल, $साइन के बाद वह स्ट्रिंग क्या है ? क्या यह सेटिंग गतिविधि में एक उप-वर्ग की तरह है?
गोकुल एनसी

@ गोकुलएनसी आपको पूरी बात (एकल उद्धरण) उद्धृत करने की आवश्यकता हो सकती है, या $StorageSettingsActivityएक चर के रूप में देखा जा सकता है और एक खाली स्ट्रिंग के लिए "विस्तारित" हो सकता है (जब तक कि उस नाम से परिभाषित कोई चर नहीं हो)।
इज़ी

9

जैसा सचिन शेखर ने कहा, आपको निम्नलिखित आदेश का उपयोग करना चाहिए:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

एक ठोस उदाहरण देखें:

  • अपने Android डिवाइस या किसी भी बाज़ार स्थानों से एपीके फ़ाइल प्राप्त करना
  • यह आदेश चलाना:

aapt dump xmltree com.android.settings*.apk AndroidManifest.xml

मैं "टेदरिंग" मेनू शुरू करना चाहूंगा, इसलिए मैं आउटपुट में एक गतिविधि खोजता हूं:

(...)
   E: activity (line=190)
    A: android:name(0x01010003)=".TetherSettings" (Raw: ".TetherSettings")
(...)

तो अंतिम आदेश है:

am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings

aaptआदेश का हिस्सा है एंड्रॉयड एसडीके


1
: डी टेस्ट इसे, यह एक आकर्षण के रूप में काम करता है। यह एक वास्तविक जीवन है © ® ™ काम कर उदाहरण।
गाइल्स क्वेनॉट

2
भाग्य और कंप्यूटर विज्ञान काफी विपरीत हैं। यह एक सापेक्ष पथ है।
गाइल्स क्वेनोट

2
नहीं, आप पेट भर सकते हैं com.android.settings, इसीलिए मैंने कहा कि यह सापेक्ष है। आप इसे किसी भी ऐप पर टेस्ट करें।
गाइल्स क्वेनोट

2
मैंने यह नहीं कहा कि यह अन्य ऐप्स के साथ काम नहीं करेगा। वर्ग नाम से पहले डॉट जादू करता है। लेकिन, इसे प्रोत्साहित नहीं किया जाना चाहिए।
Android क्वेसिटो सेप

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