1 votes

Comment une application système Android peut-elle redémarrer après avoir été désactivée sur les appareils rootés ?

Donc, pour clarifier, je voudrais savoir comment une application système est capable de se ressusciter (démarrage automatique) après que j'ai lancé une commande kill. Il existe des moyens de supprimer des applications, en utilisant des applications de suppression d'applications ainsi qu'en utilisant directement la commande rm pour effacer physiquement l'apk/odex et les dossiers. Il existe de nombreuses réponses à ce sujet. Ma question est liée au "mécanisme" de démarrage automatique lui-même. C'est-à-dire, y a-t-il un fichier xml et un processus principal en cours d'exécution qui le vérifie ? Ou quelque chose comme ça. Pour référence, j'utilise Android 6.0.1 et MIUI 8.5.3 sur un appareil enraciné.

En gros, j'explore la possibilité que certaines applications système que vous supprimez (et qui mettent votre téléphone en boucle de démarrage) ne soient pas nécessaires, mais que le processus de vérification/essai de démarrage soit à l'origine de la boucle. Le raisonnement est que, à part l'erreur "application arrêtée de fonctionner", le système ne semble pas affecté. C'est donc le message qui crée le problème et ce qui est à l'origine de celui-ci. Cette réponse me permettra de tester cette possibilité, et de poster mes résultats ici.

Edit1: Donc on dirait que la réponse à moitié Pour répondre à ma propre question, (en supposant qu'il n'y ait pas d'autre "magie noire" comme une autre application qui vérifie le statut...) - le redémarrage est très probablement réalisé via Récepteur de diffusion .

Une application peut Enregistrer un récepteur de diffusion pour les événements du système . Le principe est le suivant : lorsqu'un événement se produit sur le système (branchement d'une clé USB, détection d'Internet, etc.), une diffusion est envoyée à toutes les applications qui sont enregistrées pour écouter cet événement. Une application peut s'enregistrer via son AndroidManifest.XML ou de manière pragmatique. Mais la partie principale de la question est - est ce registre et comment est-il possible de modifier il (sur un appareil rooté bien sûr)

Edit2: Un peu plus d'informations. Si je fais ps, le processus se déroule normalement :

finddevice [....] SyS_epoll_ 7f83b48c54 S com.xiaomi.finddevice

Mais si je renomme un dossier de ce processus système (pour le désactiver), et que je tue ensuite le processus, il semble que son fil de liaison ( Liant_thr ) en essayant de le ramener à la vie :

finddevice [....] binder_thr 7f83b48d44 S com.xiaomi.finddevice

Et dès que je renomme le dossier en original, il recommence à s'afficher en tant que SyS_epoll_

0 votes

Les applications s'enregistrent (si elles en ont besoin) auprès du système pour les diffusions, telles que la modification de la connectivité du réseau, le changement d'orientation de l'appareil, etc. Lorsqu'un tel changement se produit, la diffusion déclenche l'application. Si vous avez installé Xposed Framework, essayez ceci : repo.xposed.info/module/de.defim.apk.receiverstop et voyez si l'application se réveille toujours d'elle-même.

0 votes

@Firelord Si j'ai raison, alors c'est faisable même à partir de SD Maid pour les utilisateurs non Xposed.

0 votes

@DeathMaskSalesman J'ai essayé SD Maid, c'est un bon outil qui fonctionne sur certaines applications système, mais pas sur toutes. Il dit "failed" quand j'essaie de désactiver leurs listeners dans le Receiver Manager.

0voto

Firelord Points 23064

Je ne pouvais pas comprendre 本コード beaucoup mais les informations sur les récepteurs semblent être conservées uniquement en mémoire (pas de fichier d'index dans le stockage interne). Vous pouvez utiliser la commande suivante pour voir quel récepteur est enregistré pour quel type de diffusion.

adb shell dumpsys package

Quant à la désactivation d'un récepteur particulier, essayez Elixir 2 . Vous pouvez aller dans sa section Applications, choisir votre application et ensuite faire défiler vers le bas pour trouver les récepteurs (statiques). À côté d'eux se trouve l'option permettant de désactiver ce composant.

Une autre option consiste à utiliser RécepteurStop Module Xposed. Sa version gratuite permet de désactiver les récepteurs pour les apps installées par l'utilisateur uniquement.

En ce qui concerne la ligne de commande, si vous connaissez le nom du récepteur/composant, vous pouvez le faire :

adb shell su -c 'pm disable PKG/COMP'         # where PKG is package name of the app and COMP is the component you intend to disable.

Cela dit, je n'ai pas testé si lesdites solutions fonctionnent pour les récepteurs enregistrés dynamiquement.

0 votes

Il va sans dire que la réponse n'est valable que pour les appareils Android rootés.

1 votes

Le problème, c'est que la désactivation de pm ne fonctionne pas pour ces paquets système "coriaces" (elle fonctionne pour certaines applications système). (Pour l'instant, j'utilise un script que j'ai écrit pour faire la désactivation/activation alternativement. Le script 1) renomme les fichiers .apk et .odex et 2) tue le processus. Cela crée une boucle infinie de pop-up qui dit "malheureusement..." Ensuite, j'utilise

1 votes

T

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