Comment le gel d'une application fonctionne-t-il techniquement?

22

Des applications comme Link2SD et Titanium Backup peuvent "geler" d'autres applications, c'est-à-dire les désactiver sans les supprimer. Que font ces applications pour y parvenir?

Erik
la source

Réponses:

28

Titanium Backup, etc. utilisez simplement la fonction intégrée Package Manager (pm)pour geler une application. pma une fonctionnalité pour empêcher les applications de s'exécuter et d'apparaître dans le lanceur. Pour l'utiliser, Titanium Backup etc. exécutez la commande suivante:

pm désactiver {package_name}

Vous pouvez geler des applications par vous-même sans utiliser d'application de congélation dédiée. Utilisez simplement la commande ci-dessus dans Terminal Emulator ou ADB Shell.

Par exemple, si vous souhaitez figer Stock Web Browser, ouvrez Terminal Emulatoret basculez vers root en utilisant la sucommande. Ensuite, exécutez # pm disable com.android.browser.
Ça va revenir #Package com.android.browser new state: disabled. Terminé!
Redémarrez votre lanceur (certains appareils peuvent nécessiter un redémarrage) pour voir l'icône de l'application disparue.

Pour décongeler l'application, remplacez simplement disablepar enabledans la commande.

Android Quesito
la source
Est-ce la même chose que les commandes kill -STOP, kill -CONT décrites ici? linuxpoison.blogspot.com/2007/11/…
NoBugs
@NoBugs Redémarrez votre appareil. Certains appareils en ont besoin pour désactiver complètement une application. Et oui, ce n'est pas la commande kill.
Android Quesito
Droite. Parfois pm disabledit seulement "tué", puis le processus redémarre immédiatement. kill -STOP pid est meilleur. Vous pouvez voir ceux qui sont arrêtés, en pssortie.
NoBugs
13

J'ai trouvé comment ça pm disablemarche:

Si vous courez cat /system/bin/pm, cela donne:

# 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 "$@"

Donc apparemment, c'est la même chose que le PackageManager que nous utilisons depuis Java, il l'appelle - juste dans un contexte racine auquel aucune application utilisateur ne peut accéder directement.

Vous POUVEZ vérifier si quelque chose est gelé, en utilisant

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

Dans les systèmes Unix, les fichiers ont 3 autorisations: lire, écrire et exécuter.

(Pour 3 catégories de personnes: le propriétaire du fichier [généralement son créateur], un groupe de personnes et tout le monde, mais il est hors sujet).

Si vous supprimez l'autorisation d'exécution du fichier, il ne pourra plus être lancé (exécuté).

dralpuop
la source
Bonjour dralpuop. Les applications Android ne sont pas des binaires, donc l'ajout ou la suppression de l'autorisation exécutable ne fait aucune différence pour leur exécution.
Firelord
Android est System 5 Unix, où (par exemple) les scripts shell ne sont pas des binaires, mais l'ajout ou la suppression de l'autorisation exécutable fait une différence.
dralpuop
Un script shell peut être exécuté sans bit exécutable défini en le passant directement comme argument à un interpréteur, donc cela ne fait aucune différence pour les scripts shell ou pour les applications. La question et la question concernent les applications Android en passant, pas les scripts shell.
Firelord
1
Essayez cette source pour savoir comment les applications sont exécutées dans Android. github.com/dogriffiths/HeadFirstAndroid/wiki/…
Firelord