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.
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.
Feuerlord
Zauberbuch
Emil
Emil
Emil
iBug