Відповіді:
Редагувати: довго після того, як я написав цю публікацію, і вона була прийнята як відповідь, 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
весело!
У затемненні перейдіть до точки зору DDMS і на вкладці пристроїв натисніть на процес, який ви хочете вбити під пристроєм, на якому ви хочете його вбити. Тоді вам просто потрібно натиснути кнопку зупинки, і це повинно вбити процес.
Я не впевнений, як би ви це зробили з інструменту командного рядка, але повинен бути спосіб. Можливо, ви робите це через оболонку adb ...
pkill NAMEofAPP
Безкореневий зефір, термукс та емулятор терміналу.