9 votes

Pourquoi les applications désactivées continuent-elles de fonctionner ?

J'ai remarqué que les applications (telles que Google Contacts Sync) qui ont été désactivées à l'aide du gestionnaire d'applications d'Android (KitKat) s'affichent toujours comme étant en cours d'exécution lorsqu'on utilise les outils d'observation des processus. Cela est vrai même après le redémarrage de l'appareil.

Pourquoi les applications désactivées continuent-elles de fonctionner ? Existe-t-il un moyen efficace (et sûr) de les désactiver ?

Les solutions nécessitant des privilèges Root sont acceptables.

(Notez que pour l'exemple spécifique ci-dessus, vous pouvez demander à Android de ne pas synchroniser vos contacts, mais il exécute quand même le processus de synchronisation des contacts Google. Mais ne nous attardons pas sur cet exemple... ce n'est qu'un exemple).

7voto

Firelord Points 23064

Votre Android n'a pas besoin d'avoir un accès Root pour désactiver réellement une application, si vous avez la version 4.4.x ou supérieure. Tout ce dont vous avez besoin est adb dans le PC et Débogage USB activé sur un appareil non enraciné, ou une application émulateur de terminal pour un appareil enraciné (vous pouvez aussi utiliser adb).

Si vous vérifiez le système de gestion des paquets ( pm ), vous verrez

pm block \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")
pm unblock \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")

Pour Lollipop, ce serait

pm hide \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")
pm unhide \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")

Pour bloquer ou cacher un paquet (c'est sans danger), il suffit de faire

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

Pour débloquer ou dé-cacher le paquet, faites

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

PACKAGE → nom du paquet d'une application. Pour connaître le nom du paquet d'une application :

Ajouter adb shell avant toute commande pour les exécuter à partir du PC.

La fonction qui se cache derrière cacher a le commentaire suivant dans le code source

Met le paquet dans un état caché, qui est presque comme un état désinstallé, rendant le paquet indisponible, mais il ne supprime pas les données ou le fichier du paquet réel. L'application peut être dé-cachée soit en réinitialisant l'état caché, soit en l'installant.

Des commentaires similaires sont effectués pour bloc aquí .

Afin de vérifier la demande, vous pouvez utiliser certains services système tels que meminfo , procstats y activity en utilisant le dumpsys ou même de lister tous les processus utilisant ps . Vous ne trouverez pas de présence active de l'application bloquée/cachée.

Il en va de même pour un grand nombre d'applications système désactivées à l'aide d'une interface graphique ou d'un système de gestion de l'information. pm disable mais pas pour toutes les applications puisque même une application désactivée peut recevoir diffuse pour lequel il s'est inscrit, ce qui ne peut se faire que s'il est chargé dans la mémoire 1 . Néanmoins, une application désactivée ne peut pas agir seule, ni être exécutée par une autre application.

J'ai discuté de certaines des différences entre cacher / bloc y désactiver sur ma question pm hide VS pm disable -- la crise d'identité . Il ne fournit que des informations complémentaires à cette réponse, vous pouvez donc le sauter.

EDIT :

Il semble que la technique ne fonctionne pas pour toutes les applications sous Android KitKat. Dans ce cas, il suffit de révoquer l'autorisation de lecture de l'APK de l'application ou de supprimer l'extension .APK du nom de fichier de l'application (cette dernière suggestion a été faite par Jaskaranbir une fois), puis de procéder à un redémarrage progressif ou complet. C'est la même chose que de supprimer une application du système, à la seule différence que tous les fichiers resteront à leur place.

Ces deux étapes peuvent être exécutées à l'aide de n'importe quelle application de gestion de fichiers racine. La méthode en ligne de commande est la suivante :

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 : Manque de preuves techniques pour étayer le fait

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X