Включить и отключить системные приложения через ADB

Есть ли какая-нибудь команда adb для включения/отключения системного приложения?

Спасибо

Ответы (4)

Да. Команда есть pm disable <package name>. Вы должны быть root, чтобы сделать это:

Откройте оболочку и получите root:

PC> adb shell
shell@hammerhead:/ $ su

Список всех включенных приложений, фильтр по «калькулятору»:

root@hammerhead:/ # pm list packages -e | grep 'calculator'
package:com.android.calculator2

Отключить приложение:

root@hammerhead:/ # pm disable com.android.calculator2
Package com.android.calculator2 new state: disabled

Список всех отключенных приложений:

root@hammerhead:/ # pm list packages -d
package:com.android.calculator2
package:com.google.android.apps.inputmethod.hindi
package:jp.co.omronsoft.iwnnime.ml
package:com.google.android.inputmethod.pinyin
package:com.google.android.inputmethod.korean
package:com.google.earth
root@hammerhead:/ #

Некоторые другие вещи, которые стоит отметить:

  1. В моем тестировании приложения, отключенные таким образом, полностью исчезают из списка «Настройки»> «Приложения». Они вроде даже не отображаются на вкладке "Отключено"
  2. Вы можете повторно включить приложения с помощью pm enable <package name>. На самом деле, по моему опыту, это единственный способ снова включить их.
Можно ли избежать скрытия выбранного приложения при его отключении?
@androiddeveloper Нет. Полностью скрыть приложение , в том числе от пользовательского интерфейса, — вот вся идея, стоящая за ним.
@ Иззи, я вижу. Можно ли сделать наоборот, то есть просто скрыть, не отключая?
Теоретически да, я думаю; но я понятия не имею, как это сделать. В магазинах есть некоторые «приложения», которые нигде не появляются при установке (поскольку они, например, предоставляют дополнительные настройки в некоторых других приложениях или предлагают некоторые «невидимые услуги», такие как «менеджеры учетных записей» для определенных услуг), что доказывает, что это должно работать как-то; но я боюсь, что это нужно сделать в приложении Manifestили подобном (я не Android-разработчик, поэтому я не могу сказать).
приложение можно включить на его странице в playstore.

Это должно работать независимо от того, является ли приложение системным или сторонним приложением (установленным пользователем).


См. мой ответ в разделе Определите имя пакета вашего приложения, чтобы получить имя пакета соответствующего приложения, и используйте оболочку для выполнения этих команд ( требуется root-доступ ):

adb оболочка
Су
pm disable PACKAGE # отключает приложение и скрывает его в Настройках -> Приложения
pm скрыть ПАКЕТ # альтернатива; для Android Lollipop и выше
cmd package suspend ПАКЕТ # альтернатива; пакет остается видимым в программе запуска и настройках, но его нельзя использовать; функция администрирования устройств

PACKAGEотносится к имени пакета приложения

Чтобы восстановить приложение, замените disable на enable , скройте на unhide и приостановите на unsuspend в указанной команде и выполните ее с привилегиями root.

Если у вас Android KitKat или выше и у вас нет root-доступа , используйте на ПК для выполнения этой команды:

adb shell pm block ПАКЕТ # для Android KitKat
adb shell pm hide PACKAGE # только для Android Lollipop
adb shell pm disable-user ПАКЕТ # альтернатива `pm hide`; для Android Lollipop и выше; это работает так же, как отключение приложения через приложение «Настройки».

Чтобы восстановить приложение:

adb shell pm разблокировать ПАКЕТ # для Android KitKat
adb shell pm unhide PACKAGE # для Android Lollipop и только если вы ранее использовали `pm hide`
adb shell pm enable PACKAGE # для Android Lollipop и выше

Изменения произойдут немедленно.

из всего остального на этой странице cmd package suspend <package>работало только так, как ожидалось. Все остальное будет вызывать исключения
@iSWORD какое устройство Android и версию Android вы используете?
Я использую Lenovo P2a42 с AOSP 11.
Это может быть проблема с программой запуска, но для меня pm disable-userкоманда не сразу скрывает значок приложения, мне нужно перезапустить программу запуска, чтобы изменения вступили в силу.

В дополнение к ответу @eldarerathis вы можете отключить приложение для определенного пользователя. Я использовал этот метод, чтобы удалить некоторые приложения от ограниченного пользователя, которые не были перечислены на экране настроек пользователя. Все команды из файла adb shell. Для внесения изменений требуется root-доступ.

Сначала получите идентификатор пользователя:

$ pm list users
Users:
  UserInfo{0:Alice:13} running
  UserInfo{11:Bob:18} running

затем

$ pm disable --user 11 com.cyanogenmod.filemanager
Package com.cyanogenmod.filemanager new state: disabled-user

Чтобы снова включить

# pm enable --user 11 com.cyanogenmod.filemanager

В этом примере Алиса может использовать файловый менеджер, а Боб — нет.

Вы можете сделать то же самое с hideвместо disable. Я не уверен, что лучше, но см. этот ответ . Обратное hide( unhideдля эффекта может потребоваться перезагрузка unhide).

Вы можете перечислить пакеты с расширением pm list packages --user 11. Дайте -eсписок включенных пакетов или -dесли вы хотите увидеть отключенные. Казалось бы, нет фильтра для скрытых пакетов.

FWIW: я попробовал описанное выше на Lollipop с CM 12.1 на Amazon Fire (KFFOWI).

Я хотел отключить игровой магазин на телефоне Vivo, потому что моя племянница всегда устанавливает несколько гигабайт игр. Для некоторых из вас это может сработать, рут не требуется.

Чтобы отключить плеймаркет:

$ adb shell pm uninstall --user 0 -k com.android.vending
Success

Это удаляет приложение. Но есть и способ восстановить приложение:

$ adb shell pm install-existing com.android.vending
Package com.android.vending installed for user: 0

Конечно, плеймаркет тому пример. Это должно работать для большинства системных приложений. С ПК вы можете запустить это напрямую или, если вы находитесь в оболочке ADB, запустите команду после adb shell.

Вы можете использовать adb shell pm list packages, pipe, чтобы grep легко искал пакет.

Обратите внимание , что это удалит приложение, флаг -k должен сохранить данные. Но в моем случае все данные были очищены/удалены . Таким образом, в процессе удаления системных приложений может быть потеря данных .