Ответы:
Изменить: Спустя долгое время после того, как я написал этот пост, и он был принят в качестве ответа, 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>
Чистый способ остановить приложение:
adb shell am force-stop com.my.app.package
Таким образом, вам не нужно выяснять идентификатор процесса.
force-stop
команда существовала. Я обновил свой ответ, чтобы указать на этот.
Android 9.0 API Level 28
приложение все еще отображается в последних приложениях, даже если PID
оно найдено в приложении. Вы знаете , как остановить приложение полностью , которое означает , что даже от фоновых приложений?
Сначала поместите приложение в фоновый режим (нажмите кнопку «Домой» на устройстве)
Тогда .... в терминале ....
adb shell am kill com.your.package
Вы можете использовать следующее из консоли устройства: pm disable com.my.app.package
которое убьет его. Затем используйте, pm enable com.my.app.package
чтобы вы могли запустить его снова.
adb shell
, а затем запустить в su
первую очередь.
Если у вас есть доступ к пакету приложения, вы можете установить его с параметром -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
должно сработать
adb shell killall -9 com.your.package.name
в соответствии с MAC «обязательный контроль доступа» у вас, вероятно, есть разрешение на уничтожение процесса, который не запускается пользователем root
радоваться, веселиться!
В eclipse перейдите в перспективу DDMS и на вкладке устройства щелкните процесс, который вы хотите уничтожить, на устройстве, на котором вы хотите его уничтожить. Затем вам просто нужно нажать кнопку остановки, и это должно убить процесс.
Я не уверен, как бы вы сделали это с помощью инструмента командной строки, но должен быть способ. Может быть, вы делаете это через оболочку ADB ...
pkill NAMEofAPP
Не рутированный зефир, termux и эмулятор терминала.