Остановка приложения Android с консоли

Можно ли остановить приложение Android с консоли? Что-то вроде:

adb stop com.my.app.package

Это ускорит наш процесс тестирования. В настоящее время мы каждый раз удаляем/устанавливаем приложение, чтобы убедиться, что ручные тестовые примеры начинаются с чистого состояния.

Ответ 1

Изменить:. После того, как я написал этот пост и был принят в качестве ответа, команда 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

Это будет работать только для устройств/эмуляторов, где у вас есть root сразу после запуска оболочки. Вероятно, это может быть немного уточнено, чтобы называть su заранее.

В противном случае вы можете сделать (вручную или, предположим, сценарий):
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>

Ответ 2

Чистый способ остановки приложения:

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

Таким образом, вам не нужно определять идентификатор процесса.

Ответ 3

Сначала поместите приложение в фоновый режим (нажмите кнопку дома устройства)

Тогда.... в терминале....

adb shell am kill com.your.package

Ответ 4

вы можете использовать следующее с консоли устройства: pm disable com.my.app.package, которая его убьет. Затем используйте pm enable com.my.app.package, чтобы снова запустить его.

Ответ 5

Если у вас есть доступ к пакету приложения, вы можете установить его с параметром -r, и он убьет процесс, если он в настоящее время работает как побочный эффект. Вот так:

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

Параметр -r сохраняет данные, связанные с приложением. Однако, если вы хотите, чтобы чистый сланец, как вы упоминаете, вы не захотите использовать эту опцию.

Ответ 6

Если вы нацеливаете некорневое устройство и/или имеете в себе службы 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

Ответ 7

Если все, что вы ищете, убивает пакет

pkill package_name 

должен работать

Ответ 8

В eclipse перейдите на страницу DDMS, а на вкладке "устройства" щелкните процесс, который вы хотите убить, на устройстве, которое вы хотите его убить. Вам просто нужно нажать кнопку остановки, и он должен убить процесс.

Я не уверен, как вы это сделаете из инструмента командной строки, но должен быть способ. Возможно, вы делаете это через оболочку adb...

Ответ 9

pkill NAMEofAPP

Некомбинированный зефир, termux и эмулятор терминала.