Остановка приложения 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
в eclipse перейдите в перспективу DDMS и на вкладке Устройства щелкните процесс, который вы хотите убить, под устройством, которое вы хотите убить. Затем вам просто нужно нажать кнопку остановки, и это должно убить процесс.
Я не уверен, как вы это сделаете из инструмента командной строки, но должен быть способ. Возможно, вы делаете это через оболочку adb...
adb shell killall -9 com.your.package.name
согласно Mac " обязательный контроль доступа" у вас, вероятно, есть разрешение убить процесс который не запускается root
удачи!