เป็นไปได้ไหมที่จะหยุดแอพ Android จากคอนโซล? สิ่งที่ต้องการ:
adb stop com.my.app.package
มันจะทำให้กระบวนการทดสอบของเราเร็วขึ้นมาก ตอนนี้เราถอนการติดตั้ง / ติดตั้งแอปทุกครั้งเพื่อให้แน่ใจว่ากรณีทดสอบด้วยตนเองเริ่มต้นด้วยสถานะที่สะอาด
เป็นไปได้ไหมที่จะหยุดแอพ Android จากคอนโซล? สิ่งที่ต้องการ:
adb stop com.my.app.package
มันจะทำให้กระบวนการทดสอบของเราเร็วขึ้นมาก ตอนนี้เราถอนการติดตั้ง / ติดตั้งแอปทุกครั้งเพื่อให้แน่ใจว่ากรณีทดสอบด้วยตนเองเริ่มต้นด้วยสถานะที่สะอาด
คำตอบ:
แก้ไข: อีกไม่นานหลังจากที่ฉันเขียนโพสต์นี้และได้รับการยอมรับว่าเป็นคำตอบam force-stop
คำสั่งถูกนำมาใช้โดยทีม Android ตามที่ระบุไว้ในคำตอบนี้
อีกทางเลือกหนึ่ง:แทนที่จะหยุดแอพเนื่องจากคุณพูดถึงการต้องการ "clean slate" สำหรับการทดสอบแต่ละครั้งคุณสามารถใช้adb shell pm clear com.my.app.package
ซึ่งจะหยุดกระบวนการแอปและล้างข้อมูลที่เก็บไว้ทั้งหมดสำหรับแอปนั้น
หากคุณใช้ Linux:
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
วิธีนี้คุณไม่ต้องคิด ID กระบวนการ
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 รักษาข้อมูลที่เชื่อมโยงกับแอปในปัจจุบัน อย่างไรก็ตามหากคุณต้องการกระดานชนวนที่สะอาดเหมือนที่คุณพูดถึงคุณอาจไม่ต้องการใช้ตัวเลือกนั้น
หากคุณกำหนดเป้าหมายอุปกรณ์ที่ไม่ได้รูทและ / หรือมีบริการใน APK ที่คุณไม่ต้องการหยุดเช่นกันโซลูชันอื่นจะไม่ทำงาน
ในการแก้ปัญหานี้ฉันได้หันไปใช้ตัวรับข้อความบรอดคาสต์ที่ฉันเพิ่มลงในกิจกรรมของฉันเพื่อหยุด
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
ตาม MAC "การควบคุมการเข้าถึงบังคับ" คุณอาจได้รับอนุญาตให้ฆ่ากระบวนการที่ไม่ได้เริ่มจากรูท
มีความสุข!
ใน eclipse ไปที่มุมมอง DDMS และในแท็บอุปกรณ์คลิกกระบวนการที่คุณต้องการฆ่าภายใต้อุปกรณ์ที่คุณต้องการฆ่ามัน จากนั้นคุณเพียงแค่ต้องกดปุ่มหยุดและมันควรจะฆ่ากระบวนการ
ฉันไม่แน่ใจว่าคุณจะทำสิ่งนี้จากเครื่องมือบรรทัดคำสั่ง แต่ต้องมีวิธี บางทีคุณอาจทำมันผ่านเชลล์ adb ...
pkill NAMEofAPP
ขนมหวานที่ไม่ใช่รูต, termux & เทอร์มินัลอีมูเลเตอร์