Я заметил, что приложения (такие как Google Contacts Sync), которые были отключены с помощью стандартного диспетчера приложений Android (KitKat), по-прежнему отображаются как работающие при использовании инструментов наблюдения за процессами. Это верно даже после перезагрузки устройства.
Почему отключенные приложения все еще работают? Есть ли эффективный (и безопасный) способ отключить их?
Допустимы решения, требующие привилегий root.
(Обратите внимание, что для конкретного примера выше вы можете сказать Android не синхронизировать ваши контакты, но он по-прежнему запускает процесс синхронизации контактов Google. Но давайте не будем останавливаться на этом примере... это просто пример.)
Вашему Android не нужно иметь root-доступ для действительного отключения приложения, если у вас версия 4.4.x или выше. Все, что вам нужно, это настроить adb на ПК и включить отладку по USB на устройстве без рута или приложение эмулятора терминала для рутированного устройства (вы также можете использовать adb).
Если вы проверите использование диспетчера пакетов ( pm
), вы увидите
pm block [--user USER_ID] PACKAGE_OR_COMPONENT") pm разблокировать [--user USER_ID] PACKAGE_OR_COMPONENT")
Для Lollipop это будет
pm hide [--user USER_ID] PACKAGE_OR_COMPONENT") pm показать [--user USER_ID] PACKAGE_OR_COMPONENT")
Чтобы заблокировать или скрыть пакет (это безопасно), просто выполните
pm block PACKAGE # for KitKat
pm hide PACKAGE # for Lollipop
Чтобы разблокировать или показать пакет, выполните
pm unblock PACKAGE #for KitKat
pm unhide PACKAGE # for Lollipop
PACKAGE
→ имя пакета приложения. Чтобы узнать имя пакета приложения:
Добавьте adb shell
перед самой командой, чтобы выполнить их с ПК.
Функция hide имеет следующий комментарий внутри исходного кода
Помещает пакет в скрытое состояние, которое почти похоже на состояние удаления, что делает пакет недоступным, но не удаляет данные или фактический файл пакета. Приложение можно открыть, сбросив скрытое состояние или установив его.
Аналогичное комментирование сделано для блока здесь .
Чтобы проверить утверждение, вы можете использовать некоторые системные службы, такие как meminfo
, procstats
и activity
использовать инструмент dumpsys или даже перечислить все процессы, использующие ps
. Вы не найдете активного присутствия заблокированного/скрытого приложения.
То же самое относится ко многим системным приложениям, отключенным с помощью графического интерфейса, или pm disable
, но не ко всем приложениям, поскольку даже отключенное приложение может получать трансляции , на которые оно зарегистрировано, что можно сделать только в том случае, если оно загружено в память 1 . Тем не менее, отключенное приложение не может работать само по себе и не может выполняться никаким другим приложением.
Я приводил некоторые различия между hide / block и disabled по моему вопросу pm hide VS pm disabled — кризис идентичности . Он предоставляет только дополнительную информацию к этому ответу, поэтому вы можете его пропустить.
РЕДАКТИРОВАТЬ:
Похоже, что этот метод работает не для всех приложений на Android KitKat. В этом случае просто отзовите разрешение на чтение из APK приложения или удалите расширение .APK из имени файла приложения (последнее однажды было предложено Jaskaranbir), после чего выполните программную/полную перезагрузку. Это то же самое, что удалить приложение из системы, с той лишь разницей, что все файлы останутся на своих местах.
Оба шага можно выполнить с помощью любого корневого файлового менеджера. Способ командной строки:
adb shell su -c 'chmod 000 /data/app/PACKAGE*' # 000 means no read-write-executable permission to user,group and others.
adb shell su -c 'mv /data/app/PACKAGE* /data/app/PACKAGE' # doing renaming by moving the file
adb reboot
1: Отсутствие технических доказательств, подтверждающих факт
pm block/hide
поэтому оставьте его нетронутым./data/system/users/0/package-restrictions.xml
, найдите <pkg name="YOUR_PACKAGE"
). Короче говоря, независимо от того, применяете ли вы команду блокировки/скрытия к отключенному приложению или нет, это безопасно.adb shell su -c "chmod 111 /system/app/SystemUI.apk"
. 111 означает установку только прав на исполняемый файл для владельца, группы и других. Перезагрузитесь, и приложение будет отсутствовать в системе. Вы также можете установить его 000
.
ГигантДерево
RockPaperLz - Замаскируй или Шкатулка
ГигантДерево
RockPaperLz - Замаскируй или Шкатулка
RockPaperLz - Замаскируй или Шкатулка
Иззи
Повелитель огня
RockPaperLz - Замаскируй или Шкатулка
Повелитель огня
block/hide
), что заставляет меня задаться вопросом, что вызывает загрузку приложения сейчас. Другое дело, что пока он загружался в память можно наблюдать его внешнее отсутствие по отсутствию фона, тем, строки состояния и прочего. Возможно, из этого можно выковать новый вопрос.Иззи
.apk
данные позади» — поэтому приложение становится «полностью незарегистрированным и невидимым для всего, кроме файлового менеджера», поэтому другие приложения больше не могут вызывать его намерения, как они могут не найти их.RockPaperLz - Замаскируй или Шкатулка
Иззи