जवाबों:
संपादित करें: लंबे समय बाद मैं इस पोस्ट ने लिखा है और इसे स्वीकार कर लिया गया था जवाब के रूप में, 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>
एप्लिकेशन को रोकने का साफ तरीका है:
adb shell am force-stop com.my.app.package
इस तरह आपको प्रक्रिया आईडी का पता नहीं लगाना है।
force-stop
कमांड मौजूद होने से पहले अपना जवाब ऊपर लिखा था। मैंने अपने उत्तर को इस ओर इंगित करने के लिए अद्यतन किया।
Android 9.0 API Level 28
, ऐप अभी भी ऐप के संबंध में पाए जाने के बावजूद हाल के ऐप्स में प्रदर्शित है PID
। क्या आप जानते हैं कि ऐप को पूरी तरह से कैसे रोकें जो कि पृष्ठभूमि ऐप से भी है?
सबसे पहले, एप्लिकेशन को पृष्ठभूमि में रखें (डिवाइस का होम बटन दबाएं)
फिर एक टर्मिनल में…।
adb shell am kill com.your.package
आप डिवाइस कंसोल से निम्न का उपयोग कर सकते हैं: pm disable com.my.app.package
जो इसे मार देगा। फिर उपयोग करें pm enable com.my.app.package
ताकि आप इसे फिर से लॉन्च कर सकें।
adb shell
, तो su
पहले चलाएं ।
यदि आपके पास एप्लिकेशन पैकेज तक पहुंच है, तो आप -r विकल्प के साथ इंस्टॉल कर सकते हैं और यह प्रक्रिया को मार देगा यदि यह वर्तमान में साइड इफेक्ट के रूप में चल रहा है। ऐशे ही:
adb -d install -r MyApp.apk ; adb -d shell am start -a android.intent.action.MAIN -n com.MyCompany.MyApp/.MyActivity
-R विकल्प वर्तमान में ऐप से जुड़े डेटा को सुरक्षित रखता है। हालाँकि, यदि आप एक साफ स्लेट चाहते हैं जैसे कि आप उल्लेख करते हैं कि आप उस विकल्प का उपयोग नहीं करना चाहते हैं।
यदि आप एक गैर-रूट किए गए डिवाइस को लक्षित करते हैं और / या आपके पास ऐसी सेवाएँ हैं, जिन्हें आप बंद नहीं करना चाहते हैं, तो अन्य समाधान काम नहीं करेंगे।
इस समस्या को हल करने के लिए, मैंने एक प्रसारण संदेश रिसीवर का सहारा लिया है जिसे रोकने के लिए मैंने अपनी गतिविधि में जोड़ा है।
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
यदि आप सभी की तलाश कर रहे हैं तो पैकेज को मार रहा है
pkill package_name
कार्य करना चाहिए
adb shell killall -9 com.your.package.name
मैक "अनिवार्य अभिगम नियंत्रण" के अनुसार आपको संभवतः प्रक्रिया को मारने की अनुमति है जो रूट द्वारा शुरू नहीं की गई है
मज़े करो!
ग्रहण में डीडीएमएस परिप्रेक्ष्य में जाएं और डिवाइस टैब में उस प्रक्रिया पर क्लिक करें जिसे आप उस डिवाइस के तहत मारना चाहते हैं जिसे आप इसे मारना चाहते हैं। आपको बस स्टॉप बटन दबाने की जरूरत है और यह प्रक्रिया को मारना चाहिए।
मुझे यकीन नहीं है कि आप कमांड लाइन टूल से यह कैसे करेंगे लेकिन एक तरीका होना चाहिए। शायद आप इसे adb शेल के माध्यम से करते हैं ...
pkill NAMEofAPP
गैर निहित मार्शमैलो, टर्मक्स और टर्मिनल एमुलेटर।