Команда adb shell pm вызывается, когда нужно удалить системное приложение без root, вернуть отключённый пакет или выяснить, почему Package Manager отвечает ошибкой Failure [DELETE_FAILED_INTERNAL_ERROR] при попытке стереть предустановленную программу. Утилита pm (package manager) — это интерфейс командной строки к системному сервису Android, который хранит сведения обо всех установленных пакетах: их имена, разрешения, состояние и принадлежность пользователям.
В отличие от графических настроек, pm позволяет работать с пакетами, скрытыми из списка приложений, управлять отдельными пользователями устройства и выполнять действия, недоступные через стандартное меню. Для работы потребуется включённая отладка по USB и установленный Android SDK Platform-Tools на компьютере — это официальный инструментарий Google, скачивать его стоит только с сайта для разработчиков Android.
⚠️ Внимание: команды pm выполняются с правами оболочки (shell), поэтому ошибка в имени пакета может отключить системный компонент. Перед массовыми действиями снимите список пакетов и сохраните его в файл.
Подготовка: подключение устройства через ADB
Прежде чем вводить первую команду, убедитесь, что устройство видно компьютеру. На смартфоне откройте настройки разработчика и включите отладку по USB — сам раздел появляется после многократного нажатия на пункт «Номер сборки» в сведениях о телефоне. Точное расположение пунктов зависит от оболочки производителя, поэтому при расхождениях сверьтесь с документацией своей модели.
Подключите кабель и проверьте связь:
adb devices
Если в выводе стоит статус unauthorized, на экране смартфона нужно подтвердить запрос на разрешение отладки. Статус device означает, что можно переходить к командам pm. Пустой список обычно указывает на проблему с драйвером или кабелем — смените порт USB и проверьте, что кабель поддерживает передачу данных, а не только зарядку.
☑️ Подготовка к работе с adb shell pm
Базовый синтаксис и просмотр списка пакетов
Общий формат вызова прост: adb shell pm <подкоманда> [параметры]. Самая востребованная операция — вывод перечня установленных пакетов. Команда adb shell pm list packages покажет все пакеты, а фильтры сузят выборку до нужной категории.
- 📦
pm list packages -s— только системные приложения; - 📱
pm list packages -3— только сторонние, установленные пользователем; - 🚫
pm list packages -d— отключённые пакеты; - 🔍
pm list packages | grep имя— поиск по фрагменту имени (на Windows вместо grep используйтеfindstr).
Чтобы узнать подробности о конкретном пакете — версию, путь к APK, разрешения, — используется adb shell pm dump имя.пакета. Вывод объёмный, поэтому его удобно перенаправить в файл и изучать в текстовом редакторе.
Удаление и отключение приложений
Главное, что нужно понимать: на устройстве без root системные приложения физически не стираются из раздела /system. Команда pm uninstall с параметром --user 0 удаляет пакет только для текущего пользователя — APK остаётся в прошивке и может быть возвращён. Это делает операцию относительно безопасной и обратимой.
adb shell pm uninstall -k --user 0 com.example.app
Флаг -k сохраняет данные и кэш приложения — полезно, если планируется переустановка. Альтернативный, более мягкий вариант — отключение пакета без удаления:
adb shell pm disable-user --user 0 com.example.app
Отключённый пакет перестаёт работать и исчезает из лаунчера, но при этом его проще вернуть командой adb shell pm enable com.example.app. Для пакетов, удалённых через uninstall --user 0, восстановление выполняется иначе — через cmd package install-existing имя.пакета.
⚠️ Внимание: не отключайте и не удаляйте пакеты, назначение которых вам неизвестно. Удаление компонентов вроде системного лаунчера, служб телефонии или Package Installer способно привести к неработоспособности устройства вплоть до необходимости сброса к заводским настройкам.
Основные подкоманды pm: сводная таблица
Ниже собраны наиболее применимые подкоманды. Набор поддерживаемых операций может отличаться в зависимости от версии Android — полный список для конкретного устройства выводится командой adb shell pm без аргументов.
| Команда | Назначение | Пример |
|---|---|---|
pm list packages | Список установленных пакетов | pm list packages -3 |
pm uninstall | Удаление пакета для пользователя | pm uninstall -k --user 0 pkg |
pm disable-user | Отключение пакета без удаления | pm disable-user --user 0 pkg |
pm enable | Включение отключённого пакета | pm enable pkg |
pm clear | Очистка данных приложения | pm clear pkg |
pm grant / revoke | Выдача и отзыв разрешений | pm grant pkg permission.CAMERA |
Обратите внимание: pm clear полностью стирает данные приложения — аккаунты, настройки, локальные файлы. Действие необратимо, поэтому применяйте его осознанно.
Работа с разрешениями и пользователями
Подкоманды pm grant и pm revoke управляют разрешениями уровня runtime. Например, выдать приложению доступ к местоположению можно так:
adb shell pm grant com.example.app android.permission.ACCESS_FINE_LOCATION
Этот приём часто используется для утилит автоматизации, которым требуются разрешения, недоступные через стандартный диалог. Отозвать разрешение можно аналогичной командой revoke. Полный перечень запрошенных пакетом разрешений виден в выводе pm dump в секции requested permissions.
Отдельная область — многопользовательский режим. Команда pm list users показывает всех пользователей устройства, а параметр --user в других подкомандах указывает, к кому применяется действие. Идентификатор основного пользователя в Android — 0, именно поэтому в инструкциях по удалению bloatware везде фигурирует --user 0.
Типичные ошибки и их решение
Чаще всего при работе с pm встречаются несколько повторяющихся проблем. Разберём их без лишней теории.
- ❗
Failure [DELETE_FAILED_INTERNAL_ERROR]— система запрещает удаление защищённого пакета; попробуйтеdisable-userвместоuninstall. - ❗
Failure [DELETE_FAILED_USER_RESTRICTED]— на устройстве действует профиль ограничений или корпоративная политика; действие блокируется администратором устройства. - ❗
Unknown package— опечатка в имени пакета либо пакет уже отсутствует; проверьте точное имя черезpm list packages. - ❗ Команда
adbне распознаётся в терминале — Platform-Tools не добавлены в PATH; запускайтеadbиз папки, куда распакован архив.
Если команда зависает без вывода, проверьте, не отозвано ли разрешение на отладку — иногда после обновления системы авторизацию нужно подтверждать заново. Помогает перезапуск сервера командой adb kill-server с последующим повторным подключением.
Чем pm отличается от cmd package
Начиная с Android 7 часть функций pm дублируется сервисом cmd package (например, cmd package install-existing). Обе команды обращаются к одному системному сервису PackageManagerService, но pm — классический интерфейс, а cmd package — более новый. Для восстановления удалённых пакетов используйте именно cmd package install-existing, у pm такой подкоманды нет.
Восстановление удалённых пакетов и меры предосторожности
Если после удаления системного приложения что-то пошло не так, верните пакет на место:
adb shell cmd package install-existing com.example.app
Команда сработает только для пакетов, удалённых через --user 0, — физически стёртые из прошивки компоненты так не восстановить. Поэтому root-удаление системных приложений и pm uninstall --user 0 — принципиально разные по риску операции.
Перед любой массовой чисткой предустановленного ПО сохраните исходный список пакетов в файл: adb shell pm list packages > packages_backup.txt. Это займёт секунды, но даст точную карту для отката. А если устройство после экспериментов ведёт себя нестабильно, крайняя мера — сброс к заводским настройкам: он вернёт все пакеты, удалённые для пользователя 0, поскольку системный раздел не изменялся.
Часто задаваемые вопросы
Нужен ли root для работы adb shell pm?
Нет. Команды pm выполняются с привилегиями оболочки ADB, которых достаточно для отключения и удаления приложений для текущего пользователя. Root требуется только для физического удаления APK из системного раздела.
Что означает параметр --user 0 в команде удаления?
Это идентификатор основного пользователя устройства. Указание --user 0 удаляет приложение только для этого профиля, оставляя APK в прошивке, что позволяет восстановить пакет позже.
Как вернуть приложение, удалённое через pm uninstall?
Используйте команду adb shell cmd package install-existing имя.пакета. Она работает для пакетов, удалённых с флагом --user 0. Если пакет был лишь отключён, достаточно adb shell pm enable имя.пакета.
Почему pm uninstall выдаёт ошибку DELETE_FAILED?
Возможные причины: пакет защищён системой, на устройстве действует корпоративная политика или профиль ограничений. Попробуйте вместо удаления отключить пакет командой pm disable-user --user 0 — она срабатывает чаще.
Можно ли через pm очистить данные приложения без удаления?
Да, команда adb shell pm clear имя.пакета стирает все данные и настройки приложения, оставляя сам пакет установленным. Учтите, что действие необратимо: аккаунты и локальные файлы приложения будут потеряны.