从控制台停止Android应用

hpi*_*que 189 testing android adb

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

adb stop com.my.app.package
Run Code Online (Sandbox Code Playgroud)

它会加速我们的测试过程.现在我们每次卸载/安装应用程序以确保手动测试用例以干净状态开始.

小智 520

停止应用程序的简洁方法是:

adb shell am force-stop com.my.app.package
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该是这个问题的公认答案.该问题不包括有根设备. (23认同)
  • `错误:未知命令:force-stop` - Android 2.3 (19认同)
  • @Dimitris我在`force-stop`命令存在之前写了上面的答案.我更新了我的答案以指出这一点. (8认同)
  • @ zed_0xff它仅适用于Honeycomb及以上版本. (8认同)
  • 请注意,这不适用于系统应用程序. (6认同)
  • 我还用一种真正为运行测试提供“干净的石板”的好方法更新了我的答案。 (2认同)

Chr*_*Orr 138

编辑:在我写完这篇文章后很久就被接受为答案,该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>

  • 啊,听起来你没有root设备.它绝对适用于模拟器!:) (9认同)
  • 无法让它工作(许可被拒绝杀死和su),但+1显示我我可以做的比我想到的更多adb. (6认同)

del*_*116 24

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

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

adb shell am kill com.your.package
Run Code Online (Sandbox Code Playgroud)

  • ***注意***我认为这不再适用于API级别> 22. (8认同)
  • 这有效。不过,请确保先将应用程序置于后台。 (7认同)

Som*_*ere 16

您可以在设备控制台中使用以下命令:pm disable com.my.app.package这将终止它.然后使用,pm enable com.my.app.package以便您可以再次启动它.

  • 在非根电话上,这似乎什么都不做。 (2认同)
  • 注意:你需要`adb shell`,然后先运行`su`. (2认同)

Tho*_*asW 10

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

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

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


Pat*_*chi 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以发出此adb命令来停止您的活动:

adb shell am broadcast -a com.example.TestActivity.STOP
Run Code Online (Sandbox Code Playgroud)


Zim*_*mba 6

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

adb shell am force-stop com.android.providers.telephony
Run Code Online (Sandbox Code Playgroud)

清除包裹也会删除其数据,例如。

adb shell pm clear com.android.providers.telephony
Run Code Online (Sandbox Code Playgroud)

会删除你所有的短信

请小心选择哪一个。