एंड्रॉइड ऐप को कंसोल से रोकना


205

क्या कंसोल से एंड्रॉइड ऐप को रोकना संभव है? कुछ इस तरह:

adb stop com.my.app.package

यह हमारी परीक्षण प्रक्रिया को इतना तेज कर देगा। अभी हम प्रत्येक बार एप्लिकेशन को अनइंस्टॉल / इंस्टॉल करते हैं ताकि यह सुनिश्चित हो सके कि मैनुअल टेस्ट के मामले एक साफ स्थिति से शुरू होते हैं।

जवाबों:


146

संपादित करें: लंबे समय बाद मैं इस पोस्ट ने लिखा है और इसे स्वीकार कर लिया गया था जवाब के रूप में, am force-stopआदेश था कार्यान्वित के रूप में उल्लेख किया है, Android टीम द्वारा, इस सवाल का जवाब

वैकल्पिक रूप से: बस एप्लिकेशन को रोकने के बाद से आप एक "साफ स्लेट" प्रत्येक परीक्षा रन के लिए इच्छुक उल्लेख करते हैं, आप उपयोग कर सकते हैं के बजाय adb shell pm clear com.my.app.package, जो एप्लिकेशन प्रक्रिया बंद हो जाएगा और उस ऐप्स के लिए सभी संग्रहीत डेटा को साफ।


यदि आप लिनक्स पर हैं:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

यह केवल उन उपकरणों / एमुलेटरों के लिए काम करेगा जहां आपके पास एक शेल चलाने पर तुरंत रूट होता है। यह शायद suपहले से कॉल करने के लिए थोड़ा परिष्कृत किया जा सकता है ।

अन्यथा, आप कर सकते हैं (मैन्युअल रूप से, या मुझे लगता है कि स्क्रिप्टेड):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>


6
इसे काम करने के लिए नहीं मिला (अनुमति दोनों को मारने और सु के लिए इनकार कर दिया), लेकिन मुझे दिखाने के लिए +1 मैं अदब के साथ जितना सोचा था उससे बहुत अधिक कर सकता हूं।
hpique

9
आह, लगता है जैसे आपके पास कोई जड़ डिवाइस नहीं है। यह निश्चित रूप से कम से कम एमुलेटर पर काम करता है! :)
क्रिस्टोफर ओर

1
हो सकता है कि आपको विभाजन को पढ़ने-लिखने और adb को रूट के रूप में चलाना हो: adb remount; adb root # यह सिर्फ एक बेवकूफी
भरा

570

एप्लिकेशन को रोकने का साफ तरीका है:

adb shell am force-stop com.my.app.package

इस तरह आपको प्रक्रिया आईडी का पता नहीं लगाना है।


28
इस समस्या के लिए स्वीकृत उत्तर होना चाहिए। प्रश्न में एक निहित डिवाइस शामिल नहीं है।
दिमित्रिस

10
@Dimitris मैंने force-stopकमांड मौजूद होने से पहले अपना जवाब ऊपर लिखा था। मैंने अपने उत्तर को इस ओर इंगित करने के लिए अद्यतन किया।
क्रिस्टोफर ओर

2
साथ ही मैंने अपने जवाब को अद्यतन परीक्षणों के लिए "क्लीन स्लेट" प्रदान करने के एक अच्छे तरीके के साथ अद्यतन किया।
क्रिस्टोफर ओर

महत्वपूर्ण बात यह है कि इसके बाद आपका ब्रॉडकास्टरेवर काम नहीं करेगा (अगले ऐप तक खुला) commonsware.com/blog/2011/07/13/…
CAMOBAP

परीक्षण किया गया Android 9.0 API Level 28, ऐप अभी भी ऐप के संबंध में पाए जाने के बावजूद हाल के ऐप्स में प्रदर्शित है PID। क्या आप जानते हैं कि ऐप को पूरी तरह से कैसे रोकें जो कि पृष्ठभूमि ऐप से भी है?
ताल्हा ०६

32

सबसे पहले, एप्लिकेशन को पृष्ठभूमि में रखें (डिवाइस का होम बटन दबाएं)

फिर एक टर्मिनल में…।

adb shell am kill com.your.package

11
ध्यान दें कि मुझे विश्वास नहीं है कि यह एपीआई स्तरों> 22 में अब काम करता है।
dell116

यह Marshmallow के साथ मेरे Nexus 5 पर है
urSus

यह काम। सुनिश्चित करें कि आपने ऐप को पहले पृष्ठभूमि में रखा है।
फिलि थ्रिल्ली

17

आप डिवाइस कंसोल से निम्न का उपयोग कर सकते हैं: pm disable com.my.app.packageजो इसे मार देगा। फिर उपयोग करें pm enable com.my.app.packageताकि आप इसे फिर से लॉन्च कर सकें।


1
एक गैर-निहित फोन पर यह कुछ भी नहीं करने के लिए लगता है।
रॉबर्ट मुइल

मैंने इसे एक गैर-रूट किए गए फोन पर चेक किया है। पहले तो कुछ अनुमति संदेशों से इनकार किया गया और फिर इसने मेरे DalvicVM ऐप / सेवा को मार दिया। बस इसे एक सेकंड दें।
लाइक यू

1
एक निहित डिवाइस पर यह काम करता है, और इसमें ऐप / सेवा को नीचे रखने में सक्षम होने का अतिरिक्त लाभ है। परीक्षण प्रयोजनों के लिए यह वांछनीय हो सकता है।
miki

2
नोट: आपको जरूरत है adb shell, तो suपहले चलाएं ।
काक्यो

चेतावनी, यह उस पैकेज के लॉन्चर आइकन शॉर्टकट को फिर से सक्षम करने के बाद भी गायब कर देगा।
एलाड नवा

10

यदि आपके पास एप्लिकेशन पैकेज तक पहुंच है, तो आप -r विकल्प के साथ इंस्टॉल कर सकते हैं और यह प्रक्रिया को मार देगा यदि यह वर्तमान में साइड इफेक्ट के रूप में चल रहा है। ऐशे ही:

adb -d install -r MyApp.apk ; adb -d shell am start -a android.intent.action.MAIN -n com.MyCompany.MyApp/.MyActivity

-R विकल्प वर्तमान में ऐप से जुड़े डेटा को सुरक्षित रखता है। हालाँकि, यदि आप एक साफ स्लेट चाहते हैं जैसे कि आप उल्लेख करते हैं कि आप उस विकल्प का उपयोग नहीं करना चाहते हैं।


7

यदि आप एक गैर-रूट किए गए डिवाइस को लक्षित करते हैं और / या आपके पास ऐसी सेवाएँ हैं, जिन्हें आप बंद नहीं करना चाहते हैं, तो अन्य समाधान काम नहीं करेंगे।

इस समस्या को हल करने के लिए, मैंने एक प्रसारण संदेश रिसीवर का सहारा लिया है जिसे रोकने के लिए मैंने अपनी गतिविधि में जोड़ा है।

public class TestActivity extends Activity {
    private static final String STOP_COMMAND = "com.example.TestActivity.STOP";

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            TestActivity.this.finish();
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //other stuff...

        registerReceiver(broadcastReceiver, new IntentFilter(STOP_COMMAND));
    }
}

इस तरह, आप अपनी गतिविधि को रोकने के लिए इस adb कमांड को जारी कर सकते हैं:

adb shell am broadcast -a com.example.TestActivity.STOP

2

यदि आप सभी की तलाश कर रहे हैं तो पैकेज को मार रहा है

pkill package_name 

कार्य करना चाहिए


नोट: यह केवल नए Android संस्करणों पर काम करता है। pkill मेरे 4.4 एमुलेटर पर उपलब्ध नहीं है, लेकिन एंड्रॉइड 6 एमुलेटर पर उपलब्ध है।
साइमन वार्टा

1

adb shell killall -9 com.your.package.name

मैक "अनिवार्य अभिगम नियंत्रण" के अनुसार आपको संभवतः प्रक्रिया को मारने की अनुमति है जो रूट द्वारा शुरू नहीं की गई है

मज़े करो!


इस कमान को चलाने के जवाब में मुझे "ऑपरेशन की अनुमति नहीं है"
अब्दुल रहमान शमीर

0

ग्रहण में डीडीएमएस परिप्रेक्ष्य में जाएं और डिवाइस टैब में उस प्रक्रिया पर क्लिक करें जिसे आप उस डिवाइस के तहत मारना चाहते हैं जिसे आप इसे मारना चाहते हैं। आपको बस स्टॉप बटन दबाने की जरूरत है और यह प्रक्रिया को मारना चाहिए।

मुझे यकीन नहीं है कि आप कमांड लाइन टूल से यह कैसे करेंगे लेकिन एक तरीका होना चाहिए। शायद आप इसे adb शेल के माध्यम से करते हैं ...


मैंने GitHub पर एक कोड स्निपेट पाया है कि कैसे यह कमांड लाइन से एक्लिप्स को चलाने के बिना किया जाता है और इसे थोड़ा बढ़ाया जाता है
sschuberth

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