Saltar al contenido

Android: determinar qué aplicación se basa en otras aplicaciones.

Basta ya de investigar por todo internet porque has llegado al espacio justo, tenemos la solución que quieres sin liarte.

Solución:

Nota:

  • adb 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.
  • Ir al título “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.

Configure adb y ejecute este comando:

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

Obtendría la salida de todos los superposiciones activas en la pantalla. Ejemplo de una salida con DU Screen Recorder, Tasker y AZ Screen Recorder que muestra superposiciones activas en la pantalla:

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

El texto resaltado junto a paquete = y antes appop es el (los) nombre (s) del paquete de la (s) aplicación (es) superposición de dibujo actualmente en la pantalla. En su caso, la salida que incluye el nombre del paquete será diferente.

Anote el (los) nombre (s) del paquete (en adelante PKG) y ejecute este comando:

adb shell am force-stop PKG

Reemplazar 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 de detención forzada para el PKG. Si decide revertir los cambios, reemplace ignorar con permitir en dicho comando.

Alternativamente, puede usar App Ops para administrar los permisos desde 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.

Edición finalizada

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


Una forma sencilla sería averiguar todas las aplicaciones que tienen el permiso “dibujar sobre otras aplicaciones” y luego distinguirlas de las que están actualmente activas en la pantalla. Luego, participe en 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 superponerse

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

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

Nota que necesitamos los nombres de los paquetes de las aplicaciones y no sus etiquetas.

Selección selectiva de ventanas activas

Ejecuta el comando

adb shell dumpsys window windows 

Esto le brindaría detalles sobre cualquier causa que haya causado que se 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, puede 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

Window #4 Window42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity:
Window #5 Window42197468 u0 ginlemon.flowerpro/ginlemon.flower.HomeScreen:
Window #6 Window420fdb58 u0 com.android.systemui.ImageWallpaper:
Window #7 Window421e3b88 u0 com.android.contacts/com.android.contacts.activities.DialtactsActivity:

En la salida anterior, cualquier cosa que tenga éxito u0 y precedente / es el nombre del paquete de una aplicación. Una aplicación puede tener varios componentes que muestren algo en la pantalla.

Tienes que crear una lista de esos nombres de paquetes. Si tiene BusyBox instalado, 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 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 señale las aplicaciones que son comunes en ambas listas. Esta tercera lista estaría constituida por aplicaciones que tienen permiso para dibujar superposición 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 superposición. Puedes usar am force-stop PACKAGE_NAME --user 0 o cualquier otro método que le convenga. PACKAGE_NAME es 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. Utilice 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 ejecutarlo.

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

Nota: El comando mencionado anteriormente se probó 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 fallas.

Dado que a menudo la superposición es perceptible, desaparecería instantáneamente en el momento en que se elimine la aplicación que la causa, 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 los permisos otorgados a las aplicaciones instaladas, para destacar las aplicaciones que tienen el permiso “dibujar sobre otras aplicaciones”. Puede buscar una aplicación de este tipo por su cuenta o utilizar la lista de verificación de permisos que mantiene Izzy en su sitio web.

También necesitaría un administrador de procesos / aplicaciones para forzar la detención / matar algunos procesos. Recomiendo OS Monitor pero tienes la libertad de usar cualquier aplicación competente. Consulte las aplicaciones relacionadas en Información del sistema.

Solo con fines de demostración

Probé Advanced Permission Manager para enumerar las 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. Coincidí con el resultado de ambas aplicaciones e individualmente detuve a la fuerza las aplicaciones comunes en ambas. Puede matar un proceso desde dentro del OS Monitor, por lo que no es necesario cambiar a la configuración de la aplicación.

(Haga clic en la imagen para ampliar)

IMG:

IMG: IMG:

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 granulares de aplicaciones. 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 están compartiendo datos con aplicaciones que desean compartir específicamente.

Para acceder a la función de administración de permisos de Marshmallow, querrá abrir su menú Configuración y luego hacer clic en la sección Aplicaciones. Desde allí, haga clic en el ícono de engranaje que luego 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 Ajustes – Aplicaciones – Avanzado (menú con icono de engranaje) – Dibujar sobre otras aplicaciones.

También puede habilitar / deshabilitar la función temporalmente tocando la aplicación y alternar el “Permitir dibujo sobre otras aplicaciones”.

Administrador de permisos de Android M

Imagen cortesía de Sebastiano Gottardo en Medium

¡Muchas gracias @Firelord! Finalmente encontré la aplicación que me ha impedido instalar apk y realizar copias de seguridad de adb.

Para mí, descubrí que era una aplicación llamada Battery Mix Siga leyendo para ver lo que 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 basaron principalmente en mostrar aplicaciones de atenuación, tintado y ahorro de energía. Como no usé ninguna o había eliminado todas las aplicaciones similares, había estado luchando por encontrar qué estaba pasando y qué aplicación era la culpable. ¡Y finalmente! Después de un comando simple y una búsqueda rápida, se ha resuelto: D

La aplicación infractora Battery Mix es 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 excelente).

Entonces, para diagnosticar, usé 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 impida 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 aplicaciones ofensivas, 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é eliminar esa aplicación cada vez que planeo realizar una descarga lateral o antes de las copias de seguridad de adb.

Si te ha resultado de ayuda este artículo, sería de mucha ayuda si lo compartieras con el resto entusiastas de la programación y nos ayudes a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *