it-roy-ru.com

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

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

adb stop com.my.app.package

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

171
hpique

Edit: Спустя долгое время после того, как я написал этот пост и он был принят в качестве ответа, команда 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 сразу после запуска Shell. Вероятно, это можно немного уточнить, чтобы заранее вызвать su.

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

127
Christopher Orr

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

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

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

462
Enrico Ros

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

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

adb Shell am kill com.your.package
20
dell116

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

14
Someone Somewhere

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

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

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

9
ThomasW

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

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

pkill package_name 

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

3
steve

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

в соответствии с MAC "обязательный контроль доступа" у вас, вероятно, есть разрешение на уничтожение процесса , который не запускается root 

повеселись!

0
sinan bilkay

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

Я не уверен, как бы вы сделали это с помощью инструмента командной строки, но должен быть способ. Может быть, вы делаете это через ADB Shell ...

0
matto1990