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

49

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

Спасибо

лао
источник

Ответы:

67

Да. Команда есть 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>. На самом деле, по моему опыту , это единственный способ восстановить их.
eldarerathis
источник
Можно ли избежать скрытия выбранного приложения при его отключении?
Android-разработчик
1
@androiddeveloper Нет. Вся идея приложения скрыта полностью , в том числе от пользовательского интерфейса.
Иззи
@ Изясно, я вижу. Можно ли сделать наоборот, то есть просто скрыть, не отключая?
Android-разработчик
Теоретически да, я думаю; но я понятия не имею, как это сделать. В магазинах есть «приложения», которые нигде не отображаются при установке (например, они предоставляют дополнительные настройки только в некоторых других приложениях или предлагают некоторые «невидимые сервисы», такие как «менеджеры учетных записей» для определенных сервисов), что доказывает, что это должно работать как - то; но я боюсь, что это должно быть сделано в приложении Manifestили тому подобное (я не Android-разработчик, поэтому я не могу сказать).
Иззи
Приложение можно включить на странице PlayStore.
Инфо-экран
7

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

Во-первых, получите идентификатор пользователя:

$ 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. Я не уверен, что лучше, но посмотри на этот ответ . Обратный hideIS unhide(перезагрузка может потребоваться для эффекта unhide).

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

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

starfry
источник
3

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


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

adb shell
су
pm Отключить PACKAGE # отключает приложение и скрывает его в Настройки -> Приложения 
pm скрыть PACKAGE # альтернатива; для Android Lollipop и выше
cmd пакет приостановить PACKAGE # альтернатива; пакет остается видимым в Launcher и настройках приложения, но не может быть использован; особенность Администрирования устройства

PACKAGE ссылается на название пакета приложения

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

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

adb shell pm block PACKAGE # для Android KitKat
adb shell pm скрыть PACKAGE # только для Android Lollipop
adb shell pm disable-user PACKAGE # альтернатива `pm hide`; для Android Lollipop и выше; это работает так же, как отключение приложения через приложение настроек

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

adb shell pm разблокировать PACKAGE # для Android KitKat
adb shell pm unhide PACKAGE # для Android Lollipop и только если вы ранее использовали `pm hide`
adb shell pm включить PACKAGE # для Android Lollipop и выше

Изменения произошли бы немедленно.

Повелитель огня
источник