Відповіді:
Редагувати: довго після того, як я написав цю публікацію, і вона була прийнята як відповідь, 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
Безкореневий зефір, термукс та емулятор терміналу.