从控制台停止Android应用程序

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

adb stop com.my.app.package 

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

编辑:很长时间后,我写这篇文章,它被接受为答案, am force-stop命令是由Android团队实现的,正如在这个答案中提到的。

另外:不要只是停止应用程序,因为你提到想为每个testing运行“干净的石板”,你可以使用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>

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

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

这样你就不必找出进程ID。

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

然后….在terminal….

 adb shell am kill com.your.package 

你可以在设备控制台中使用以下命令: pm disable com.my.app.package ,它会杀死它。 然后使用pm enable com.my.app.package以便您可以再次启动它。

如果您有权访问应用程序包,则可以使用-r选项进行安装,如果当前正在运行的副作用将会终止该进程。 喜欢这个:

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

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

如果您定位的是根目录设备,并且/或者您的APK中有服务,而您不想停止,则其他解决scheme将无法工作。

为了解决这个问题,我使用了一个广播消息接收器,我已经添加到我的活动中来阻止它。

 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 

应该工作

在eclipse中,转到DDMS的angular度,在设备选项卡中点击你想杀死它的设备下你想杀死的进程。 你只需要按停止button,它应该杀死进程。

我不知道如何从命令行工具做到这一点,但必须有一种方法。 也许你是通过adb shell来做的…

 pkill NAMEofAPP 

非根植棉花糖,termux和terminal仿真器。