Wie wird eine Android-Systemanwendung neu gestartet, nachdem Sie sie auf gerooteten Geräten beendet haben?

Zur Verdeutlichung möchte ich wissen, wie eine System-App sich selbst wiederbeleben kann (automatischer Start), nachdem ich einen Kill-Befehl ausgegeben habe. Es gibt Möglichkeiten, Apps zu entfernen, indem Sie Apps zum Entfernen von Apps verwenden sowie direkt den Befehl rm verwenden, um APK/Odex und Ordner physisch zu löschen. Und darauf gibt es viele Antworten. Meine Frage bezieht sich auf den automatischen Startmechanismus selbst. Das heißt, gibt es eine XML-Datei und einen laufenden Hauptprozess, der sie überprüft? Oder etwas ähnliches. Als Referenz verwende ich Android 6.0.1 und MIUI 8.5.3 auf einem gerooteten Gerät.

Grundsätzlich untersuche ich die Möglichkeit, dass einige System-Apps, die Sie entfernen (und dann Ihr Telefon in den Bootloop schicken), nicht erforderlich sind, aber der Überprüfungs- / Startversuch macht es zu einer Schleife. Der Grund dafür ist, dass das System abgesehen vom Fehler „Anwendung funktioniert nicht mehr“ scheinbar nicht betroffen ist. Es ist also die Botschaft , die das Problem verursacht, und was auch immer dahinter steckt. Diese Antwort wird es mir ermöglichen, diese Möglichkeit zu testen und alle Ergebnisse hier zu veröffentlichen.

Edit1:So sieht die Antwort auf die Hälfte meiner eigenen Frage aus (vorausgesetzt, es findet keine andere "schwarze Magie" statt, wie z. B. eine andere App, die den Status überprüft ...) - der Neustart wird höchstwahrscheinlich über BroadcastReceiver erreicht .

Eine App kann einen Broadcast-Empfänger für Systemereignisse registrieren . Es funktioniert folgendermaßen: Wenn ein Ereignis auf dem System eintritt (USB ist angeschlossen, Internet wird erkannt usw.), wird ein Broadcast an alle Apps gesendet, die für dieses Ereignis registriert sind. Eine App kann sich über ihre AndroidManifest.XML oder pragmatisch registrieren. Aber der Hauptteil der Frage ist - wo ist diese Registrierung und wie ist es möglich, sie zu ändern (natürlich auf einem gerooteten Gerät)

Edit2:Ein bisschen mehr Infos. Wenn ich ps mache, wird der Prozess wie gewohnt angezeigt:

finddevice [....] SyS_epoll_ 7f83b48c54 S com.xiaomi.finddevice

Aber wenn ich einen Ordner dieses Systemprozesses umbenennen (um ihn zu deaktivieren) und dann den Prozess beende, scheint es, als ob der Binder-Thread ( binder_thr ) versucht, ihn wieder zum Leben zu erwecken:

finddevice [....] binder_thr 7f83b48d44 S com.xiaomi.finddevice

Und sobald ich den Ordner wieder in das Original umbenenne, wird er sofort wieder als SyS_epoll_ angezeigt.

Apps registrieren sich selbst (falls erforderlich) beim System für Broadcasts, wie z. B. geänderte Netzwerkkonnektivität, geänderte Geräteausrichtung usw. Wenn eine solche Änderung auftritt, löst der Broadcast die App aus. Wenn Sie Xposed Framework installiert haben, versuchen Sie Folgendes: repo.xposed.info/module/de.defim.apk.receiverstop , und prüfen Sie, ob die App immer noch von selbst aufwacht.
@Firelord Wenn ich richtig liege, ist dies sogar von SD Maid aus für Nicht-Xposed-Benutzer möglich.
@DeathMaskSalesman Versuchte SD Maid, es ist ein nettes Tool und funktioniert mit einigen System-Apps, aber nicht mit allen. Sagt "fehlgeschlagen", wenn ich versuche, ihre Listener in Receiver Manager zu deaktivieren.
@Firelord Ich habe Xposed nicht installiert. Wenn also eine dieser resistenten System-Apps neu startet, ist es ihr Zuhörer, der etwas tut? Oder kann es auch eine andere App sein, die zuhört und wenn sie sieht, dass Sie seinen "Kumpel" getötet haben, lässt er sie wieder auferstehen? Ich meine, die erste Option ist diejenige, über die ich an einigen Stellen gelesen habe und frage mich nur, ob die 2. Option auch möglich sein könnte. Gibt es einen gemeinsamen Registrierungsort, an dem diese Dinge gespeichert (und bearbeitet werden können)?
@Firelord Ich habe Xposed installiert, um diese Theorie zu testen, aber das ReceiverStop-Modul bietet nur die Kontrolle über System-Apps in der kostenpflichtigen Version. (und ich brauche es nur zum Testen) Ich habe eine Alternative im Xposed-Modul gefunden: repo.xposed.info/module/cn.wq.myandroidtoolsxposed Aber diese App bietet eine begrenzte Dokumentation. Nur eine Liste von Apps mit einem einzelnen Kontrollkästchen daneben. Wenn ich auf das Kontrollkästchen dieser System-App klicke und auf Speichern klicke, erhalte ich einen Toast: „Fertig“. App startet trotzdem neu.
Alternativ können Sie Lucky Patcher verwenden , um Komponenten jeder App zu deaktivieren.

Antworten (1)

Ich konnte diesen Code nicht viel verstehen , aber die Informationen über Empfänger scheinen nur im Speicher gehalten zu werden (keine Indexdatei im internen Speicher). Mit dem folgenden Befehl können Sie sehen, welcher Empfänger für welche Art von Sendung registriert ist.

adb shell dumpsys package

Versuchen Sie zum Deaktivieren eines bestimmten Empfängers Elixir 2 . Sie können in den Anwendungsbereich gehen, Ihre App auswählen und dann nach unten scrollen, um die Empfänger zu finden (statisch). Daneben wäre die Option, diese Komponente zu deaktivieren.

Eine weitere Option ist die Verwendung des ReceiverStop Xposed-Moduls. Die kostenlose Version ermöglicht das Deaktivieren von Empfängern nur für vom Benutzer installierte Apps.

In Bezug auf die Befehlszeile können Sie Folgendes tun, wenn Sie den Namen des Empfängers / der Komponente kennen:

adb shell su -c 'pm disable PKG/COMP'         # where PKG is package name of the app and COMP is the component you intend to disable.

Allerdings habe ich nicht getestet, ob die genannten Lösungen für dynamisch registrierte Empfänger funktionieren.

Es versteht sich von selbst, dass die Antwort nur für gerootete Android-Geräte gültig ist.
Nun, das ist die Sache, pm disable funktioniert nicht für diese "harten" Systempakete. (Funktioniert jedoch für einige System-Apps) Im Moment verwende ich ein Skript, das ich geschrieben habe, um das Deaktivieren / Aktivieren alternativ durchzuführen. Skript 1) benennt .apk- und .odex-Dateien um und 2) beendet den Prozess. Dies erzeugt eine Endlosschleife eines Popups, das "leider ..." sagt. Dann schalte ich das Skript wieder ein. Und der Prozess startet sich selbst neu und Fehler verschwinden. Die Apps, die sich so verhalten, verursachen beim Neustart einen Bootloop, was Zeit zum Testen spart.
Danke für den Elixir2-Link, er enthält zusätzliche nützliche Details. Aber genau wie SD Maid funktioniert es für diese Apps nicht. Das Klicken auf [deaktivieren] neben Aktivitäten/Empfänger hat keine Auswirkung. ReceiverStop bietet, wie Sie sagten, nur Zugriff auf System-Apps in der kostenpflichtigen Version. Das brauche ich aber nur zum Testen. Das heißt, Empfänger zu entfernen und zu sehen, ob das ROM noch stabil ist. Wenn ja, dann wäre das Problem identifiziert und ich würde versuchen, einen Skript-Weg zu finden, um dies irgendwie zu tun.