Take the 2-minute tour ×
Android Enthusiasts Stack Exchange is a question and answer site for enthusiasts and power users of the Android operating system. It's 100% free, no registration required.

Apps like Link2SD and Titanium Backup are able to "freeze" other apps, that is disable them without removing them. What do these apps do to achieve this?

share|improve this question

2 Answers 2

up vote 12 down vote accepted

Titanium Backup etc just use in-built Package Manager (pm) to freeze an app. pm has a feature to prevent apps from running & from appearing in Launcher. To use it, Titanium Backup etc execute following command:

pm disable {package_name}

You can freeze apps by yourself without using a dedicated freezer app. Just use the above command in Terminal Emulator or ADB Shell.

For example, if you want to freeze Stock Web Browser, open Terminal Emulator & switch to root using su command. Then, execute # pm disable com.android.browser.
It'll return #Package com.android.browser new state: disabled. Done!
Restart your Launcher (some devices may require reboot) to see the app icon gone.

To defrost the app, just replace disable with enable in the command.

share|improve this answer
    
Interesting. I thought these apps use some kind of hack, like removing the reading permission from a certailn file. –  Erik Oct 24 '12 at 9:18
    
Is this the same as the kill -STOP, kill -CONT commands described here? linuxpoison.blogspot.com/2007/11/… –  NoBugs Apr 14 '13 at 20:16
    
How can I tell whether an app is frozen? ps still shows the application. –  NoBugs Apr 14 '13 at 20:45
    
@NoBugs Reboot your device. Some devices need this to completely disable an app. And yes, this isn't kill command. –  Sachin Shekhar Apr 15 '13 at 1:08
    
Right. Sometimes pm disable only says "killed", then the process starts up again immediately. kill -STOP pid is better. You can see which are stopped, in ps output. –  NoBugs May 2 '13 at 14:30

I found how pm disable works:

If you run cat /system/bin/pm, it gives:

# 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 "$@"

So apparently it is the same as the PackageManager we use from Java, it is calling it - just in a root context that no user app can directly access.

You CAN check if something is frozen, using

getPackageManager().getApplicationEnabledSetting( the package name ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.