Warum werden deaktivierte Apps noch ausgeführt?

Mir ist aufgefallen, dass Apps (z. B. Google Contacts Sync), die mit dem standardmäßigen Android-App-Manager (KitKat) deaktiviert wurden, bei Verwendung von Process Observer-Tools weiterhin als ausgeführt angezeigt werden. Dies gilt auch nach einem Neustart des Geräts.

Warum werden deaktivierte Apps noch ausgeführt? Gibt es eine effektive (und sichere) Möglichkeit, sie tatsächlich zu deaktivieren?

Lösungen, die Root-Rechte erfordern, sind akzeptabel.

(Beachten Sie, dass Sie für das obige spezifische Beispiel Android anweisen können, Ihre Kontakte nicht zu synchronisieren, aber es führt immer noch den Google Contacts Sync-Prozess aus. Aber lassen Sie uns nicht auf dieses Beispiel eingehen ... es ist nur ein Beispiel.)

Direkt neben der Schaltfläche "Deaktivieren" befindet sich eine Schaltfläche "Force Stop". Drücken Sie darauf und der Vorgang sollte beendet und nicht mehr gestartet werden.
@GiantTree Danke. Startet es nach einem Neustart nicht einfach wieder?
In Ihrem Fall ist dies der Fall, da eine System-App explizit einen exportierten Dienst dieses Pakets aufgerufen hat und die einzige Möglichkeit, diesen Prozess (und jeden anderen) zuverlässig zu beenden, darin besteht, ihn aktiv mit Greenify, Amplify (erfordert Xposed) oder ähnlichen Apps zu beenden. Hinweis: Dass dies nicht passieren sollte und als Fehler angesehen werden sollte, da der PackageManager die Aufgabe hat, das Ausführen einer deaktivierten App nicht zuzulassen.
Vielen Dank! Das sind großartige Informationen. Ich habe die Frage aktualisiert, um widerzuspiegeln, dass Root-Lösungen akzeptabel sind. Kann ich ein Tool wie MyAndroidTools verwenden, um alle Dienste für die deaktivierten Apps manuell zu deaktivieren?
@Firelord Danke. Funktioniert Hide in KitKat oder wurde es in Lollipop eingeführt? Kann der Hide-Befehl direkt vom Gerät ausgeführt werden oder ist eine externe Adb-Verbindung erforderlich? Wie lautet nach Ausführung dieses Befehls der Befehl, um ihn bei Bedarf rückgängig zu machen?
@Firelord macht es dir etwas aus, deine Kommentare zu einer Antwort zusammenzufassen? Obwohl die Frage nach dem "Warum" fragt, denke ich, dass das "Wie zu verhindern" die eigentliche Frage war (für das Warum: Deaktivierte Apps können immer noch ihre Absichten aufgerufen haben - was bei zentralen Google-Apps ziemlich häufig vorkommt. Laut Ihrer (verlinkten) Recherche , sollte dies nicht mehr zutreffen, sobald die App blockiert/ausgeblendet wurde).
Wenn Sie meine Antwort erfolgreich verwenden, lassen Sie es mich bitte wissen, da ich meine Lösung nur auf Lollipop-ROMs getestet habe.
@Izzy und Firelord Fragen, um mehr zu erfahren: Wäre die Verwendung eines Tools wie MyAndroidTools zum Deaktivieren aller Dienste und Empfänger für die App eine weitere effektive Lösung?
Nun, in dieser Hinsicht habe ich alle Dienste, Empfänger, Aktivitäten und Inhaltsanbieter sowie die SystemUI-App deaktiviert. Starten Sie das Gerät neu und raten Sie, was die App noch in den Speicher geladen hat (das ist bei pm nicht der Fall block/hide), was mich wundern lässt, warum die App jetzt geladen wird. Es ist eine andere Sache, dass Sie, während es in den Speicher geladen wurde, seine oberflächliche Abwesenheit durch fehlenden Hintergrund, Themen, Statusleiste und mehr beobachten können. Vielleicht lässt sich daraus eine neue Frage schmieden.
@Firelord Ich denke, darauf habe ich oben hingewiesen: Wenn Sie eine App deaktivieren, wird sie nur als "deaktiviert markiert" (und nicht im Launcher usw. angezeigt) - aber sie ist immer noch beim System (Paketmanager) registriert, sodass andere Apps sie finden können und nennen Sie seine Absichten. Es scheint, als wäre das Verstecken/Blockieren eher vergleichbar mit einem „Deinstallieren .apkund Daten zurücklassen“ – die App wird also „völlig unregistriert und unsichtbar für alles außer dem Dateimanager“, sodass andere Apps ihre Absichten nicht mehr so ​​nennen können, wie sie können finde sie nicht.
@Izzy Abgesehen davon, dass das Blockieren in KitKat anscheinend nicht richtig funktioniert. :-(
@RockPaperLizard … und verstecken geht da überhaupt nicht. Nun, der Untergang von KK scheint sich nicht auf den Umgang mit Ihrer SD-Karte zu beschränken. Das tut mir leid. Aber ich habe "allgemein gesprochen" ;)

Antworten (1)

Ihr Android muss keinen Root-Zugriff haben, um eine App wirklich zu deaktivieren, wenn Sie Version 4.4.x oder höher haben. Alles, was Sie brauchen, ist ein - Setup auf dem PC und aktiviertes USB-Debugging auf einem nicht gerooteten Gerät oder eine Terminal-Emulator-App für ein gerootetes Gerät (Sie können auch adb verwenden).

Wenn Sie die Verwendung von Package Manager ( pm) überprüfen, würden Sie sehen

pm-Block [--user USER_ID] PACKAGE_OR_COMPONENT")
pm unblock [--user USER_ID] PACKAGE_OR_COMPONENT")

Für Lollipop wäre es das

pm verstecken [--user USER_ID] PACKAGE_OR_COMPONENT")
pm einblenden [--user USER_ID] PACKAGE_OR_COMPONENT")

Um ein Paket zu blockieren oder zu verstecken (es ist sicher), tun Sie es einfach

pm block PACKAGE # for KitKat
pm hide PACKAGE  # for Lollipop

Um das Paket freizugeben oder sichtbar zu machen, tun Sie es

pm unblock PACKAGE #for KitKat 
pm unhide PACKAGE  # for Lollipop

PACKAGE→ Paketname einer App. So erfahren Sie den Paketnamen einer App:

Hängen adb shellSie vor jedem Befehl an, um sie vom PC auszuführen.

Die Funktion hinter hide hat den folgenden Kommentar im Quellcode

Versetzt das Paket in einen versteckten Zustand, der fast wie ein deinstallierter Zustand ist, wodurch das Paket nicht verfügbar ist, aber die Daten oder die eigentliche Paketdatei werden nicht entfernt. Die Anwendung kann entweder durch Zurücksetzen des versteckten Zustands oder durch Installieren wieder eingeblendet werden

Eine ähnliche Kommentierung erfolgt hier für block .

Um die Behauptung zu überprüfen, können Sie einige Systemdienste wie meminfo, procstatsund activitydas Tool dumpsys verwenden oder sogar alle Prozesse mit auflisten ps. Sie werden keine aktive Präsenz der blockierten/versteckten App finden.

Dasselbe gilt für viele System-Apps, die über die GUI deaktiviert wurden, oder pm disableaber nicht für jede App , da sogar eine deaktivierte App Broadcasts empfangen kann, für die sie sich registriert hat, was nur möglich ist, wenn sie in den Speicher 1 geladen wird . Trotzdem kann eine deaktivierte App nicht alleine handeln, noch kann sie von einer anderen App ausgeführt werden.

Ich habe einige der Unterschiede zwischen Ausblenden/Blockieren und Deaktivieren auf meine Frage hin diskutiert: pm verstecken vs. pm deaktivierendie Identitätskrise . Es enthält nur ergänzende Informationen zu dieser Antwort, sodass Sie sie überspringen können.

BEARBEITEN:

Es scheint, dass die Technik nicht für alle Apps auf Android KitKat funktioniert. Widerrufen Sie in diesem Fall einfach die Leseberechtigung von der APK der App oder entfernen Sie die Erweiterung .APK aus dem Dateinamen der App (letztere einmal von Jaskaranbir vorgeschlagen), gefolgt von einem sanften/vollständigen Neustart. Dies ist dasselbe wie das Löschen einer App aus dem System, mit dem einzigen Unterschied, dass alle Dateien an ihrem Platz verbleiben würden.

Beide Schritte können mit jeder Root-Dateimanager-App ausgeführt werden. Der Befehlszeilenweg ist:

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: Fehlende technische Beweise, um die Tatsache zu unterstützen

Gute Antwort! Danke dir! Ist es am besten, die App zuerst mit dem Standard-Android-App-Manager zu deaktivieren, oder am besten sicherzustellen, dass sie dort nicht deaktiviert ist?
Es besteht keine Notwendigkeit, die App zu deaktivieren, wenn Sie sich dafür entscheiden, pm block/hidealso lassen Sie sie unberührt.
Wenn es bereits deaktiviert ist, ist es am besten, es erneut zu aktivieren?
Das ist nicht nötig. Das Hide-Attribut würde neben dem Disable-Attribut für dieses Paket gesetzt (Sie können es in überprüfen /data/system/users/0/package-restrictions.xml, suchen Sie nach <pkg name="YOUR_PACKAGE"). Kurz gesagt, es ist sicher, ob Sie den Block/Hide-Befehl auf eine deaktivierte App anwenden oder nicht.
Ich versuchte es. Hier ist die im Terminal-Emulator erhaltene Antwort (wörtlich): „WARNUNG: linker: app_process has text relocations. This is waste memory and is a security risk. Please fix. Killed“
Hmmm ... Es scheint nicht zu funktionieren. Habe es mit 3 Paketen probiert. Sie werden weiterhin geladen und ausgeführt.
" WARNING: linker: app_process has text relocations. Dies verschwendet Speicher und stellt ein Sicherheitsrisiko dar. Bitte beheben. Killed " -- haben Sie Xposed installiert? Früher hatte ich diese Warnung deswegen. Ob sie funktionieren oder nicht, kann ich nicht mit Sicherheit bestätigen, da ich in meinem Kommentar zu Ihrer Frage gesagt habe, dass meine Funde auf Lollipop basieren, der Block jedoch trotzdem funktionieren sollte. Ich werde mal sehen, was ich hier noch finden kann, um zu helfen.
Das ist bizarr. Ich habe das Blockieren von Systemui auf meinem Kitkat getestet und zu meiner Überraschung funktioniert das Blockieren genauso wie das Deaktivieren, diese App bleibt im Speicher. Der SystemUI-Prozess wurde gegabelt, selbst wenn ich ihn beendet habe. Ich weiß nicht, dass es sich um einen Fehler oder ein gewünschtes Verhalten handelt, aber auf jeden Fall steht es im Gegensatz zu meinen in der Antwort angegebenen Ergebnissen im Zusammenhang mit Lollipop. Ich denke, die Antwort ist jetzt ziemlich nutzlos.
@Izzy Ich pinge Sie an, um Sie auf den Chat aufmerksam zu machen, da Sie daran interessiert sein könnten.
@RockPaperLizard, ich habe vergessen, dir einen sehr einfachen Trick zu verraten. Leserechte der Paketdatei (bzw. des Basisverzeichnisses bei Lollipop) entziehen, neu starten und fertig. Mit Root-Berechtigungen können Sie beispielsweise SystemUI auf diese Weise stoppen, adb shell su -c "chmod 111 /system/app/SystemUI.apk". 111 bedeutet, dass nur ausführbare Berechtigungen für Eigentümer, Gruppe und andere festgelegt werden. Starten Sie neu und die App wird dem System fehlen. Sie können es auch einstellen 000.
Großartige Idee. Siehe Chat-Link oben für Fortsetzung ...
Ich habe ein wenig mehr Tests durchgeführt, und die Meldung „WARNING: linker: app_process has text relocations. This is wasteing memory and is a security risk. Please fix. Killed“ erscheint, unabhängig davon, ob pm zum Blockieren oder Entsperren verwendet wird. Es wird auch angezeigt, wenn ein fiktiver Paketname verwendet wird. Ich frage mich in KitKat, ob es irgendetwas tut.
Möglicherweise möchten Sie Ihre Antwort aktualisieren, um deutlich zu machen, dass diese Technik in KitKat anscheinend nicht funktioniert. Können auch nur Broadcast-Empfänger eine deaktivierte App laden, oder werden sie auch von Services geladen? Siehe: android.stackexchange.com/questions/131499/…