Android: le code natif peut-il avoir une intention de diffusion du système Android?

Récemment, j'ai vu une application drôle – Photo Wonder. Lorsque cette application est désinstallée, elle affiche une page d'enquête Web demandant le motif de la désinstallation de l'application. Maintenant, voici le problème. Pour autant que je sache, après qu'une application a été supprimée, le système diffuse l'intention ACTION_PAKAGE_REMOVED . Mais cette application drôle a pu montrer ma page Web bien que le document officiel indique "Le paquet qui est en cours d'installation ne reçoit pas cette intention". Quoi qu'il en soit, je pourrais trouver un processus vérifiant un type de statut de l'application.

Maintenant, voici la question. L'application native peut-elle capter l'intention diffusée du système Android? Si c'est possible, laissez-moi savoir comment! 🙁

  • Modifier les éléments NavigationView lorsque l'utilisateur est connecté
  • FFMpeg jni dans Android?
  • AsyncTask: doInBackground non appelé
  • Comment supprimer une ligne d'une table dans SQLite android?
  • Dois-je appeler super.onPostExecute (résultat) dans Android AsyncTask?
  • Javax.net.ssl.SSLException: protocole de saisie SSL interrompu Réinitialisation de la connexion par pair lors de l'appel du service web Android
  • 2 Solutions collect form web for “Android: le code natif peut-il avoir une intention de diffusion du système Android?”

    Je crois que j'ai l'idée principale de la façon dont ils l'ont fait. Voici les pièces du puzzle.

    1. Toute application Android peut démarrer un processus en appelant la fonction Runtime.exec() .

       Runtime.getRuntime().exec("chmod 755 '/data/data/my.app/files'/native_code"); 

      Une fois cette ligne de code exécutée, un autre processus a été engendré. Ce processus fonctionne sous le même utilisateur linux que l'application elle-même.

    2. Lorsqu'un utilisateur ouvre Paramètres -> Applications -> Ma application et appuie sur le bouton "Force Stop" , le processus principal de la demande est tué, mais le processus d'hébergement du programme natif (voir ci-dessus) fonctionne toujours . Je crois personnellement que c'est un problème de sécurité et je vais le signaler à AOSP.

    3. Un tel programme natif peut fonctionner infiniment et ne rien faire – simplement dormir. Mais avant d'aller dormir, il enregistre un gestionnaire de signal de terminaison qui s'appellera lorsque le processus sera terminé.

       int main(void) { signal(SIGTERM, termination_handler); while(1) { sleep(10); } } void termination_handler(int sig) { // handle termination signal here } 
    4. Maintenant, vous devriez déjà savoir quelle est la dernière pièce, n'est-ce pas? Mon service termination_handler natif devrait pouvoir lancer un navigateur. Je n'ai pas essayé ceci dans le code, mais je suppose que cela est possible, car je peux le faire en utilisant le adb shell comme suit

       adb shell am start -a android.intent.action.VIEW -d http://www.google.com 

    Maintenant, revenons à la question de savoir comment Dolphin Browser le fait. Installez l'application et lancez-la au moins une fois. Une fois commencé, il enregistre un observateur de désinstallation natif en utilisant les principes décrits ci-dessus. Pour le voir, connectez-vous à l'appareil et ouvrez le adb shell . Ensuite, appelez ps pour voir la liste des processus. Vous verrez deux processus similaires à suivants

      u0_a109 315 ... mobi.mgeek.TunnyBrowser u0_a109 371 ... /data/data/mobi.mgeek.TunnyBrowser/files/watch_server 

    Comme vous pouvez le voir, il démarre un programme natif watch_server, qui fait partie de son fichier apk. Ouvrez maintenant la page d' App info de Dolphin Browser et appuyez sur "Force Stop" . Retournez au terminal et appelez ps nouveau. Vous verrez qu'il n'y a plus de processus mobi.mgeek.TunnyBrowser, mais le serveur watch_server fonctionne toujours.

    En passant, cette approche ne fonctionnera que si le serveur Watcher fonctionne tout le temps. Pour vous assurer qu'il soit toujours prêt, les deux applications nécessitent une autorisation "run at startup" , où elles commencent leurs observateurs.

    Maintenant, lorsque vous désinstallez l'application, Android arrête tous les processus appartenant à cette application. Watcher reçoit le signal de terminaison et ouvre un navigateur avec une URL prédéfinie puis s'arrête.

    Je pourrais regarder un peu différent dans certains détails, mais le concept principal derrière ce hack doit être tel que décrit.

    Il pourrait y avoir une chose délicate comme si cette application possède également un service d'observateur.

    Vous pouvez vérifier que l'autorisation utilisée par cette application peut contenir les autorisations INSTALL et UNINSTALL.

    COMMENT ÇA MARCHE:

    1. Au lieu d'une application unique qui peut avoir un paquet de 2 applications.

    2. Au fur et à mesure que vous l'installez, cette application installe également un service qui surveille l'état de votre application

    3. Lorsque vous essayez de désinstaller cette application, l'émission du système est appelée qui est gérée par ce service et vérifie que si votre colis existe dans une application installée ou non.

    4. Dès que ce service constate que votre colis n'est pas dans la liste, il appelle une intention avec une vue d'action avec l'URL Web pour ouvrir la contre-attache.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.