Determinare quale app sta disegnando su altre app?


21

C'è un modo per determinare quale applicazione sta attingendo ad altre applicazioni?

Ad esempio, l'app Facebook Messenger può disegnare le bolle di chat sopra ogni cosa, ma come faccio a sapere quale app sta facendo questo?

Il mio problema:

Ho un'app che sta disegnando annunci sopra ogni cosa e voglio sapere quale app sta facendo questo. Non solo per disinstallarlo, ma per avvisare tutti coloro che usano questa app. (Non ho installato alcuna applicazione di recente e ho già verificato gli aggiornamenti recenti.)

Ho provato a utilizzare Dump View Hierarchy per UI Automator da Android Studio, ma sembra che le applicazioni che disegnano in alto non possano essere selezionate in questo modo.

(Clicca sull'immagine per ingrandire)

Schermo di Android Studio


Solo per aggiungere ai problemi indicati nelle risposte di seguito (per provare a mantenerlo completo). In TouchWiz (Samsung Galaxy, il mio è Note 4) la disattivazione del pannello dei tasti laterali ha risolto questo problema per me.
0xc0de,

Per i non sviluppatori, controlla qui un elenco di app: android.stackexchange.com/questions/154274/…
Jonathan

Risposte:


24

Nota:

  • dovrebbe già essere configurato su PC.
  • Per Android precedenti alla versione 4.4.x, potrebbe essere necessario l'accesso root.
  • Alcuni comandi non funzionerebbero su Android precedenti alla versione 5.1.
  • Vai alla voce " App per app " se non hai familiarità o ti senti a disagio con la riga di comando e / o la riga di comando non riesce a risolvere il problema.

Modifica: taglia l'inseguimento nella soluzione precedente e segui solo questa sezione modificata.

Installa ed esegui questo comando:

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

Otterresti l'output di tutti gli overlay attivi sullo schermo. Esempio di output con DU Screen Recorder, Tasker e AZ Screen Recorder che mostra sovrapposizioni attive sullo schermo:

bash-4.3 # adb shell "finestre della finestra di 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 = pacchetto vero = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW

Il testo evidenziato accanto a package = e prima di appop è il nome del pacchetto (s) dell'app (s) che attualmente disegna la sovrapposizione sullo schermo. Nel tuo caso, l'output incluso il nome del pacchetto sarebbe diverso.

Annotare i nomi dei pacchetti (d'ora in poi PKG) ed eseguire questo comando:

adb shell am force-stop PKG

Sostituire PKG con il nome del pacchetto annotato. Se avevi più nomi di pacchetto, ripeti il ​​comando con un nome di pacchetto alla volta.

Il comando arresterebbe forzatamente l'app e quindi eliminerebbe l'overlay. Questo dovrebbe funzionare. In alternativa puoi rimuovere l'autorizzazione di "Disegna su altre app" (sovrapposizione dello schermo in breve) dalle app usando questo comando:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Ancora una volta, sostituire PKG con il nome del pacchetto, se necessario. Inoltre, potrebbe essere necessario ripetere il comando di arresto forzato per il PKG. Se si decide di annullare le modifiche, sostituire ignora con consenti nel comando sopra indicato.

In alternativa, è possibile utilizzare Ops app per gestire le autorizzazioni dalla GUI.

Per sapere quale nome del pacchetto corrisponde a quale app è possibile provare un'app open source come Informazioni applicazioni . Cerca per nome del pacchetto e otterrai il nome dell'app.

Modifica terminata

Hai davvero bisogno di non leggere più ora . Lascio intatta la soluzione precedente (ovvero la sezione seguente) perché 21 persone che l'hanno votata l'hanno trovata utile e non voglio più sbagliare.


Un modo semplice sarebbe quello di scoprire tutte le app che hanno il permesso "disegna su altre app" e quindi individuarle da quelle attualmente attive sullo schermo. Successivamente, impegnarsi a fermare forzatamente quelle app comuni fino a quando non si individua l'app responsabile della sovrapposizione attiva.

Enumera le app che dispongono dell'autorizzazione per l'overlay

L'autorizzazione richiesta da un'app per creare un overlay è android.permission.SYSTEM_ALERT_WINDOW(disegna su altre app).

Dobbiamo scoprire tutte le app installate che dispongono di tale autorizzazione. Sta a te scoprire un metodo per questo. La mia risposta qui può aiutarti.

Tieni presente che abbiamo bisogno dei nomi dei pacchetti delle app e non delle loro etichette.

Cherry-pick da windows attivo

Esegui il comando

adb shell dumpsys window windows 

Questo ti darebbe dettagli su qualunque cosa causi la visualizzazione di qualcosa sullo schermo, incluso il nome del componente di un'app che la causa.

Come estrarre il nome dipende da te. Puoi provare questo comando comunque

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

Se ricevi l'errore: 'grep' non viene riconosciuto come comando interno o esterno , su Windows prova questo comando alternativo:

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

Uscita demo

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

Nell'output sopra, tutto ciò che ha successo u0 e precedente /è il nome del pacchetto di un'app. Un'app può avere più componenti che visualizzano qualcosa sullo schermo.

Devi creare un elenco di quei nomi di pacchetti. Se hai BusyBox installato , puoi farlo

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

Ad ogni modo, ora avresti due elenchi:

  • Il primo elenco contiene tutte le app che dispongono dell'autorizzazione android.permission.SYSTEM_ALERT_WINDOW.
  • Il secondo elenco contiene tutte le app che mostrano attivamente qualcosa sullo schermo.

Confronta questi due elenchi e le singole app che sono comuni in entrambi gli elenchi. Questo terzo elenco sarebbe costituito da app che dispongono dell'autorizzazione per disegnare una sovrapposizione e stanno attualmente disegnando una sovrapposizione attiva sullo schermo.

Tempo di uccidere

Uccidi ciascuna delle app della terza lista una per una e osserva lo stato della sovrapposizione. Puoi usare am force-stop PACKAGE_NAME --user 0o qualsiasi altro metodo adatto a te. PACKAGE_NAMEè il nome del pacchetto dell'app.

EDIT : non è necessario uccidere un'app. Puoi considerare di negare all'app l'autorizzazione a disegnare su altre app. Usa questo comando:

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

Per ripristinare le modifiche, sostituire deny con allow nel comando indicato ed eseguirlo.

Se utilizzi Android Marshmallow, puoi utilizzare questa risposta di Andrew T.

Nota: il suddetto comando è stato testato con successo su Android 5.1.1 e 6.0.1 (build CM). È anche possibile che il comando funzioni su Android 5.0.x ma non posso garantirlo . L'esecuzione di quel comando sulla versione di Android rilasciata prima di Lollipop causerebbe un errore.

Poiché spesso l'overlay è percepibile, scomparirebbe immediatamente nel momento in cui l'app che lo causa viene ucciso, quindi sapresti quale app sta causando quell'overlay.

App per app

Inizialmente suggerito da Izzy, è possibile utilizzare un'app che ha la funzionalità di elencare le autorizzazioni concesse alle app installate, per individuare le app con l'autorizzazione "disegna su altre app". Puoi cercare tale app da solo o utilizzare l'elenco Controllo autorizzazioni gestito da Izzy sul suo sito Web.

Avresti anche bisogno di un manager processo / app per forzare l'arresto / l'arresto di alcuni processi. Consiglio OS Monitor ma sei libero di usare qualsiasi app competente. Vedi le app correlate in Informazioni di sistema .

Solo a scopo dimostrativo

Ho provato Advanced Permission Manager per elencare le app con il permesso di "disegnare su altre app". Successivamente, sono passato a OS Monitor per vedere le app in esecuzione in primo piano e in background. Ho abbinato l'output di entrambe le app e ho forzato individualmente le app comuni in entrambe. È possibile interrompere un processo dall'interno del monitor del sistema operativo, quindi non è necessario passare alle impostazioni dell'app.

(Clicca sull'immagine per ingrandire)

IMG: IMG: IMG:


1
Grazie mille Firelord. Ho imparato molto con il tuo post!
andreroggeri,

1
Grazie, l'elenco delle finestre è stato un vero toccasana quando stavo cercando di trovare un'app adware che sembrava essere in grado di disegnare su tutto ... senza avere il permesso di "disegnare altre altre app".
Craig Ringer,

3

Se stai utilizzando Android 6.0 Marshmallow, puoi utilizzare il suo gestore delle autorizzazioni nativo.

Da un articolo su BGR ,

Android 6.0 Marshmallow ha molte nuove funzionalità molto attese e una di queste è qualcosa che gli utenti di iPhone hanno da anni: autorizzazioni granulari per le app. Phone Arena ha installato l'ultima anteprima per sviluppatori di Marshmallow e ha pubblicato alcuni suggerimenti formidabili per aiutare gli utenti Android a garantire che condividano solo i dati con le app che desiderano condividere.

Per accedere alla funzione di gestione delle autorizzazioni di Marshmallow, ti consigliamo di aprire il menu Impostazioni e quindi fare clic sulla sezione App. Da lì, fai clic sull'icona a forma di ingranaggio che ti darà quindi la possibilità di andare a Gestione autorizzazioni app.

Per elencare le app che possono disegnare su altre app, vai su Impostazioni - App - Avanzate (menu con l'icona a forma di ingranaggio) - Disegna su altre app .

Puoi anche abilitare / disabilitare la funzione temporaneamente toccando l'app e attiva "Consenti disegno sopra altre app".

Gestione autorizzazioni Android M.

Immagine gentilmente concessa da Sebastiano Gottardo su Medium


1
Per me mancava l'Avanzato (menu con l'icona a forma di ingranaggio), ma invece è nell'icona dotdotdot in alto / a destra, quindi; configurazioni dell'app.
AnneTheAgile,

3

Grazie mille @Firelord! Ho finalmente trovato l'app che mi ha impedito di installare apk ed eseguire backup adb.

Per me ho scoperto che era un'app chiamata Battery MixLeggi per vedere cosa ho fatto e come l'ho fatto.

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

Molte persone hanno avuto problemi con l'installazione di apk e non sono stati in grado di premere 'Installa'. Tutte le risposte che ho potuto trovare erano principalmente rivolte a visualizzare app di oscuramento, colorazione e risparmio energetico. Dato che non ne avevo usato nessuno o avevo rimosso tutte le app simili, stavo faticando a trovare quello che stava succedendo e quale app era il colpevole. E infine! Dopo un semplice comando e una rapida ricerca, è stato risolto: D

L'app offensiva Battery Mixè una semplice app di monitoraggio della batteria che aveva la funzione che avevo usato per visualizzare una linea sottile nella parte superiore dello schermo per mostrare lo stato del livello della batteria (una piccola app fantastica).

Quindi, per diagnosticare, ho usato un comando Firelord(sopra) per scaricare un file di testo e quindi cercare l'app che stava causando il sistema Android per impedirmi di fare clic sul pulsante Installa.

Eseguire il comando dal PC

adb shell dumpsys window windows > dumpsys-windows.txt

Cercare

SYSTEM_ALERT_WINDOW

Per trovare eventuali applicazioni offensive ho cercato la stringa sopra

Che mi ha dato la linea:

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

(Vedi caricamento dell'immagine per la sezione del file di testo) inserisci qui la descrizione dell'immagine

immediatamente ho potuto riconoscere a quale app si riferiva: jp.smapho. battery_mix

Quindi ora so di uccidere quell'app ogni volta che ho intenzione di caricare o eseguire backup adb.


-1

Per Android Marshmallow e Oxygen 3.0.2, Disattivazione del popup Layout schermo

Vai su App e configura App e seleziona Disegna su altre app.

Vai e seleziona l'app per disabilitarla in modo che l'app sia sbloccata dalla persecuzione del layout dello schermo. e l'app può ottenere direttamente le autorizzazioni

Vai alla rispettiva app e Autorizzazioni e abilita le autorizzazioni che desideri.

Godere

Raj


2
Tutte queste informazioni sono già nella risposta di Andrew T. Non è necessario pubblicare una nuova risposta per ripetere le stesse istruzioni. Risparmia il tuo impegno per le domande a cui non è stata ancora data risposta :-)
Dan Hulme,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.