是否可以从控制台停止 Android 应用程序?就像是:
adb stop com.my.app.package
它将大大加快我们的测试过程。现在我们每次都卸载/安装应用程序,以确保手动测试用例以干净的状态开始。
停止应用程序的干净方法是:
adb shell am force-stop com.my.app.id
这样您就不必弄清楚进程 ID。
编辑:在我写这篇文章并被接受为答案很久之后,该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>
首先,将应用程序放入后台(按设备的主页按钮)
然后......在终端......
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 选项保留当前与应用关联的数据。但是,如果您想要一个像您提到的那样干净的石板,您可能不想使用该选项。
如果您以非 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
“停止”命令实现为force-stop
;停止后台应用程序运行。如果它在前台,它也会停止:例如。
adb shell am force-stop com.android.providers.telephony
清除包裹也会删除它们的数据,例如。
adb shell pm clear com.android.providers.telephony
将删除你所有的短信
小心你选择哪一个。
adb shell killall -9 com.your.package.name
根据MAC“强制访问控制”,您可能有权杀死不是由root启动的进程
玩得开心!
如果您正在寻找的只是杀死一个包
pkill package_name
应该管用
我在 Linux 上尝试了所有答案,在无根设备 API 级别 23 上调试没有任何效果,所以我从开发人员选项 -> 应用程序部分 -> 找到了调试的替代方案 -> 选中不要在将应用程序置于后台时保持活动被杀
PS 调试完成后记得取消勾选
在 Eclipse 中转到 DDMS 透视图,然后在设备选项卡中单击要在要杀死它的设备下杀死的进程。然后,您只需要按下停止按钮,它就会终止该过程。
我不确定您如何从命令行工具执行此操作,但必须有一种方法。也许你通过 adb shell 来做到这一点......
pkill NAMEofAPP
无根棉花糖、termux 和终端仿真器。