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

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

adb stop com.my.app.package

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

10 ответов


Edit: долго после того, как я написал этот пост, и он был принят в качестве ответа, был реализовала командой Android, как указано в ответ.

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


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

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

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


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

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

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


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

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

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 сохраняет данные, связанные с приложением. Однако, если вы хотите чистый лист, как вы упомянули, Вы, возможно, не захотите использовать эту опцию.


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

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

pkill package_name 

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


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

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


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

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

удачи!


pkill NAMEofAPP

номера корни алтея, termux и терминал эмулятор.