¿Cómo funciona técnicamente la congelación de una aplicación?

22

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

Erik
fuente

Respuestas:

28

Titanium Backup, etc., solo usa in-built Package Manager (pm)para congelar una aplicación. pmtiene una función para evitar que las aplicaciones se ejecuten y aparezcan en el Iniciador. Para usarlo, Titanium Backup, etc., ejecute el siguiente comando:

pm deshabilitar {package_name}

Puede congelar aplicaciones usted mismo sin usar una aplicación de congelador dedicada. Simplemente use el comando anterior en Terminal Emulator o ADB Shell.

Por ejemplo, si desea congelar Stock Web Browser, abra Terminal Emulatory cambie a root usando el sucomando. Entonces, ejecuta # pm disable com.android.browser.
Se va a volver #Package com.android.browser new state: disabled. ¡Hecho!
Reinicie su Iniciador (algunos dispositivos pueden requerir reiniciar) para ver el ícono de la aplicación desaparecido.

Para descongelar la aplicación, simplemente reemplácela disablecon enableen el comando.

Android Quesito
fuente
¿Es esto lo mismo que los comandos kill -STOP, kill -CONT descritos aquí? linuxpoison.blogspot.com/2007/11/…
NoBugs
@NoBugs Reinicia tu dispositivo. Algunos dispositivos necesitan esto para deshabilitar completamente una aplicación. Y sí, este no es un comando de matar.
Android Quesito
Correcto. A veces pm disablesolo dice "muerto", luego el proceso comienza de nuevo inmediatamente. kill -STOP pid es mejor. Puede ver cuáles están detenidos, en la pssalida.
NoBugs
13

Encontré cómo pm disablefunciona:

Si corres cat /system/bin/pm, te da:

# Script to start "pm" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"

Entonces, aparentemente es lo mismo que el PackageManager que usamos desde Java, lo llama, solo en un contexto raíz al que ninguna aplicación de usuario puede acceder directamente.

PUEDE verificar si algo está congelado, utilizando

getPackageManager().getApplicationEnabledSetting( the package name ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)
NoBugs
fuente
-4

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

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

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

dralpuop
fuente
Hola dralpuop Las aplicaciones de Android no son binarios, por lo que agregar o eliminar el permiso ejecutable no hace ninguna diferencia en su ejecución.
Señor del fuego
Android es System 5 Unix, donde (por ejemplo) los scripts de shell no son binarios, sin embargo, agregar o eliminar el permiso ejecutable MARCA la diferencia.
dralpuop
Se puede ejecutar un script de shell sin establecer un bit ejecutable pasándolo como argumento a un intérprete directamente, por lo que no hay diferencia para los scripts de shell o para las aplicaciones. La pregunta y la pregunta son sobre las aplicaciones de Android, por cierto, no sobre los scripts de shell.
Señor del fuego
1
Pruebe esta fuente para saber cómo se ejecutan las aplicaciones en Android. github.com/dogriffiths/HeadFirstAndroid/wiki/…
Señor del Fuego