¿Determinar qué aplicación se basa en otras aplicaciones?

21

¿Hay alguna manera de determinar qué aplicación se basa en otras aplicaciones?

Por ejemplo, la aplicación Facebook Messenger puede dibujar las burbujas de chat sobre todo, pero ¿cómo sé qué aplicación está haciendo esto?

Mi problema:

Tengo una aplicación que dibuja anuncios encima de todo y quiero saber qué aplicación está haciendo esto. No solo para desinstalarlo, sino para advertir a todos los que usan esta aplicación. (No instalé ninguna aplicación recientemente y ya verifiqué las actualizaciones recientes).

Intenté usar la Jerarquía de vista de volcado para UI Automator de Android Studio, pero parece que las aplicaciones que dibujan en la parte superior no se pueden seleccionar de esta manera.

(Haga clic en la imagen para ampliarla)

Android Studio Screen

andreroggeri
fuente
Solo para agregar a los problemas anotados en las respuestas a continuación (para tratar de mantenerlo completo). En TouchWiz (Samsung Galaxy, el mío es la Nota 4), apagar el panel de teclas laterales resolvió este problema para mí.
0xc0de
Para los que no son desarrolladores, simplemente consulte aquí para obtener una lista de aplicaciones: android.stackexchange.com/questions/154274/…
Jonathan

Respuestas:

24

Nota:

  • ya debería estar configurado en la PC.
  • Para Android anterior a la versión 4.4.x, es posible que se requiera acceso de root.
  • Algunos comandos no funcionarían en Android antes de la versión 5.1.
  • Vaya al encabezado " Aplicaciones para aplicaciones " si no está familiarizado o no se siente cómodo con la línea de comandos y / o la línea de comandos no resuelve su problema.

Editar: corte la persecución en la solución anterior y siga solo esta sección editada.

Configura y ejecuta este comando:

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

Obtendrá la salida de todas las superposiciones activas en la pantalla. Ejemplo de una salida con DU Screen Recorder, Tasker y AZ Screen Recorder mostrando superposiciones activas en pantalla:

bash-4.3 # adb shell "ventanas de la ventana dumpsys | toybox grep -i system_alert_window"
    mOwnerUid = 10087 mShowToOwnerOnly = paquete verdadero = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = paquete verdadero = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = paquete verdadero = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = paquete verdadero = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10638 mShowToOwnerOnly = paquete verdadero = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW

El texto resaltado junto a package = y antes de appop es el nombre (s) del paquete de las aplicaciones que actualmente se superponen en la pantalla. En su caso, la salida que incluye los nombres del paquete sería diferente.

Anote los nombres del paquete (en adelante PKG) y ejecute este comando:

adb shell am force-stop PKG

Reemplace PKG con el nombre del paquete que anotó. Si tenía varios nombres de paquetes, repita el comando con un nombre de paquete a la vez.

El comando detendría forzosamente la aplicación y, por lo tanto, descartaría la superposición. Esto debería funcionar. Alternativamente, puede quitar el permiso de "Dibujar sobre otras aplicaciones" (superposición de pantalla en resumen) de las aplicaciones usando este comando:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Nuevamente, reemplace PKG con el nombre del paquete según sea necesario. Además, es posible que deba repetir el comando force-stop para el PKG. Si decide revertir los cambios, reemplace ignorar con permitir en el comando mencionado anteriormente.

Alternativamente, puede usar App Ops para administrar los permisos de la GUI.

Para saber qué nombre de paquete corresponde a qué aplicación puede probar una aplicación de código abierto como Información de aplicaciones . Busque por nombre de paquete y obtendrá el nombre de la aplicación.

Editar terminado

Realmente no necesitas leer más ahora . Dejo intacta la solución anterior (es decir, la siguiente sección) porque 21 personas que la votaron encontraron útil y no quiero volver a equivocarme.


Una manera simple sería encontrar todas las aplicaciones que tienen el permiso "dibujar sobre otras aplicaciones" y luego seleccionarlas de las que están actualmente activas en la pantalla. Luego, realice la detención forzada de esas aplicaciones comunes hasta que identifique la aplicación responsable de la superposición activa.

Enumerar las aplicaciones que tienen permiso para superponer

El permiso requerido por una aplicación para crear una superposición es android.permission.SYSTEM_ALERT_WINDOW(dibujar sobre otras aplicaciones).

Necesitamos encontrar todas las aplicaciones instaladas que tienen dicho permiso. Depende de usted encontrar un método para esto. Mi respuesta aquí puede ayudarte.

Tenga en cuenta que necesitamos los nombres de los paquetes de las aplicaciones y no sus etiquetas.

Recoger cerezas de ventanas activas

Ejecutar el comando

adb shell dumpsys window windows 

Esto le daría detalles sobre cualquier causa que muestre algo en la pantalla, incluido el nombre del componente de una aplicación que lo causa.

La forma de extraer el nombre depende de usted. Sin embargo, puedes probar este comando

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

Si recibe el error: 'grep' no se reconoce como un comando interno o externo , en Windows pruebe este comando alternativo:

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

Salida de demostración

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

En el resultado anterior, todo lo que sucede u0 y precede /es el nombre del paquete de una aplicación. Una aplicación puede tener múltiples componentes que muestran algo en la pantalla.

Tienes que crear una lista de esos nombres de paquetes. Si tiene instalado BusyBox , puede hacer

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

De todos modos, ahora tendrías dos listas:

  • La primera lista contiene todas las aplicaciones que tienen el permiso android.permission.SYSTEM_ALERT_WINDOW.
  • La segunda lista contiene todas las aplicaciones que muestran activamente algo en la pantalla.

Compare estas dos listas y aplicaciones individuales que son comunes en ambas listas. Esta tercera lista constituiría aplicaciones que tienen permiso para dibujar superposiciones y actualmente están dibujando una superposición activa en la pantalla.

Hora de matar

Elimine cada una de las aplicaciones de la tercera lista una por una y observe el estado de la superposición. Puede usar am force-stop PACKAGE_NAME --user 0o cualquier otro método que le convenga. PACKAGE_NAMEes el nombre del paquete de la aplicación.

EDITAR : no es necesario matar una aplicación. Puede considerar negarle a la aplicación el permiso para dibujar sobre otras aplicaciones. Usa este comando:

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

Para revertir los cambios, reemplace negar con permitir en dicho comando y ejecútelo.

Si está ejecutando Android Marshmallow, se puede usar esta respuesta de Andrew T.

Nota: El comando mencionado anteriormente se prueba con éxito en Android 5.1.1 y 6.0.1 (compilaciones CM). También es posible que el comando funcione en Android 5.0.x, pero no puedo garantizarlo . La ejecución de ese comando en la versión de Android lanzada antes de Lollipop causaría un error.

Dado que a menudo la superposición es perceptible, desaparecería instantáneamente en el momento en que la aplicación que la causa se elimine, por lo tanto, sabría qué aplicación estaba causando esa superposición.

Aplicaciones para aplicaciones

Originalmente sugerido por Izzy, puede usar una aplicación que tiene la funcionalidad de enumerar permisos otorgados a aplicaciones instaladas, para destacar las aplicaciones que tienen el permiso "dibujar sobre otras aplicaciones". Puede buscar dicha aplicación por su cuenta o utilizar la lista de verificadores de permisos mantenida por Izzy en su sitio web.

También necesitaría un administrador de procesos / aplicaciones para forzar-detener / eliminar algunos procesos. Recomiendo OS Monitor, pero tiene la libertad de usar cualquier aplicación competente. Ver aplicaciones relacionadas en Información del sistema .

Solo con fines de demostración

Intenté Advanced Permission Manager para enumerar aplicaciones con permiso para "dibujar sobre otras aplicaciones". Luego, cambié a OS Monitor para ver las aplicaciones ejecutándose en primer plano y en segundo plano. Emparejé el resultado de ambas aplicaciones e individualmente forcé la detención de las aplicaciones comunes en ambas. Puede eliminar un proceso desde el interior del monitor del sistema operativo, por lo que no es necesario cambiar a la configuración de la aplicación.

(Haga clic en la imagen para ampliarla)

IMG: IMG: IMG:

Señor del fuego
fuente
1
Muchas gracias Señor del Fuego. ¡Aprendí mucho con tu publicación!
andreroggeri
1
Gracias, la lista de la ventana fue un salvavidas cuando estaba tratando de encontrar una aplicación de adware que parecía ser capaz de dibujar sobre todo ... sin tener el permiso de "dibujar otras aplicaciones".
Craig Ringer el
3

Si está usando Android 6.0 Marshmallow, puede usar su administrador de permisos nativo.

De un artículo sobre BGR ,

Android 6.0 Marshmallow tiene muchas características nuevas muy esperadas y una de ellas es algo que los usuarios de iPhone han tenido durante años: permisos de aplicaciones granulares. Phone Arena instaló la última vista previa para desarrolladores de Marshmallow y publicó algunos consejos fabulosos para ayudar a los usuarios de Android a asegurarse de que solo comparten datos con aplicaciones que específicamente desean compartir.

Para acceder a la función de administración de permisos de Marshmallow, querrás abrir tu menú de Configuración y luego hacer clic en la sección de Aplicaciones. Desde allí, haga clic en el ícono de engranaje que le dará la opción de ir al administrador de permisos de la aplicación.

Para enumerar las aplicaciones que pueden dibujar sobre otras aplicaciones, vaya a Configuración - Aplicaciones - Avanzado (menú con icono de engranaje) - Dibuje sobre otras aplicaciones .

También puede habilitar / deshabilitar la función temporalmente tocando la aplicación y alternando "Permitir dibujar sobre otras aplicaciones".

Administrador de permisos de Android M

Imagen cortesía de Sebastiano Gottardo en Medium

Andrew T.
fuente
1
Para mí, faltaba el Avanzado (menú con icono de engranaje), pero en su lugar está en el icono de dotdotdot superior / derecho, entonces; configuraciones de aplicaciones.
AnneTheAgile
3

Muchas gracias @Firelord! Finalmente encontré la aplicación que me impedía instalar apk y realizar copias de seguridad de adb.

Para mí, encontré que era una aplicación llamada Battery MixLeer para ver qué hice y cómo lo hice.

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

Muchas personas han tenido problemas con la instalación de apk y no han podido presionar 'Instalar'. Todas las respuestas que pude encontrar se debieron principalmente a mostrar aplicaciones de atenuación, tintado y ahorro de energía. Como no utilicé ninguna o eliminé todas las aplicaciones similares, tuve problemas para encontrar qué estaba pasando y qué aplicación era la culpable. ¡Y finalmente! Después de un simple comando y una búsqueda rápida, se ha resuelto: D

La aplicación ofensiva Battery Mixes una aplicación de monitoreo de batería simple que tenía la función que solía mostrar una línea delgada en la parte superior de la pantalla para mostrar el estado del nivel de la batería (una pequeña aplicación genial).

Entonces, para diagnosticar, utilicé un comando de Firelord(arriba) para volcar un archivo de texto y luego buscar la aplicación que estaba causando que el sistema Android me impidiera hacer clic en el botón Instalar.

Ejecutar comando desde PC

adb shell dumpsys window windows > dumpsys-windows.txt

Buscar

SYSTEM_ALERT_WINDOW

Para encontrar cualquier aplicación ofensiva, busqué la cadena anterior

Lo que me dio la línea:

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

(Ver carga de imágenes para la sección del archivo de texto) ingrese la descripción de la imagen aquí

inmediatamente pude reconocer a qué aplicación se refería: jp.smapho. batería_mezcla

Así que ahora sé matar esa aplicación cada vez que planeo hacer una carga lateral o realizar copias de seguridad de adb.

mitchbw
fuente
-1

Para Android Marshmallow y Oxygen 3.0.2, Deshabilitar la ventana emergente Diseño de pantalla

Vaya a Aplicaciones y configúrelas y seleccione Dibujar sobre otras aplicaciones.

Vaya y seleccione la aplicación para deshabilitarla para que la aplicación se desbloquee de la transmisión de diseño de pantalla. y la aplicación puede obtener permisos directamente

Vaya a la aplicación y los permisos respectivos y habilite los permisos que desee.

Disfrutar

Raj

DILLIRAJ PD
fuente
2
Toda esta información ya está en la respuesta de Andrew T. No necesita publicar una nueva respuesta para repetir las mismas instrucciones. Ahorre su esfuerzo para las preguntas que aún no se han respondido :-)
Dan Hulme