Warum werden deaktivierte Apps noch ausgeführt?

8

Ich habe festgestellt, dass Apps (wie Google Contacts Sync), die mit dem Standard-App-Manager für Android (KitKat) deaktiviert wurden, bei Verwendung von Prozessbeobachter-Tools weiterhin als ausgeführt angezeigt werden. Dies gilt auch nach dem 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 Android im obigen Beispiel anweisen können, Ihre Kontakte nicht zu synchronisieren, aber dennoch den Google Contacts Sync-Prozess ausführen. Aber lassen Sie uns nicht auf dieses Beispiel eingehen ... es ist nur ein Beispiel.)

RockPaperLizard
quelle
Direkt neben der Schaltfläche "Deaktivieren" befindet sich eine Schaltfläche "Stopp erzwingen". Drücken Sie darauf und der Vorgang sollte beendet und nicht mehr gestartet werden.
GiantTree
@ GiantTree Danke. Wird es nach einem Neustart nicht einfach neu gestartet?
RockPaperLizard
4
In Ihrem Fall ist dies der Fall, da eine System-App einen exportierten Dienst dieses Pakets explizit aufgerufen hat und der einzige Weg, diesen Prozess (und jeden anderen) zuverlässig zu beenden, darin besteht, ihn aktiv mit Greenify, Amplify (erfordert Xposed) oder ähnlichen Apps zu beenden. Hinweis: Dies sollte nicht passieren und als Fehler angesehen werden, da der PackageManager die Aufgabe hat, die Ausführung einer deaktivierten App nicht zuzulassen.
GiantTree
1
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 ( block/hidewas bei pm nicht der Fall ist ). Ich frage mich daher, 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 Mangel an Hintergrund, Themen, Statusleiste und mehr beobachten können. Vielleicht kann daraus eine neue Frage geschmiedet werden.
Feuerlord
1
@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, damit andere Apps sie finden können und nenne seine Absichten. Es scheint, als ob das Ausblenden / Blockieren eher mit einem "Deinstallieren .apkund Zurücklassen von Daten" vergleichbar ist. Die App wird also "völlig unregistriert und für alles außer dem Dateimanager unsichtbar", sodass andere Apps ihre Absichten nicht mehr so ​​aufrufen können, wie sie können finde sie nicht.
Izzy

Antworten:

7

Ihr Android muss keinen Root-Zugriff haben, um eine App wirklich zu deaktivieren, wenn Sie Version 4.4.x oder höher haben. Sie benötigen Setup auf dem PC und ein USB-Debugging, das auf einem nicht gerooteten Gerät aktiviert ist , oder eine Terminalemulator-App für ein gerootetes Gerät (Sie können auch ADB verwenden).

Wenn Sie die Verwendung von Package Manager ( pm) überprüfen , wird dies angezeigt

pm block [--user USER_ID] PACKAGE_OR_COMPONENT ")
pm entsperren [--user USER_ID] PACKAGE_OR_COMPONENT ")

Für Lollipop wäre es das

pm hide [--user USER_ID] PACKAGE_OR_COMPONENT ")
pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT ")

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

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

Führen Sie folgende Schritte aus, um das Paket zu entsperren oder wieder einzublenden

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

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

adb shellVor dem Befehl anhängen , um sie vom PC aus auszuführen.

Die Funktion hinter hide enthält den folgenden Kommentar im Quellcode

Versetzt das Paket in einen verborgenen Zustand, der fast wie ein deinstallierter Zustand ist, wodurch das Paket nicht verfügbar ist, aber weder die Daten noch die eigentliche Paketdatei entfernt werden. Die Anwendung kann ausgeblendet werden, indem entweder der ausgeblendete Status zurückgesetzt oder installiert wird

Ähnliches Kommentieren wird hier für Block gemacht .

Um den Anspruch zu überprüfen, können Sie einige Systemdienste wie verwenden meminfo, procstatsund activitymit dem dumpsys Werkzeug oder auch mit allen , die Prozesse auflisten ps. Sie werden keine aktive Präsenz der blockierten / versteckten App finden.

Das Gleiche gilt für viele System-Apps, die über die GUI deaktiviert wurden, oder pm disablenicht für jede App, da selbst eine deaktivierte App Broadcasts empfangen kann, für die sie sich registriert hat. Dies ist nur möglich, wenn sie in den Speicher geladen wird 1 . Trotzdem kann eine deaktivierte App nicht alleine agieren und auch nicht von einer anderen App ausgeführt werden.

Ich habe einige der Unterschiede zwischen Verstecken / Blockieren und Deaktivieren in meiner Frage pm hide VS pm disable - die Identitätskrise - diskutiert . Es enthält nur zusätzliche 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. In diesem Fall widerrufen Sie einfach die Leseberechtigung aus dem APK der App oder entfernen Sie die Erweiterung .APK aus dem Dateinamen der App (letzterer von Jaskaranbir einmal vorgeschlagen), gefolgt von einem Soft / Full-Neustart. Dies entspricht dem Löschen einer App aus dem System, mit dem Unterschied, dass alle Dateien an ihrem Speicherort verbleiben.

Beide Schritte können mit jeder Root-Dateimanager-App ausgeführt werden. Die Befehlszeile lautet:

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 stützen

Feuerlord
quelle
Gute Antwort! Vielen Dank! Ist es am besten, die App zuerst mit dem Standard-Android-App-Manager zu deaktivieren oder sicherzustellen, dass sie dort nicht deaktiviert ist?
RockPaperLizard
Sie müssen die App nicht deaktivieren, wenn Sie sich dafür entscheiden. pm block/hideLassen Sie sie also unberührt.
Feuerlord
Wenn es bereits deaktiviert ist, ist es am besten, es wieder zu aktivieren?
RockPaperLizard
1
Das ist bizarr. Ich habe das Blockierungssystem auf meinem Kitkat getestet und zu meiner Überraschung funktioniert das Blockieren genauso wie das Deaktivieren. Diese App bleibt im Speicher. Der SystemUI-Prozess wurde gespalten, selbst wenn ich ihn beendet habe. Ich weiß nicht, ob es sich um einen Fehler oder ein gewünschtes Verhalten handelt, aber auf jeden Fall steht es im Gegensatz zu meinen Lollipop-bezogenen Ergebnissen, die in der Antwort angegeben sind. Ich denke, die Antwort ist jetzt ziemlich nutzlos.
Feuerlord
1
@RockPaperLizard, ich habe vergessen, dir einen sehr einfachen Trick zu erzählen. Widerrufen Sie die Leseberechtigungen der Paketdatei (oder des Basisverzeichnisses bei Lollipop), starten Sie den Computer neu und erledigen Sie ihn endgültig. 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 fehlt im System. Sie können es auch einstellen 000.
Feuerlord