Bestimmen Sie, welche App auf anderen Apps basiert.

21

Gibt es eine Möglichkeit, festzustellen, welche Anwendung auf anderen Anwendungen basiert?

Beispielsweise kann die Facebook Messenger-App die Chat-Sprechblasen über alles zeichnen. Aber woher weiß ich, welche App dies tut?

Mein Problem:

Ich habe eine App, die Anzeigen über alles zeichnet, und ich möchte wissen, welche App dies tut. Nicht nur, um es zu deinstallieren, sondern um jeden zu warnen, der diese App nutzt. (Ich habe in letzter Zeit keine Anwendung installiert und die letzten Updates bereits überprüft.)

Ich habe versucht, die Dump View-Hierarchie für UI Automator aus Android Studio zu verwenden, aber es scheint, dass die Anwendungen, die oben zeichnen, nicht auf diese Weise ausgewählt werden können.

(Zum Vergrößern auf das Bild klicken)

Android Studio-Bildschirm

andreroggeri
quelle
Nur um die in den Antworten unten aufgeführten Probleme zu ergänzen (um zu versuchen, sie vollständig zu halten). In TouchWiz (Samsung Galaxy, meins ist Note 4) löste das Ausschalten des seitlichen Tastenfelds dieses Problem für mich.
0xc0de
Für Nicht-Entwickler finden Sie hier eine Liste der Apps: android.stackexchange.com/questions/154274/…
Jonathan

Antworten:

24

Hinweis:

  • sollte bereits im PC eingerichtet sein.
  • Für Android vor Version 4.4.x ist möglicherweise Root-Zugriff erforderlich.
  • Einige Befehle funktionieren unter Android nicht vor Version 5.1.
  • Wechseln Sie zur Überschrift " Apps für Apps ", wenn Sie mit der Befehlszeile nicht vertraut oder nicht vertraut sind und / oder die Befehlszeile Ihr Problem nicht lösen kann.

Bearbeiten: Schneiden Sie die Verfolgung in der früheren Lösung ab und folgen Sie nur diesem bearbeiteten Abschnitt.

Richten Sie und führen Sie den folgenden Befehl aus:

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

Sie erhalten die Ausgabe aller aktiven Overlays auf dem Bildschirm. Beispiel einer Ausgabe mit DU Screen Recorder, Tasker und AZ Screen Recorder, die aktive Overlays auf dem Bildschirm anzeigt:

bash-4.3 # adb shell "dumpsys fenster windows | 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

Der hervorgehobene Text neben package = und vor appop ist der / die Paketname (n) der App (s), die gerade eine Überlagerung auf dem Bildschirm zeichnen . In Ihrem Fall würde sich die Ausgabe einschließlich der Paketnamen unterscheiden.

Notieren Sie sich die Paketnamen (nachfolgend als PKG bezeichnet) und führen Sie den folgenden Befehl aus:

adb shell am force-stop PKG

Ersetzen Sie PKG durch den Paketnamen, den Sie notiert haben. Wenn Sie mehrere Paketnamen hatten, wiederholen Sie den Befehl mit jeweils einem Paketnamen.

Der Befehl würde die App gewaltsam stoppen und dadurch die Überlagerung verwerfen. Das sollte funktionieren. Alternativ können Sie den Apps die Berechtigung "Über andere Apps zeichnen" (kurz "Bildschirmüberlagerung") mit folgendem Befehl entziehen:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Ersetzen Sie PKG bei Bedarf durch den Paketnamen. Darüber hinaus müssen Sie möglicherweise den Force-Stop-Befehl für die PKG wiederholen. Wenn Sie die Änderungen rückgängig machen möchten, ersetzen Sie Ignorieren durch Zulassen im oben genannten Befehl.

Sie können alternativ App Ops verwenden , um die Berechtigungen über die GUI zu verwalten.

Um zu wissen, welcher Paketname zu welcher App gehört, können Sie eine Open-Source-App wie Applications Info ausprobieren . Suchen Sie nach dem Paketnamen und Sie erhalten den Namen der App.

Bearbeiten beendet

Sie brauchen jetzt wirklich nicht mehr zu lesen . Ich lasse die frühere Lösung (dh folgenden Abschnitt) intakt, da 21 Personen, die abgestimmt haben, dies als hilfreich empfanden und ich nicht mehr durcheinander bringen möchte.


Eine einfache Möglichkeit wäre, alle Apps mit der Berechtigung "Über andere Apps ziehen" herauszufinden und sie dann aus den derzeit auf dem Bildschirm aktiven herauszusuchen. Erzwingen Sie anschließend das Stoppen dieser gängigen Apps, bis Sie die für die aktive Überlagerung verantwortliche App ausgewählt haben.

Zählen Sie Apps auf, die die Berechtigung zum Overlay haben

Die Berechtigung, die eine App zum Erstellen eines Overlays benötigt, ist android.permission.SYSTEM_ALERT_WINDOW(über andere Apps ziehen).

Wir müssen alle installierten Apps mit dieser Berechtigung herausfinden. Es liegt an Ihnen, eine Methode dafür zu finden. Meine Antwort hier kann Ihnen helfen.

Beachten Sie, dass wir die Paketnamen der Apps und nicht deren Bezeichnungen benötigen .

Kirschpickel aus aktiven Fenstern

Führen Sie den Befehl aus

adb shell dumpsys window windows 

Auf diese Weise erhalten Sie Informationen darüber, was zur Anzeige auf dem Bildschirm geführt hat, einschließlich des Komponentennamens einer App, die dies verursacht.

Wie Sie den Namen extrahieren, liegt bei Ihnen. Sie können diesen Befehl jedoch versuchen

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

Wenn Sie den Fehler erhalten: 'grep' wird nicht als interner oder externer Befehl erkannt , versuchen Sie unter Windows diesen alternativen Befehl:

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

Demo-Ausgabe

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

In der obigen Ausgabe ist alles, was folgt u0 und vorangeht, /der Paketname einer App. Eine App kann mehrere Komponenten haben, die etwas auf dem Bildschirm anzeigen.

Sie müssen eine Liste dieser Paketnamen erstellen. Wenn Sie BusyBox installiert haben , können Sie dies tun

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

Jedenfalls hätten Sie jetzt zwei Listen:

  • Die erste Liste enthält alle Apps, die über die Berechtigung verfügen android.permission.SYSTEM_ALERT_WINDOW.
  • Die zweite Liste enthält alle Apps, die aktiv etwas auf dem Bildschirm anzeigen.

Vergleichen Sie diese beiden Listen und wählen Sie die Apps aus, die in beiden Listen enthalten sind. Diese dritte Liste enthält Apps, die zum Zeichnen von Overlays berechtigt sind und derzeit ein aktives Overlay auf dem Bildschirm zeichnen.

Zeit zu töten

Beenden Sie jede der Apps aus der dritten Liste nacheinander und stellen Sie den Status der Überlagerung fest. Sie können am force-stop PACKAGE_NAME --user 0jede andere Methode verwenden, die zu Ihnen passt. PACKAGE_NAMEist der Paketname der App.

EDIT : Es ist nicht notwendig, eine App zu töten. Sie können erwägen, der App die Berechtigung zum Ziehen über andere Apps zu verweigern. Verwenden Sie diesen Befehl:

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

Um die Änderungen rückgängig zu machen, ersetzen Sie den Befehl deny durch allow und führen Sie ihn aus.

Wenn Sie Android Marshmallow verwenden, kann diese Antwort von Andrew T. verwendet werden.

Hinweis: Der oben genannte Befehl wurde erfolgreich auf Android 5.1.1 und 6.0.1 (CM-Builds) getestet. Es ist auch möglich, dass der Befehl auf Android 5.0.x funktioniert, aber ich kann nicht garantieren . Die Ausführung dieses Befehls in einer Android-Version, die vor Lollipop veröffentlicht wurde, würde einen Fehler verursachen.

Da die Überlagerung häufig wahrnehmbar ist, verschwindet sie sofort, sobald die App, die sie verursacht hat, beendet wird. Daher wissen Sie, welche App diese Überlagerung verursacht hat.

Apps für Apps

Ursprünglich von Izzy vorgeschlagen, können Sie eine App verwenden, die über die Funktionalität verfügt, Berechtigungen für installierte Apps aufzulisten, um die Apps mit der Berechtigung "Über andere Apps ziehen" herauszugreifen. Sie können eine solche App entweder selbst suchen oder die von Izzy auf seiner Website gepflegte Liste Permission checker verwenden .

Sie benötigen außerdem einen Prozess- / App-Manager, um bestimmte Prozesse anzuhalten / abzubrechen. Ich empfehle OS Monitor, aber es steht Ihnen frei, eine kompetente App zu verwenden. Siehe verwandte Apps unter System Info .

Nur zu Demonstrationszwecken

Ich habe Advanced Permission Manager versucht , Apps mit der Berechtigung zum "Ziehen über andere Apps" aufzulisten. Danach wechselte ich zu OS Monitor, um die Apps im Vordergrund und im Hintergrund zu sehen. Ich habe die Ausgabe von beiden Apps abgeglichen und die Apps, die in beiden Apps gemeinsam sind, einzeln gestoppt. Sie können einen Prozess über den OS-Monitor beenden, sodass Sie nicht zu den App-Einstellungen wechseln müssen.

(Zum Vergrößern auf das Bild klicken)

IMG: IMG: IMG:

Feuerlord
quelle
1
Vielen Dank Firelord. Ich habe viel mit deinem Beitrag gelernt!
Andreroggeri
1
Danke, die Fensterliste war ein Lebensretter, als ich versuchte, eine Adware-App zu finden, die anscheinend in der Lage ist, alles zu zeichnen ... ohne die Berechtigung "Andere Apps zeichnen".
Craig Ringer
3

Wenn Sie Android 6.0 Marshmallow verwenden, können Sie dessen nativen Berechtigungsmanager verwenden.

Aus einem Artikel über die BGR ,

Android 6.0 Marshmallow verfügt über viele mit Spannung erwartete neue Funktionen. Eine davon haben iPhone-Nutzer seit Jahren: Granular-App-Berechtigungen. Phone Arena hat die neueste Entwicklervorschau von Marshmallow installiert und einige großartige Tipps veröffentlicht, mit denen Android-Benutzer sicherstellen können, dass sie nur Daten mit Apps teilen, die sie speziell teilen möchten.

Um auf die Berechtigungsverwaltungsfunktion von Marshmallow zuzugreifen, müssen Sie das Menü Einstellungen öffnen und dann auf den Abschnitt Apps klicken. Klicken Sie dort auf das Zahnradsymbol, um zum App-Berechtigungs-Manager zu gelangen.

Um die Apps aufzulisten, die über andere Apps zeichnen können, gehen Sie zu Einstellungen - Apps - Erweitert (Menü mit Zahnradsymbol) - Über andere Apps zeichnen .

Sie können die Funktion auch vorübergehend aktivieren / deaktivieren, indem Sie auf die App tippen und die Option "Zeichnen über andere Apps zulassen" aktivieren / deaktivieren.

Android M Berechtigungsmanager

Mit freundlicher Genehmigung von Sebastiano Gottardo auf Medium

Andrew T.
quelle
1
Für mich fehlte das Advanced-Menü (Menü mit Zahnradsymbol), aber stattdessen befindet es sich dann oben rechts auf dem Punkt-Punkt-Symbol. App-Konfigurationen.
AnneTheAgile
3

Vielen Dank an @Firelord! Ich habe endlich die App gefunden, die mich daran gehindert hat, apks zu installieren und adb-Backups durchzuführen.

Für mich war es eine App namens Battery MixRead on, um zu sehen, was ich tat und wie ich es tat.

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

Viele Leute hatten Probleme mit der Installation von apk's und konnten nicht auf "Installieren" klicken. Alle Antworten, die ich finden konnte, betrafen hauptsächlich das Anzeigen von abblendenden, getönten und stromsparenden Apps. Da ich keine oder alle ähnlichen Apps verwendet hatte, hatte ich Schwierigkeiten herauszufinden, was los war und welche App der Schuldige war. Und schlussendlich! Nach einem einfachen Befehl und einer schnellen Suche wurde es gelöst: D

Die anstößige App Battery Mixist eine einfache Batterieüberwachungs-App, mit der ich oben auf dem Bildschirm eine dünne Linie angezeigt habe, um den Ladezustand der Batterie anzuzeigen (eine großartige kleine App).

Zur Diagnose habe ich einen Befehl von Firelord(oben) verwendet, um eine Textdatei zu sichern und dann nach der App zu suchen, die das Android-System veranlasste, mich daran zu hindern, auf diese Schaltfläche "Installieren" zu klicken.

Befehl vom PC ausführen

adb shell dumpsys window windows > dumpsys-windows.txt

Suchen nach

SYSTEM_ALERT_WINDOW

Um problematische Anwendungen zu finden, habe ich nach der obigen Zeichenfolge gesucht

Welches gab mir die Zeile:

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

(Siehe Bild-Upload für den Abschnitt der Textdatei) Bildbeschreibung hier eingeben

sofort konnte ich erkennen, auf welche app es sich bezog: jp.smapho. battery_mix

Jetzt weiß ich, dass ich diese App beenden muss, wenn ich vorhabe, sie von der Seite zu laden oder vor ADB-Sicherungen.

mitchbw
quelle
-1

Deaktivieren Sie für Android Marshmallow und Oxygen 3.0.2 das Popup "Bildschirmlayout"

Gehen Sie zu Apps und konfigurieren Sie Apps und wählen Sie Über andere Apps zeichnen.

Wählen Sie die App aus, um sie zu deaktivieren und die Blockierung der App für die Bildschirmlayout-Speicherung aufzuheben. und die App kann direkt Berechtigungen erhalten

Rufen Sie die entsprechende App und Berechtigungen auf und aktivieren Sie die gewünschten Berechtigungen.

Genießen

Raj

DILLIRAJ PD
quelle
2
All diese Informationen sind bereits in der Antwort von Andrew T enthalten. Sie müssen keine neue Antwort eingeben, um dieselben Anweisungen zu wiederholen. Sparen Sie Ihren Aufwand für Fragen, die noch nicht beantwortet wurden :-)
Dan Hulme