Wie funktioniert das Einfrieren einer App technisch?

22

Apps wie Link2SD und Titanium Backup können andere Apps "einfrieren", dh deaktivieren, ohne sie zu entfernen. Was tun diese Apps, um dies zu erreichen?

Erik
quelle

Antworten:

28

Titanium Backup usw. wird nur Package Manager (pm)zum Einfrieren einer App verwendet. pmhat eine Funktion, die verhindert, dass Apps im Launcher ausgeführt und angezeigt werden. Um es zu benutzen, führen Titanium Backup usw. den folgenden Befehl aus:

pm disable {Paketname}

Sie können Apps selbst einfrieren, ohne eine spezielle Freezer-App zu verwenden. Verwenden Sie einfach den obigen Befehl in Terminal Emulator oder ADB Shell.

Wenn Sie zum Beispiel einfrieren möchten Stock Web Browser, öffnen Sie den Befehl Terminal Emulatorund wechseln Sie zu root su. Führen Sie dann aus # pm disable com.android.browser.
Es wird zurückkehren #Package com.android.browser new state: disabled. Getan!
Starten Sie Ihren Launcher neu (bei einigen Geräten ist möglicherweise ein Neustart erforderlich), damit das App-Symbol nicht mehr angezeigt wird.

Zum Abtauen der App, ersetzen Sie einfach disablemit enablein dem Befehl.

Android Quesito
quelle
Entspricht dies den hier beschriebenen Befehlen kill -STOP, kill -CONT? linuxpoison.blogspot.com/2007/11/…
NoBugs
@NoBugs Starten Sie Ihr Gerät neu. Einige Geräte benötigen dies, um eine App vollständig zu deaktivieren. Und ja, das ist kein Kill-Befehl.
Android Quesito
Recht. Manchmal pm disablesagt nur "getötet", dann startet der Prozess sofort wieder. kill -STOP pid ist besser. Sie können sehen, welche in der psAusgabe gestoppt sind .
NoBugs
13

Ich habe herausgefunden, wie es pm disablefunktioniert:

Wenn Sie rennen cat /system/bin/pm, gibt es:

# Script to start "pm" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"

Es ist also anscheinend dasselbe wie der PackageManager, den wir von Java aus verwenden, es nennt es sich - nur in einem Stammkontext, auf den keine Benutzer-App direkt zugreifen kann.

Sie KÖNNEN mit prüfen, ob etwas eingefroren ist

getPackageManager().getApplicationEnabledSetting( the package name ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)
NoBugs
quelle
-4

In Unix-Systemen haben Dateien drei Berechtigungen: Lesen, Schreiben und Ausführen.

(Für 3 Kategorien von Personen: der Eigentümer der Datei [normalerweise ihr Ersteller], eine Gruppe von Personen und alle anderen, aber das Thema ist ungültig).

Wenn Sie die Ausführungsberechtigung der Datei entfernen, kann diese nicht mehr gestartet (ausgeführt) werden.

dralpuop
quelle
Hallo dralpuop. Android-Apps sind keine Binärdateien, daher hat das Hinzufügen oder Entfernen der ausführbaren Berechtigung keinen Einfluss auf deren Ausführung.
Feuerfürst
Android ist System 5 Unix, bei dem (zum Beispiel) Shell-Skripte keine Binärdateien sind und das Hinzufügen oder Entfernen der ausführbaren Berechtigung einen Unterschied macht.
Dralpuop
Ein Shell-Skript kann ohne gesetztes ausführbares Bit ausgeführt werden, indem es als Argument direkt an einen Interpreter übergeben wird. Für Shell-Skripte und Apps spielt dies also keine Rolle. Die Frage und Frage geht es übrigens um Apps für Android-Apps, nicht um Shell-Skripte.
Feuerfürst
1
Probieren Sie diese Quelle aus, um zu erfahren, wie Apps in Android ausgeführt werden. github.com/dogriffiths/HeadFirstAndroid/wiki/…
Firelord