22

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?

4 Answers 4

27

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.

3
  • Is this the same as the kill -STOP, kill -CONT commands described here? linuxpoison.blogspot.com/2007/11/…
    – NoBugs
    Commented Apr 14, 2013 at 20:16
  • @NoBugs Reboot your device. Some devices need this to completely disable an app. And yes, this isn't kill command.
    – iOS
    Commented Apr 15, 2013 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
    Commented May 2, 2013 at 14:30
14

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)
0

pm disable can be bypassed by the app re-enabling the component. A better way to do this is to use the undocumented feature of Intent Firewall as such: https://github.com/lihenggui/blocker

-6

In Unix systems, files have 3 authorizations: read, write, and execute.

(For 3 categories of people: the owner of the file [usually its creator], a group of people, and everyone else, but it is out of the subject).

If you remove the execute authorization of the file, it cannot be launched (executed) anymore.

5
  • Hello dralpuop. Android apps are not binaries, so adding or removing the executable permission makes no difference to their execution.
    – Firelord
    Commented Nov 22, 2019 at 6:09
  • Android is System 5 Unix, where (for example) shell scripts are not binaries, yet adding or removing the executable permission MAKES a difference.
    – ftpo
    Commented Nov 22, 2019 at 22:03
  • 1
    A shell script can be executed without executable bit set by passing it as an argument to an intepreter directly, so it makes no difference for shell scripts, or for apps. The question and question is about apps Android apps by the way, not about shell scripts.
    – Firelord
    Commented Nov 22, 2019 at 22:38
  • 1
    Try this source to know how apps are run in Android. github.com/dogriffiths/HeadFirstAndroid/wiki/…
    – Firelord
    Commented Nov 22, 2019 at 22:40
  • Apart from which, apps are marked disabled in packages.xml, and the disabled status is reported in dumpsys packages. Simply changing their file permissions wouldn't cause that.
    – Izzy
    Commented Sep 22, 2020 at 6:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .