231

是否可以从控制台停止 Android 应用程序?就像是:

adb stop com.my.app.package

它将大大加快我们的测试过程。现在我们每次都卸载/安装应用程序,以确保手动测试用例以干净的状态开始。

4

12 回答 12

686

停止应用程序的干净方法是:

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

这样您就不必弄清楚进程 ID。

于 2012-09-05T03:45:25.700 回答
161

编辑:在我写这篇文章并被接受为答案很久之后,该am force-stop命令由 Android 团队实施,如本答案所述。

或者:与其只是停止应用程序,因为您提到每次测试运行都需要“干净的状态”,您可以使用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 shell
android $ su
android # ps
android # kill <process id from ps output>

于 2010-06-25T10:38:49.663 回答
40

首先,将应用程序放入后台(按设备的主页按钮)

然后......在终端......

adb shell am kill com.your.package
于 2015-11-15T03:21:23.820 回答
18

您可以从设备控制台使用以下内容:pm disable com.my.app.package这将杀死它。然后使用pm enable com.my.app.package,以便您可以再次启动它。

于 2011-12-30T22:31:11.270 回答
10

如果您有权访问应用程序包,那么您可以使用 -r 选项进行安装,如果它当前正在作为副作用运行,它将终止该进程。像这样:

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

-r 选项保留当前与应用关联的数据。但是,如果您想要一个像您提到的那样干净的石板,您可能不想使用该选项。

于 2011-11-09T10:32:07.250 回答
7

如果您以非 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
于 2013-07-17T08:14:12.240 回答
3

“停止”命令实现为force-stop;停止后台应用程序运行。如果它在前台,它也会停止:例如。

adb shell am force-stop com.android.providers.telephony

清除包裹也会删除它们的数据,例如。

adb shell pm clear com.android.providers.telephony

将删除你所有的短信

小心你选择哪一个。

于 2021-07-25T20:56:46.303 回答
2

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

根据MAC“强制访问控制”,您可能有权杀死不是由root启动的进程

玩得开心!

于 2018-09-04T21:16:38.277 回答
2

如果您正在寻找的只是杀死一个包

pkill package_name 

应该管用

于 2016-03-14T10:32:26.917 回答
1

我在 Linux 上尝试了所有答案,在无根设备 API 级别 23 上调试没有任何效果,所以我从开发人员选项 -> 应用程序部分 -> 找到了调试的替代方案 -> 选中不要在将应用程序置于后台时保持活动被杀

PS 调试完成后记得取消勾选

于 2020-08-18T20:52:29.500 回答
0

在 Eclipse 中转到 DDMS 透视图,然后在设备选项卡中单击要在要杀死它的设备下杀死的进程。然后,您只需要按下停止按钮,它就会终止该过程。

我不确定您如何从命令行工具执行此操作,但必须有一种方法。也许你通过 adb shell 来做到这一点......

于 2010-06-25T10:07:29.283 回答
-2
pkill NAMEofAPP

无根棉花糖、termux 和终端仿真器。

于 2016-12-18T05:14:57.707 回答