9 votos

¿Por qué siguen funcionando las aplicaciones desactivadas?

Me he dado cuenta de que las aplicaciones (como la Sincronización de Contactos de Google) que han sido deshabilitadas mediante el gestor de aplicaciones de Android (KitKat) siguen apareciendo como en ejecución cuando se utilizan las herramientas de observación de procesos. Esto es cierto incluso después de reiniciar el dispositivo.

¿Por qué siguen funcionando las aplicaciones desactivadas? ¿Hay alguna forma efectiva (y segura) de desactivarlas?

Se aceptan las soluciones que requieran privilegios de root.

(Ten en cuenta que para el ejemplo concreto anterior, puedes decirle a Android que no sincronice tus contactos, pero sigue ejecutando el proceso de sincronización de contactos de Google. Pero no nos detengamos en ese ejemplo... es sólo un ejemplo).

0 votos

Justo al lado del botón "Desactivar" hay un botón "Forzar parada". Púlsalo y el proceso debería terminar y no iniciarse más.

0 votos

@GiantTree Gracias. Después de un reinicio, ¿no se iniciará de nuevo?

4 votos

En tu caso sí, porque una app del sistema ha llamado explícitamente a un servicio exportado de ese paquete y la única forma de matar de forma fiable ese proceso (y cualquier otro) es matándolo activamente usando Greenify, Amplify (requiere Xposed) o apps similares. Nota: esto no debería ocurrir y debería considerarse un error, porque el PackageManager tiene la tarea de no permitir que se ejecute una app deshabilitada.

7voto

Firelord Puntos 161

Tu Android no necesita tener acceso Root para realmente desactivar una aplicación, si tienes la versión 4.4.x o superior. Todo lo que necesitas es adb configuración en el PC y Depuración USB activada en un dispositivo no rooteado, o una aplicación de emulador de terminal para un dispositivo rooteado (también puedes usar adb).

Si compruebas que el gestor de paquetes ( pm ), se vería

pm block \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")
pm unblock \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")

Para Lollipop, sería

pm hide \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")
pm unhide \[--user USER\_ID\] PACKAGE\_OR\_COMPONENT")

Para bloquear u ocultar un paquete (es seguro), basta con hacer

pm block PACKAGE # for KitKat
pm hide PACKAGE  # for Lollipop

Para desbloquear o desocultar el paquete, haga lo siguiente

pm unblock PACKAGE #for KitKat 
pm unhide PACKAGE  # for Lollipop

PACKAGE → nombre del paquete de una aplicación. Para conocer el nombre del paquete de una aplicación:

Añada adb shell antes de la propia orden para ejecutarlos desde el PC.

La función detrás de ocultar tiene el siguiente comentario dentro del código fuente

Pone el paquete en un estado oculto, que es casi como un estado de desinstalación, haciendo que el paquete no esté disponible, pero no elimina los datos o el archivo real del paquete. La aplicación se puede desocultar restableciendo el estado oculto o instalándola

Se hacen comentarios similares para bloque aquí .

Para verificar la reclamación, puede utilizar algunos servicios del sistema como meminfo , procstats y activity utilizando el dumpsys o incluso listar todos los procesos utilizando ps . No encontrarás una presencia activa de la aplicación bloqueada/oculta.

Lo mismo ocurre con muchas aplicaciones del sistema deshabilitadas mediante GUI o pm disable pero no para todas las aplicaciones ya que incluso una aplicación desactivada puede recibir difunde que ha registrado, lo que sólo puede hacerse si se carga en la memoria 1 . Sin embargo, una aplicación desactivada no puede actuar por sí misma, ni puede ser ejecutada por ninguna otra aplicación.

He argumentado algunas de las diferencias entre ocultar / bloque y desactivar sobre mi pregunta pm hide VS pm disable -- la crisis de identidad . Sólo proporciona información complementaria a esta respuesta, por lo que puede omitirla.

EDITAR:

Parece que la técnica no funciona para todas las aplicaciones en Android KitKat. En ese caso, simplemente revoque el permiso de lectura del APK de la aplicación o elimine la extensión .APK del nombre del archivo de la aplicación (esto último sugerido por Jaskaranbir una vez), seguido de un reinicio suave/completo. Esto es lo mismo que borrar una aplicación del sistema, con la única diferencia de que todos los archivos permanecerán en su lugar.

Ambos pasos pueden ser ejecutados utilizando cualquier aplicación de gestión de archivos Root. La forma de la línea de comandos es:

adb shell su -c 'chmod 000 /data/app/PACKAGE*'             # 000 means no read-write-executable permission to user,group and others. 
adb shell su -c 'mv /data/app/PACKAGE* /data/app/PACKAGE'  # doing renaming by moving the file
adb reboot

1: Falta de pruebas técnicas que respalden el hecho

0 votos

¡Gran respuesta! Gracias. ¿Es mejor desactivar primero la aplicación utilizando el administrador de aplicaciones de Android, o mejor asegurarse de que no está desactivado allí?

0 votos

No es necesario desactivar la aplicación si se opta por pm block/hide así que déjalo sin tocar.

0 votos

Si ya está desactivado, ¿es mejor volver a activarlo?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X