从控制台停止Android应用

时间:2010-06-25 10:00:40

标签: android testing adb

是否可以从控制台停止Android应用?类似的东西:

adb stop com.my.app.package

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

12 个答案:

答案 0 :(得分:486)

停止应用的简洁方法是:

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

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

答案 1 :(得分:131)

修改:在我撰写此帖后很久就被接受为答案,Android团队am force-stop命令为implemented,如{{3}所述}}

或者:而不是仅停止应用,因为您提到每次测试运行需要“干净的平板”,您可以使用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>

答案 2 :(得分:21)

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

然后....在一个终端....

private Point getNearestPoint(List<Point> pointList, Point target) {
    Point nearest = null;
    double shortestDistance = Double.MAX_VALUE;
    double distance = 0;

    for(Point p : pointList) {
        distance = getDistance(p, target);
        if(distance < shortestDistance) {
            shortestDistance = distance;
            nearest = p;
        }
    }

    return nearest;
}

private double getDistance(Point p1, Point p2) {
    return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));
}

答案 3 :(得分:14)

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

答案 4 :(得分:9)

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

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

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

答案 5 :(得分: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

答案 6 :(得分:2)

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

pkill package_name 

应该有效

答案 7 :(得分:0)

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

我不确定你是如何从命令行工具那样做的,但必须有办法。也许你是通过adb shell来实现的......

答案 8 :(得分:0)

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

根据MAC“强制访问控制” 您可能有权终止进程 不是由root

启动的

玩得开心!

答案 9 :(得分:0)

我在Linux上尝试过所有答案,但无法在无根设备API级别23上进行调试, 所以我找到了调试的替代方法 从开发者选项->应用程序部分->选中不保留活动 这样,当您将应用程序置于后台时,它就会被杀死

P.S记得在调试完成后取消选中它

答案 10 :(得分:0)

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

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

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

adb shell pm clear com.android.providers.telephony

会删除你所有的短信

小心你选择哪一个。

答案 11 :(得分:-1)

pkill NAMEofAPP

非根棉花糖,termux&amp;终端模拟器。