23 votos

¿Cómo funciona técnicamente congelar una aplicación?

Aplicaciones como Link2SD y Titanium Backup pueden "congelar" otras aplicaciones, es decir, desactivarlas sin eliminarlas. ¿Qué hacen estas aplicaciones para lograr esto?

29voto

S S Puntos 8975

Titanium Backup, etc. solo usan el Administrador de Paquetes (pm) incorporado para congelar una aplicación. pm tiene una función para evitar que las aplicaciones se ejecuten y aparezcan en el Launcher. Para usarlo, Titanium Backup, etc. ejecutan el siguiente comando:

pm disable {nombre_del_paquete}

Puedes congelar aplicaciones por ti mismo sin usar una aplicación de congelamiento dedicada. Solo usa el comando anterior en Terminal Emulator o ADB Shell.

Por ejemplo, si quieres congelar el Navegador Web Stock, abre Terminal Emulator y cambia a root usando el comando su. Luego, ejecuta # pm disable com.android.browser.
Devolverá #Paquete com.android.browser nuevo estado: deshabilitado. ¡Listo!
Reinicia tu Launcher (algunos dispositivos pueden requerir reinicio) para ver que desapareció el ícono de la aplicación.

Para descongelar la aplicación, simplemente reemplaza disable con enable en el comando.

0 votos

¿Es lo mismo que los comandos kill -STOP, kill -CONT descritos aquí? linuxpoison.blogspot.com/2007/11/…

0 votos

@NoBugs Reinicia tu dispositivo. Algunos dispositivos necesitan esto para desactivar por completo una aplicación. Y sí, esto no es un comando de eliminación.

0 votos

Correcto. A veces pm disable solo dice "killed", luego el proceso se inicia de nuevo inmediatamente. kill -STOP pid es mejor. Puedes ver cuáles están detenidos, en la salida de ps.

14voto

NoBugs Puntos 352

Descubrí cómo funciona pm disable:

Si ejecutas cat /system/bin/pm, obtienes:

# Script para iniciar "pm" en el dispositivo, que tiene un shell muy rudimentario
# 
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"

Por lo tanto, aparentemente es lo mismo que el PackageManager que utilizamos desde Java, simplemente lo está llamando - solo en un contexto root al que ninguna app de usuario puede acceder directamente.

PUEDES verificar si algo está congelado, utilizando

getPackageManager().getApplicationEnabledSetting( el nombre del paquete ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)

0voto

1lastBr3ath Puntos 41

pm disable puede ser sobrepasado por la aplicación reactivando el componente. Una mejor forma de hacer esto es utilizando la función no documentada de Firewall de Intenciones de la siguiente manera: https://github.com/lihenggui/blocker

-6voto

Prasanna Puntos 121

En los sistemas Unix, los archivos tienen 3 autorizaciones: leer, escribir y ejecutar.

(Para 3 categorías de personas: el propietario del archivo [normalmente su creador], un grupo de personas y todos los demás, pero eso está fuera del tema).

Si quitas la autorización de ejecución del archivo, ya no se puede lanzar (ejecutar).

0 votos

Hola dralpuop. Las aplicaciones de Android no son binarias, por lo que agregar o eliminar el permiso ejecutable no hace ninguna diferencia en su ejecución.

0 votos

Android es un Sistema Unix 5, donde (por ejemplo) los scripts de shell no son binarios, sin embargo, añadir o quitar el permiso de ejecución HACE una diferencia.

1 votos

Un script de shell puede ejecutarse sin que esté configurado el bit ejecutable pasándolo como argumento a un intérprete directamente, por lo que no hace diferencia para los scripts de shell, ni para las aplicaciones. La pregunta es acerca de las aplicaciones, aplicaciones de Android por cierto, no acerca de scripts de shell.

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