Déterminer quelle application s'appuie sur d'autres applications?

21

Existe-t-il un moyen de déterminer quelle application s'appuie sur d'autres applications?

Par exemple, l'application Facebook Messenger peut dessiner des bulles de discussion par-dessus tout, mais comment savoir quelle application fait cela?

Mon problème:

J'ai une application qui dessine des publicités par-dessus tout et je veux savoir quelle application fait cela. Pas seulement pour le désinstaller, mais pour avertir tous ceux qui utilisent cette application. (Je n'ai installé aucune application récemment et j'ai déjà vérifié les dernières mises à jour.)

J'ai essayé d'utiliser la hiérarchie des vues de vidage pour UI Automator à partir d'Android Studio, mais il semble que les applications qui dessinent en haut ne peuvent pas être sélectionnées de cette façon.

(Cliquez sur l'image pour agrandir)

Écran Android Studio

andreroggeri
la source
Juste pour ajouter aux problèmes notés dans les réponses ci-dessous (pour essayer de le garder complet). Dans TouchWiz (Samsung Galaxy, le mien est la note 4), la désactivation du panneau de touches latéral a résolu ce problème pour moi.
0xc0de
Pour les non-développeurs, vérifiez ici la liste des applications: android.stackexchange.com/questions/154274/…
Jonathan

Réponses:

24

Remarque:

  • doit déjà être configuré sur PC.
  • Pour Android antérieur à la version 4.4.x, un accès root peut être requis.
  • Certaines commandes ne fonctionneraient pas sur Android avant la version 5.1.
  • Passez à la rubrique " Applications pour les applications " si vous n'êtes pas familier ou mal à l'aise avec la ligne de commande et / ou la ligne de commande ne parvient pas à résoudre votre problème.

Modifier: coupez la chasse dans la solution précédente et suivez uniquement cette section modifiée.

Configurez et exécutez cette commande:

adb shell "dumpsys window windows | toybox grep -i system_alert_window"

Vous obtiendrez la sortie de toutes les superpositions actives à l'écran. Exemple de sortie avec DU Screen Recorder, Tasker et AZ Screen Recorder montrant les superpositions actives à l'écran:

bash-4.3 # adb shell "fenêtres de fenêtre dumpsys | toybox grep -i system_alert_window"
    mOwnerUid = 10087 mShowToOwnerOnly = true package = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10638 mShowToOwnerOnly = true package = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW

Le texte en surbrillance à côté de package = et avant appop est le (s) nom (s) de package des applications qui dessinent actuellement la superposition à l'écran. Dans votre cas, la sortie incluant le (s) nom (s) de package serait différente.

Notez le (s) nom (s) du package (désormais PKG) et exécutez cette commande:

adb shell am force-stop PKG

Remplacez PKG par le nom du package que vous avez noté. Si vous aviez plusieurs noms de package, répétez la commande avec un seul nom de package à la fois.

La commande arrêterait de force l'application et éliminerait ainsi la superposition. Cela devrait fonctionner. Vous pouvez également retirer l'autorisation de "Dessiner sur d'autres applications" (superposition d'écran en bref) des applications en utilisant cette commande:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Encore une fois, remplacez PKG par le nom du package si nécessaire. En outre, vous devrez peut-être répéter la commande d'arrêt forcé pour le PKG. Si vous décidez d'annuler les modifications, remplacez ignore par allow dans la commande susmentionnée.

Vous pouvez également utiliser App Ops pour gérer les autorisations de l'interface graphique.

Pour savoir quel nom de package correspond à quelle application, vous pouvez essayer une application open source comme Applications Info . Recherchez par nom de package et vous obtiendrez le nom de l'application.

Edition terminée

Vous n'avez vraiment plus besoin de lire maintenant . Je laisse intacte la solution précédente (c'est-à-dire la section suivante) parce que 21 personnes qui l'ont votée l'ont trouvée utile et je ne veux plus me tromper.


Un moyen simple serait de trouver toutes les applications autorisées à "dessiner sur d'autres applications", puis de les distinguer de celles actuellement actives à l'écran. Ensuite, arrêtez de force ces applications courantes jusqu'à ce que vous identifiiez l'application responsable de la superposition active.

Énumérer les applications autorisées à superposer

L'autorisation requise par une application pour créer une superposition est android.permission.SYSTEM_ALERT_WINDOW(dessiner sur d'autres applications).

Nous devons trouver toutes les applications installées ayant ladite autorisation. C'est à vous de trouver une méthode pour cela. Ma réponse ici peut vous aider.

Notez que nous avons besoin des noms de packages des applications et non de leurs étiquettes.

Sélection de cerises depuis les fenêtres actives

Exécutez la commande

adb shell dumpsys window windows 

Cela vous donnerait des détails sur la cause de l'affichage de quelque chose à l'écran, y compris le nom du composant d'une application à l'origine de cela.

La façon dont vous extrairez le nom dépend de vous. Vous pouvez cependant essayer cette commande

adb shell 'dumpsys window windows | grep "Window #"'

Si vous recevez l'erreur: 'grep' n'est pas reconnu comme une commande interne ou externe , sous Windows essayez cette commande alternative:

adb shell "dumpsys window windows | grep 'Window #'"

Sortie démo

Fenêtre # 4 Fenêtre {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Fenêtre # 5 Fenêtre {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Fenêtre # 6 Fenêtre {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Fenêtre no 7 Fenêtre {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:

Dans la sortie ci-dessus, tout ce qui réussit u0 et précède /est le nom du package d'une application. Une application peut avoir plusieurs composants affichant quelque chose à l'écran.

Vous devez créer une liste de ces noms de packages. Si vous avez BusyBox installé , vous pouvez le faire

adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'

Quoi qu'il en soit, vous auriez maintenant deux listes:

  • La première liste contient toutes les applications ayant l'autorisation android.permission.SYSTEM_ALERT_WINDOW.
  • La deuxième liste contient toutes les applications affichant activement quelque chose à l'écran.

Comparez ces deux listes et identifiez les applications qui sont courantes dans les deux listes. Cette troisième liste constituerait des applications autorisées à dessiner une superposition et dessinent actuellement une superposition active à l'écran.

Temps de tuer

Tuez chacune des applications de la troisième liste une par une et notez l'état de la superposition. Vous pouvez utiliser am force-stop PACKAGE_NAME --user 0ou toute autre méthode qui vous convient. PACKAGE_NAMEest le nom du package de l'application.

EDIT : il n'est pas nécessaire de tuer une application. Vous pouvez envisager de refuser à l'application la permission de dessiner sur d'autres applications. Utilisez cette commande:

adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny'   # replace PACKAGE with package name of the app

Pour annuler les modifications, remplacez deny par allow dans ladite commande et exécutez-la.

Si vous utilisez Android Marshmallow, cette réponse d'Andrew T. peut être utilisée.

Remarque: La commande susmentionnée a été testée avec succès sur Android 5.1.1 et 6.0.1 (versions CM). Il est également possible que la commande fonctionne sur Android 5.0.x mais je ne peux pas garantir . L'exécution de cette commande sur la version Android publiée avant Lollipop entraînerait un échec.

Étant donné que souvent la superposition est perceptible, elle disparaîtrait instantanément au moment où l'application à l'origine de sa suppression, par conséquent, vous sauriez quelle application était à l'origine de cette superposition.

Applications pour applications

Initialement suggéré par Izzy, vous pouvez utiliser une application qui a la fonctionnalité de répertorier les autorisations accordées aux applications installées, pour distinguer les applications qui ont l'autorisation de "dessiner sur d'autres applications". Vous pouvez soit rechercher une telle application par vous-même, soit utiliser la liste Permission checker maintenue par Izzy sur son site Web.

Vous auriez également besoin d'un gestionnaire de processus / application pour forcer / arrêter certains processus. Je recommande OS Monitor mais vous êtes libre d'utiliser n'importe quelle application compétente. Voir les applications associées sous Infos système .

Pour démonstration seulement

J'ai essayé Advanced Permission Manager pour répertorier les applications avec l'autorisation de "dessiner sur d'autres applications". Ensuite, je suis passé à OS Monitor pour voir les applications s'exécuter en premier plan et en arrière-plan. J'ai fait correspondre la sortie des deux applications et arrêté individuellement les applications communes aux deux. Vous pouvez tuer un processus depuis l'intérieur du moniteur du système d'exploitation, donc pas besoin de passer aux paramètres de l'application.

(Cliquez sur l'image pour agrandir)

IMG: IMG: IMG:

Seigneur du feu
la source
1
Merci beaucoup Firelord. J'ai beaucoup appris avec votre message!
andreroggeri
1
Merci, la liste des fenêtres m'a sauvé la vie lorsque j'essayais de trouver une application de logiciel publicitaire qui semblait pouvoir tout recouvrir ... sans avoir l'autorisation "dessiner d'autres applications".
Craig Ringer
3

Si vous utilisez Android 6.0 Marshmallow, vous pouvez utiliser son gestionnaire d'autorisations natif.

D' un article sur BGR ,

Android 6.0 Marshmallow a beaucoup de nouvelles fonctionnalités très attendues et l'une d'elles est quelque chose que les utilisateurs d'iPhone ont depuis des années: les autorisations d'application granulaires. Phone Arena a installé la dernière version pour développeur de Marshmallow et a publié d'excellents conseils pour aider les utilisateurs d'Android à s'assurer qu'ils ne partagent que des données avec des applications qu'ils souhaitent spécifiquement partager.

Pour accéder à la fonction de gestion des autorisations de Marshmallow, vous voudrez ouvrir votre menu Paramètres, puis cliquer sur la section Applications. À partir de là, cliquez sur l'icône Gear qui vous donnera alors la possibilité d'accéder au gestionnaire des autorisations des applications.

Pour répertorier les applications qui peuvent dessiner sur d'autres applications, accédez à Paramètres - Applications - Avancé (menu avec icône d'engrenage) - Dessinez sur d'autres applications .

Vous pouvez également activer / désactiver temporairement la fonctionnalité en appuyant sur l'application et basculer le "Autoriser le dessin sur d'autres applications".

Gestionnaire d'autorisations Android M

Image reproduite avec l'aimable autorisation de Sebastiano Gottardo sur Medium

Andrew T.
la source
1
Pour moi, le niveau avancé (menu avec l'icône d'engrenage) manquait, mais à la place, il se trouve sur l'icône dotdotdot en haut / à droite; configurations d'application.
AnneTheAgile
3

Merci beaucoup @Firelord! J'ai enfin trouvé l'application qui m'empêche d'installer des apk et d'effectuer des sauvegardes adb.

Pour moi, j'ai trouvé que c'était une application appelée Battery MixLire pour voir ce que j'ai fait et comment je l'ai fait.

https://play.google.com/store/apps/details?id=jp.smapho.battery_mix

Beaucoup de gens ont eu des problèmes avec l'installation d'apk et n'ont pas pu appuyer sur 'Installer'. Toutes les réponses que j'ai pu trouver étaient principalement destinées à afficher des applications de gradation, de teinture et d'économie d'énergie. Comme je n'en ai pas utilisé ou que j'ai supprimé toutes les applications similaires, j'ai eu du mal à trouver ce qui se passait et quelle application était la coupable. Et enfin! Après une commande simple et une recherche rapide, il a été résolu: D

L'application incriminée Battery Mixest une simple application de surveillance de la batterie qui avait la fonction que j'utilisais pour afficher une fine ligne en haut de l'écran pour montrer l'état du niveau de la batterie (une excellente petite application).

Donc, pour diagnostiquer, j'ai utilisé une commande de Firelord(ci-dessus) pour vider un fichier texte, puis pour rechercher l'application qui provoquait le système Android pour m'empêcher de cliquer sur ce bouton Installer.

Exécuter la commande à partir du PC

adb shell dumpsys window windows > dumpsys-windows.txt

Rechercher

SYSTEM_ALERT_WINDOW

Pour trouver toutes les applications incriminées, j'ai recherché la chaîne ci-dessus

Ce qui m'a donné la ligne:

mOwnerUid=10129 mShowToOwnerOnly=true package=jp.smapho.battery_mix appop=SYSTEM_ALERT_WINDOW

(Voir téléchargement d'image pour la section du fichier texte) entrez la description de l'image ici

immédiatement, je pouvais reconnaître à quelle application il faisait référence: jp.smapho. battery_mix

Alors maintenant, je sais tuer cette application chaque fois que je prévois de charger latéralement ou avant les sauvegardes adb.

mitchbw
la source
-1

Pour Android Marshmallow et Oxygen 3.0.2, Désactivation de la disposition de l'écran contextuelle

Accédez à Applications et configurez les applications et sélectionnez Dessiner sur d'autres applications.

Allez et sélectionnez l'application pour la désactiver afin que l'application soit débloquée de la mise en page de l'écran persmission. et l'application peut obtenir directement des autorisations

Accédez à l'application et aux autorisations respectives et activez les autorisations que vous souhaitez.

Prendre plaisir

Raj

DILLIRAJ PD
la source
2
Toutes ces informations figurent déjà dans la réponse d'Andrew T. Vous n'avez pas besoin de poster une nouvelle réponse pour répéter les mêmes instructions. Économisez vos efforts pour les questions qui ne sont pas encore répondues :-)
Dan Hulme