2010-06-25 2 views
148

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

adb stop com.my.app.package 

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

ответ

107

Edit: Long после того как я написал этот пост, и он был принят в качестве ответа, команда am force-stop была implemented командой Android, как уже упоминалось в this answer.

В качестве альтернативы: Вместо того, чтобы остановить приложение, так как вы упоминаете желая «чистый лист» для каждого теста, вы можете использовать adb shell pm clear com.my.app.package, который остановит процесс приложения и очистить все сохраненные данные для это приложение.


Если вы на Linux:
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

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

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

+6

Не удалось заставить его работать (разрешение было отклонено как для kill, так и su), но +1 для показа мне, я могу сделать намного больше, чем я думал с adb. – hpique

+9

Ах, похоже, что у вас нет корневого устройства. Это определенно работает на эмуляторе, по крайней мере! :) –

+1

Возможно, вам нужно перезагрузить раздел для чтения и записи и запустить adb как root: adb remount; adb root # Это всего лишь глупое предположение. – Rorist

0

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

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

+0

Я нашел [фрагмент кода на GitHub] (https://gist.github.com/805605) о том, как это сделать из командной строки, не запустив Eclipse и [немного расширив его] (https: // gist.github.com/3175409). – sschuberth

8

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

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

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

+0

Хороший трюк. Работает для ненарушенных устройств! – hopia

10

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

+1

На неуправляемом телефоне это ничего не делает. –

+0

Я проверил его на некорневом телефоне. Сначала есть некоторые отклоненные сообщения, а затем он убил мое приложение/службу DalvicVM. Просто дайте ему секунду. – LikeYou

+1

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

394

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

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

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

+4

Обратите внимание, что это не работает для системных приложений. –

+17

'Ошибка: Неизвестная команда: force-stop' - Android 2.3 –

+15

Это должен быть принятый ответ на эту проблему. В вопрос не входит внедренное устройство. – Dimitris

5

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

Во-первых, положить приложение в фоновом режиме (нажмите дома кнопку устройства)

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

adb shell am kill com.your.package 
+2

*** ПРИМЕЧАНИЕ *** Я не считаю, что это больше работает в уровнях API> 22. – dell116

+0

он делает на моем Nexus 5 с Marshmallow – urSus

3

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

pkill package_name 

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

+0

Примечание: это работает только на более новых версиях Android. pkill не доступен на моем 4.4 эмуляторе, но доступен на эмуляторе Android 6. –

-1
pkill NAMEofAPP 

Non укоренились зефир, termux & эмулятор терминала.

Смежные вопросы