Gibt es eine Möglichkeit, Autostart-Apps beim Booten zu deaktivieren? Ich muss einige von ihnen (nicht alle) wie Facebook usw. deaktivieren, um eine schnellere Startzeit zu erhalten. Ich frage, wie man das auf Android 9.0 macht.
Ohne auf die Details einzugehen, ob man das automatische Starten von Apps stoppen sollte oder nicht, und was die Konsequenzen sein könnten, wie in vielen anderen Antworten diskutiert, hier sind meine einfachen Lösungen, die zumindest auf Android Pie ohne Apps von Drittanbietern funktionieren können.
Apps verwenden BroadcastRceivers
, um auf Broadcast ACTION_BOOT_COMPLETED zu lauschen , damit sie beim Booten ausgeführt werden können. Broadcast Receiver ist eine App-Komponente, die mit Root-Rechten deaktiviert werden kann.
Verwenden Sie den Paket-Manager, um alle Broadcast-Empfänger aufzulisten, die auf BOOT_COMPLETED warten:
~# pm query-receivers --components -a android.intent.action.BOOT_COMPLETED
Es wird eine Liste von Rundfunkempfängern im Format package_name/component_name
. Siehe dumpsys activity broadcast-stats
und dumpsys activity broadcasts
für weitere Einzelheiten.
Jetzt zum Deaktivieren einer Komponente:
~# pm disable <package/component>
Es gibt Apps wie Autostarts
( com.elsdoerfer.android.autostarts ) und SD Maid
( eu.thedarken.sdm ), die dasselbe für Sie tun können. Die Datei /data/system/users/0/package-restrictions.xml
kann auch direkt bearbeitet werden, um Apps oder ihre Komponenten zu deaktivieren, aber es wird nicht empfohlen.
Es ist möglich, mehrere Broadcast-Empfänger einer App zu deaktivieren, und ein einzelner Empfänger kann möglicherweise auch mehrere Arten von Broadcast-Ereignissen abhören .
Um zu empfangen android.intent.action.BOOT_COMPLETED
, benötigen Apps android.permission.RECEIVE_BOOT_COMPLETED , was eine normale Berechtigung ist und daher nicht vom Benutzer widerrufen werden kann.
Es gibt jedoch ein verstecktes Berechtigungsverwaltungs-Framework mit dem Namen, AppOps
das eine etwas feinkörnigere Steuerung von (berechtigungsähnlichen) Vorgängen bietet. OP_BOOT_COMPLETED ist eines davon, aber es ist kein Teil von AOSP, sondern wird nur von einigen benutzerdefinierten ROMs wie LineageOS hinzugefügt. Wenn Sie sich auf einem solchen ROM befinden, können Sie das Autostart-Verhalten über steuern adb shell
:
~$ appops set <package> BOOT_COMPLETED deny
Jetzt darf die App keine BOOT_COMPLETED-Übertragung empfangen. Es gibt Apps wie App Ops
( rikka.appops ), die dasselbe für Sie tun können. Einige benutzerdefinierte ROMs haben integrierte Frontends für AppOps mit unterschiedlichen Namen wie Privacy Guard , AutoStart Manager usw.
Bitte beachten Sie, dass AppOs :
ist im Allgemeinen nicht für Anwendungsentwickler von Drittanbietern bestimmt; Die meisten Funktionen sind nur für Systemanwendungen verfügbar
Daher kann die Verwendung ohne Root in den nächsten Android-Versionen untersagt oder schwieriger werden.
Beide oben genannten Methoden können verhindern, dass Apps nur beim Booten gestartet werden. Eine App kann auch auf einige andere Broadcast-Ereignisse warten und sie kann weiter neu gestartet werden, wenn sie beendet wird, oder kontinuierlich im Hintergrund (als Dienst) ausgeführt werden, wenn dies so konzipiert ist. Siehe dumpsys activity services
für weitere Details.
Ein etwas anderer Ansatz wäre, Apps daran zu hindern, im Hintergrund zu laufen, indem man OP_RUN_IN_BACKGROUND (eingeführt in Nougat) und/oder RUN_ANY_IN_BACKGROUND
(eingeführt in Pie) verwendet, die Teil von AOSP sind:
~$ appops set <package> RUN_IN_BACKGROUND deny
Sie haben keine gleichwertige Manifest-Berechtigung, aber es gibt eine experimentelle Berechtigung mit demselben Namen.
pm query-receivers
soll das funktionieren? auf meinem Android 7 erhalte ich: "Error: unknown command 'query-receivers'"query-intent-receivers
.Einige Geräte benötigen Root-Zugriff, um die Autostart-Berechtigungen zu verwalten ... Android 5.1 ermöglicht dies jedoch über die Autostart-Einstellungen in der Sicherheit.
Diese Option sollte auf jedem System mit AppOpps verfügbar sein
Auch wenn nicht auf Android mit diesen Einstellungen
Einstellungen öffnen
Apps öffnen
Öffnen Sie die gewünschte Anwendung
Wählen Sie Berechtigungen aus
Deaktivieren Sie die Autostart-Berechtigung
Robert