【发布时间】:2011-03-08 05:19:52
【问题描述】:
是否可以从控制台停止 Android 应用程序?比如:
adb stop com.my.app.package
这将大大加快我们的测试过程。现在我们每次都卸载/安装应用程序,以确保手动测试用例以干净的状态开始。
【问题讨论】:
是否可以从控制台停止 Android 应用程序?比如:
adb stop com.my.app.package
这将大大加快我们的测试过程。现在我们每次都卸载/安装应用程序,以确保手动测试用例以干净的状态开始。
【问题讨论】:
“停止”命令实现为force-stop;停止后台应用程序运行。如果它在前台,它也会停止:例如。
adb shell am force-stop com.android.providers.telephony
清除包裹也会删除它们的数据,例如。
adb shell pm clear com.android.providers.telephony
将删除你所有的短信
小心你选择哪一个。
【讨论】:
我在 Linux 上尝试了所有答案,在无根设备 API 级别 23 上调试没有任何效果, 所以我找到了调试的替代方案 从开发人员选项-> 应用程序部分-> 选中不保留活动 这样,当您将应用程序置于后台时,它就会被杀死
P.S 调试完成后记得取消勾选
【讨论】:
adb shell killall -9 com.your.package.name
根据MAC“强制访问控制” 您可能有权终止进程 不是root启动的
玩得开心!
【讨论】:
编辑:在我写这篇文章并被接受为答案很久之后,am force-stop 命令被 Android 团队改为implemented,正如this answer 中提到的那样。
替代方案: 既然您提到希望每次测试运行都“干净”,您可以使用adb shell pm clear com.my.app.package,这将停止应用进程和 清除该应用程序的所有存储数据。
如果您使用的是 Linux:adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill
这仅适用于您在运行 shell 后立即拥有 root 权限的设备/模拟器。可以稍微改进一下,提前致电su。
否则,你可以这样做(手动,或者我想是脚本):pc $ adb -d shellandroid $ suandroid # psandroid # kill <process id from ps output>
【讨论】:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell su -0 kill 为我工作
pkill NAMEofAPP
无根棉花糖、termux 和终端仿真器。
【讨论】:
首先,将应用置于后台(按下设备的主页按钮)
然后....在终端中....
adb shell am kill com.your.package
【讨论】:
如果你正在寻找的只是杀死一个包
pkill package_name
应该工作
【讨论】:
如果您以非 root 设备为目标和/或 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
【讨论】:
停止应用程序的干净方法是:
adb shell am force-stop com.my.app.package
这样您就不必弄清楚进程 ID。
【讨论】:
force-stop 命令存在之前,我在上面写了我的答案。我更新了我的答案以指向这个。
Android 9.0 API Level 28 上测试,该应用仍然显示在最近的应用中,即使找到了关于该应用的PID。你知道如何完全停止应用程序,这意味着即使是后台应用程序?
您可以从设备控制台使用以下命令: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 选项保留当前与应用关联的数据。但是,如果您想要像您提到的那样干净,您可能不想使用该选项。
【讨论】:
在 Eclipse 中转到 DDMS 透视图,然后在设备选项卡中单击要在要终止的设备下终止的进程。然后你只需要按下停止按钮,它就会终止进程。
我不确定您如何通过命令行工具执行此操作,但一定有办法。也许你是通过 adb shell 来做的……
【讨论】: