Je pensais que cela n’était pas possible, mais j’ai remarqué que NQ Mobile Security est capable d’afficher un message après que je clique sur Désinstaller et avant que le PackageUninstaller soit appelé. Je voudrais reproduire ce problème dans mon application.
J'ai essayé avec une activité d'écouter l'intention "Android.intent.action.DELETE", comme suggéré ici: Comment savoir que mon application est désinstallée de l'appareil ...?
Mais alors que je suis sur le point de désinstaller mon application, le sélecteur apparaît et vous demande de choisir mon application ou le programme de désinstallation du package. Comment puis-je éviter ça?
Existe-t-il un autre moyen d'intercepter l'événement UNINSTALL de votre application? (avant de répondre que ce n'est pas possible, essayez de désinstaller NQ Mobile Security et voyez ce qu'il se passe. Sur mon Android 2.3.4, un écran sympathique s'affiche indiquant qu'il n'est pas prudent de se passer d'une application de sécurité).
J'ai remarqué que NQ Mobile Security est capable d'afficher un message après avoir cliqué sur Désinstaller et avant d'appeler PackageUninstaller
Ils doivent exploiter une faille de sécurité dans Android. Je vais le rechercher et voir si je peux le faire réparer. Les applications ne sont pas supposées avoir le contrôle au moment de la désinstallation.
Merci de l'avoir signalé!
Existe-t-il un autre moyen d'intercepter l'événement UNINSTALL de votre application?
J'espère bien que non.
Opera Max est une application qui fait quelque chose de similaire - après avoir été désinstallé, ouvre une page Web.
Comment font-ils ça?
En utilisant libevent, à partir du code natif, ils observent le répertoire /data/data/com.opera.max à supprimer, puis publient une bonne vieille action.VIEW diffusée lorsqu'elle se produit.
Installez leur application, exécutez-la et, sur le périphérique racine de adb Shell, supprimez le répertoire /data/data/com.opera.max.
UPDATE: J'ai créé un exemple d'application qui montre comment cela fonctionne. BTW cela ne fonctionne pas avec les versions récentes d'Android (KitKat + je pense): https://github.com/pelotasplus/ActionAfterUninstall
Ils demandent probablement une permission très critique que l'utilisateur leur accorde sans le savoir. Consultez l'onglet "Autorisations" de cette application (à la date du 15/06/2012): https://play.google.com/store/apps/details?id=com.nqmobile.antivirus20&hl=fr .
La liste des autorisations que cette application obtient est carrément effrayante. Entre autres:
OUTILS DU SYSTÈME RÉCUPÉRATION DES APPLICATIONS EN COURS Permet à l'application de récupérer des informations sur les tâches en cours ou récemment exécutées. Les applications malveillantes peuvent découvrir des informations privées sur d'autres applications.
CHANGER/INTERCEPTER PARAMÈTRES RÉSEAU ET TRAFIC Permet à l'application de modifier les paramètres réseau et d'intercepter et d'inspecter tout le trafic réseau, par exemple pour changer le proxy et le port de tout APN. Des applications malveillantes peuvent surveiller, rediriger ou modifier des paquets réseau à votre insu.
EMPÊCHER LA TABLETTE DE DORMIR PRÉVENIR LE TÉLÉPHONE DE DORMIR Permet à l'application d'empêcher la tablette de s'endormir. Permet à l'application d'empêcher le téléphone de se coucher.
MODIFIER LES PARAMÈTRES DE L’UI Permet à l’application de modifier la configuration actuelle, telle que les paramètres régionaux ou la taille de la police. MODIFIER LES PARAMÈTRES DU SYSTÈME GLOBAL Permet à l'application de modifier les données de paramètres du système. Des applications malveillantes peuvent corrompre la configuration de votre système.
AFFICHER LES ALERTES AU NIVEAU DU SYSTÈME Permet à l'application d'afficher des fenêtres d'alerte système. Des applications malveillantes peuvent occuper tout l'écran.
MONTAGE ET DÉMONTAGE DE FICHIERS DE SYSTÈMES Permet à l'application de monter et de démonter des systèmes de fichiers pour un stockage amovible.
CHANGER LA CONNECTIVITÉ RÉSEAU Permet à l'application de modifier l'état de la connectivité réseau.
CHANGE WI-FI STATE Permet à l'application de se connecter et de se déconnecter des points d'accès Wi-Fi et de modifier les réseaux Wi-Fi configurés.
-- Mettre à jour --
J'ai aussi constaté que le gestionnaire de paquets Android supprime à peu près un paquet s'il est invité à le faire. Le contrôle only qu'il effectue avant de vérifier si le package en cours de suppression est actuellement enregistré en tant qu'administrateur de périphérique actif:
try {
if (dpm != null && dpm.packageHasActiveAdmins(packageName)) {
Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
}
} catch (RemoteException e) {
}
Voir la ligne 6900 dans PackageManagerService dans la source AOSP ici .
Pour cela, l'application doit être explicitement enregistrée en tant qu'administrateur de périphérique par l'utilisateur. Voir les notes sur l'administration des appareils ici: http://developer.Android.com/training/enterprise/device-management-policy.html .
Je suis à peu près sûr qu'ils surveillent l'interruption de LogCat lorsque Activity Manager appelle PackageUninstaller. Je pense qu'ils tuent la tâche et commencent leur propre activité. C'est assez intelligent, mais il exploite définitivement une faille de sécurité dans Android.
Selon https://stackoverflow.com/a/26829978/1317564 , voici un exemple de code le faisant: https://github.com/zzljob/Android-uninstall-feedback/blob/master /library/jni/feedback-uninstall.c . Cela n'empêchera pas réellement la désinstallation, mais fournira un moyen de la récupérer et de prendre des mesures. Honnêtement, je suis surpris que cela fonctionne sous Android et que l'équipe ait peut-être comblé l'écart dans les dernières versions.