从控制台停止一个Android应用程序

是否有可能在主机上停止Android应用程序?喜欢的东西:

adb stop com.my.app.package

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

282958 次浏览

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

我不确定如何从命令行工具做到这一点,但肯定有一种方法。也许你可以通过adb shell来做…

在我写了这篇文章并被接受为答案后很长一段时间,Android团队将am force-stop命令改为实现,如这个答案中所述。

而不是仅仅停止应用程序,因为你提到想要一个“干净的slate”为每次测试运行,你可以使用adb shell pm clear com.my.app.package,这将停止应用程序进程而且清除该应用程序的所有存储数据。


如果你在Linux上:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill < / p >

这只适用于在运行shell时立即拥有root权限的设备/模拟器。可以稍微改进一下,预先调用su

否则,你可以这样做(手动,或者我认为脚本):
pc $ adb -d shell < br > android $ su < br > android # ps < br > android # kill <process id from ps output> < / p >

如果您可以访问应用程序包,那么您可以使用-r选项进行安装,如果进程当前正在运行,它将作为副作用杀死进程。是这样的:

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

-r选项保留当前与应用程序相关的数据。然而,如果你想要一个干净的石板,你可能不想使用该选项。

你可以从设备控制台中使用以下命令:pm disable com.my.app.package,这将杀死它。然后使用pm enable com.my.app.package,这样你就可以再次启动它。

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

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

这样就不需要计算进程ID。

如果您的目标是一个非根设备和/或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

首先,将应用程序放到后台(按下设备的home键)

然后……在终端....

adb shell am kill com.your.package

如果你只是想干掉一个包裹

pkill package_name

应该工作

pkill NAMEofAPP

无根棉花糖,termux &终端模拟器。

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

根据MAC强制访问控制 您可能已经获得了终止进程的权限 不是根

开始的

玩得开心!

我在Linux上尝试了所有的答案,在unroot设备API级别23上调试没有任何工作, 所以我找到了调试的替代方案 From Developer Options ->应用程序部分->检查不保留活动 这样当你把应用放到后台时它就会被杀死

附注:在完成调试后,记得取消选中它

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

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

清理包也删除他们的数据,如。

adb shell pm clear com.android.providers.telephony

会删除你所有的短信吗

你要小心选择哪一个。