Отключить автозапуск при загрузке и ограничить выполнение в фоновом режиме [дубликат]

Есть ли способ отключить автозапуск приложений во время загрузки? Мне нужно отключить некоторые из них (не все), такие как Facebook и т. Д., Чтобы ускорить загрузку. Я спрашиваю, как это сделать на Android 9.0.

Для предотвращения запуска приложения при запуске требуются права root: stackoverflow.com/questions/9715214/…

Ответы (2)

Не вдаваясь в подробности, следует ли прекращать автозапуск приложений и каковы могут быть последствия, как обсуждалось во многих других ответах, вот мои простые решения, которые могут работать без каких-либо сторонних приложений, по крайней мере, на Android Pie.

КОРНЕВОЕ РЕШЕНИЕ:

Приложения используют BroadcastRceiversдля прослушивания трансляции ACTION_BOOT_COMPLETED , чтобы они могли запускаться при загрузке. Широковещательный приемник — это компонент приложения, который можно отключить с правами суперпользователя.

Используя диспетчер пакетов , выведите список всех широковещательных приемников, прослушивающих BOOT_COMPLETED:

~# pm query-receivers --components -a android.intent.action.BOOT_COMPLETED

Это даст список приемников вещания в формате package_name/component_name. См. dumpsys activity broadcast-statsи dumpsys activity broadcastsдля более подробной информации.

Теперь, чтобы отключить компонент:

~# pm disable <package/component>

Существуют такие приложения, как Autostarts( com.elsdoerfer.android.autostarts ) и SD Maid( eu.thedarken.sdm ), которые могут сделать то же самое для вас. Файл /data/system/users/0/package-restrictions.xmlтакже можно отредактировать напрямую, чтобы отключить приложения или их компоненты, но это не рекомендуется.
Можно отключить несколько широковещательных приемников приложения, и один получатель также может прослушивать несколько типов широковещательных событий .

НЕКОРНЕВОЕ РЕШЕНИЕ: (неуниверсальное)

Чтобы получить android.intent.action.BOOT_COMPLETED, приложениям требуется android.permission.RECEIVE_BOOT_COMPLETED , что является обычным разрешением и, следовательно, не может быть отозвано пользователем.

Однако существует скрытая структура управления разрешениями, названная так, AppOpsкоторая обеспечивает несколько более детальный контроль над (подобными разрешениям) операциями. OP_BOOT_COMPLETED — один из них, но он не является частью AOSP, а добавляется только некоторыми пользовательскими прошивками, такими как LineageOS. Если вы находитесь на одном из таких ПЗУ, вы можете управлять поведением автозапуска с помощью adb shell:

~$ appops set <package> BOOT_COMPLETED deny

Теперь приложению не будет разрешено получать трансляцию BOOT_COMPLETED. Есть такие приложения, как App Ops( rikka.appops ), которые могут сделать то же самое для вас. Некоторые пользовательские ПЗУ имеют встроенные интерфейсы для AppOps с разными именами, такими как Privacy Guard , AutoStart Manager и т. д .

Обратите внимание, что AppOps :

обычно не предназначен для сторонних разработчиков приложений; большинство функций доступно только системным приложениям

Таким образом, его использование без рута может быть запрещено или станет сложнее в следующих версиях Android.


Оба вышеперечисленных метода могут остановить запуск приложений только при загрузке. Приложение также может прослушивать некоторые другие широковещательные события и может продолжать перезапускаться, если оно было убито, или непрерывно работать в фоновом режиме (как служба), если оно предназначено для этого. dumpsys activity servicesПодробнее см .

Немного другой подход заключается в том, чтобы остановить работу приложений в фоновом режиме с помощью OP_RUN_IN_BACKGROUND (представлено в Nougat) и/или RUN_ANY_IN_BACKGROUND(представлено в Pie), которые являются частью AOSP:

~$ appops set <package> RUN_IN_BACKGROUND deny

У них нет эквивалентного разрешения манифеста, но есть экспериментальное разрешение с таким же именем.

Этот вопрос был помечен как повторяющийся, но на другие вопросы нет хороших ответов, как на ваш. Спасибо. Я думаю, что AppOps — это простое решение. Я забыл добавить в вопрос, я рутировал свой телефон.
@QkiZ да, при условии, что ваше ПЗУ поддерживает это. Или вы можете выбрать корневой вариант.
с каких это пор pm query-receiversдолжно работать? на моем Android 7 я получаю: «Ошибка: неизвестная команда« получатели запросов »»
@FrederickNord кажется, что это было добавлено в Nougat: android.googlesource.com/platform/frameworks/base/+/… . Также попробуйте query-intent-receivers.
Он говорит: «Ошибка: неизвестная строка операции: RUN_IN_BACKGROUND». Я пробовал также с RUN_ANY_IN_BACKGROUND и OP_RUN_IN_BACKGROUND, Изменить: в моей версии нет android.googlesource.com/platform/frameworks/base/+/refs/tags/…
@VeganEye, вероятно, вы не читали ответ: «Немного другой подход состоял бы в том, чтобы остановить работу приложений в фоновом режиме с помощью OP_RUN_IN_BACKGROUND ( представлено в Nougat ) и/или RUN_ANY_IN_BACKGROUND ( представлено в Pie )».
Вы должны добавить этот ответ к «повторяющимся» вопросам для большей наглядности, это лучше, чем все остальные ответы.
Могу подтвердить, что опция root работает на Android 13. Я отключил приемники в приложении SD Maid's AppControl для Spotify и работал. Мне пришлось сбросить приложение до заводских настроек, чтобы все работало без сбоев, но это может быть просто проблема с хранилищем Spotify.

Некоторым устройствам требуется root-доступ для управления разрешениями на автоматический запуск... Однако Android 5.1 позволяет это сделать с помощью настроек автоматического запуска в разделе «Безопасность».

  • Откройте «Настройки» > «Безопасность».
    безопасность

  • Откройте настройки автозапуска
    авто

  • Отключить приложение от автозапуска
    запрещать

Эта опция должна быть доступна в любой системе с AppOpps.

Также, если не на Android с этими настройками

  • Открыть настройки

  • Открытые приложения

  • Откройте нужное приложение

  • Выберите разрешения

  • Отключить разрешение на автозапуск

Какое устройство вы используете? Я использовал стандартную прошивку Nexus 6 (Android 5.x - 7.x) и OnePlus 6 (Android 8.1), и я никогда не сталкивался с таким вариантом.
@Firelord в пользовательских ПЗУ обычно есть встроенный диспетчер AppOps. Это не стандартный AOSP.
Нет стандартного ПЗУ... Не заказной... AppOpps является частью стандартных Android
Да, appops является частью AOSP, но эта опция на скриншоте недоступна. Это то, что я имел в виду. Какое устройство и ПЗУ вы используете?
AppOps является частью AOSP, а не менеджеров AppOps (GUI).
@Firelord состоит из многих выпусков CM, LineageOS, AEX, RR и даже OmniRom, если я правильно помню.
Я использую стандартный Android 5.0.1 на ZTE Blade L4 Pro.
@Zillinium было бы полезно, если бы вы предоставили ссылку на AOSP, где существует исходный код управления автозапуском .
Это не называется управлением автозапуском. Это управление разрешениями... Для автоматического запуска требуется следующее разрешение... "android.permission.RECEIVE_BOOT_COMPLETED".. ... Вы останавливаете или управляете автозапуском, отключив получение Разрешение Boot Completed для этого приложения... Пожалуйста, обратитесь к... Управление разрешениями...