Android without Google 3: Getting rid of unwanted bloatware
There are apps pre-installed on our devices we never need. Still they turn up on all kind of places: in the “Share” menu, in the app drawer, on the home screen – some of them even in the list of running apps! While it’s pretty easy to remove that icon from the home-screen: How do we get rid of those apps in the other places? And keep them from wasting our resources?
While this series is about “Android without Google”, this not only affects “Google Apps”. Manufacturers and carriers pre-install several apps as well, and often not only a few. Those are also known as Bloatware, as they’re “bloat” used space on storage (and other resources) beyond what the user needs. And as the latter is pretty subjective, the same applies to which apps are to be cosidered “bloatware”. So letting you decide which apps to get rid of, this article should help you figure how to do it.
Android without Google:
- 1: Introduction
- 2: ownCloud
- 3: Getting rid of unwanted bloatware
- 4: App Replacements
- 5: Free your Droid!
- 5a: microG (update to NOGAPPS in part 5)
- 6: Self-Experiment (still running)
- 7: Where do I get my apps now?
- 8: Shiftphones – the most easy way to reach your goal!
Started before this series, but clearly belonging here:
Without root: deactivate
On a device without root access, possibilities are quite limited. “Bloatware” is usually pre-installed on the /system
partition which, except when OS-updates are applied, is mounted read-only. Furthermore, access to most directories is restricted, and manufacturers/ROM-cooks can even “protect” apps against removal. Which means: the following steps might be performable on several, but probably not on all apps. For good reasons, some “core apps” essential to the system cannot be “abrogated” – but unfortunately, some manufacturers/carriers seem to have a bizarre view on what “essential” means.
So finally, without root you cannot really uninstall most of the bloatware. All you can do is to deactivate some of it. And I will show you here how that is done:
Starting from your home-screen, open the Android Settings. Navigate to Manage Applications (might be named slightly different depending on the Android version used). This usually opens a list of all apps you have installed, so the pre-installed apps are not listed on the default tab. Hence, switch to the “All” tab (again, name might slightly differ). Now scroll the list to find the app you want to get rid of, and tab its entry. You should be presented with a screen similar to the one shown at the right of this text.
The top-right button (in the screenshot to the right: “Disable”) might have different labels:
- “Uninstall”: you are lucky, this app can be removed completely!
- “Uninstall updates”: This is a pre-installed system app (core app installed in system-space) which had received updates via e.g. Google Play. While you cannot remove the pre-installed app, in order to disable it you first need to get rid of those updates (which are installed in user-space). You can do so by pushing this button, which then should change its label to…
- “Disable”: A system-app you cannot uninstall, but disable (by pushing this button). It will then no longer turn up visibly in places other than here – e.g. not in the App drawer or on the home-screen.
- “Disable” (grayed out): No luck. This is a protected (system-) app you cannot remove nor disable. Without rooting your device, you will have to live with it.
If any of the button-pushing-jobs cannot be executed, you might have to “Force Stop” and “Clear Data” / “Clear Cache” first.
Once disabled, the app is not completely gone. You can “Enable” it again at a later time (updates will be re-installed then) the same way you disabled it now1. Also other apps can still call it via its intents2.
With root: freeze
Freezing an app is basically the same as to deactivate it – except that “root powers” make it possible for “protected apps” as well. There are at least two ways available to do this:
Freezing with Titanium Backup
Titanium Backup is one of the most powerful root-tools even I would call “essential”.3 As the name suggests, its primary purpose is to create (and restore) backups, including apps with their data as well as system settings. But it also comes with a box of tools to deal with the system, like cleaning up the Dalvik Cache4 or – freezing apps. Even if you’re planning to completely remove some apps, it’s strongly suggested to first freeze them (and in a second step optionally also disabling all their broadcast receivers) to find out potential dependencies: if you removed an essential app, you might be in big trouble (in the worst case, the device no longer can complete the boot process). If you only disabled/froze it, there are still ways to revert this (see below).
In order to freeze an app with Titanium Backup, you start the app (of course), then switch to the “Backup/Restore” tab. Now scroll the list of apps to find the one you want to freeze. To make that easier with a long list of installed apps, you can have the list sorted by different criteria (a.o. alphabetically), or set some filter (e.g. only system-apps which are not yet frozen). When found, tapping the apps entry should bring up a menu as shown in the right-hand screenshot, offering options to deal with it. Punch the “Freeze!” button – and a few seconds later it should rename itself to “Defrost”, the action to revert. You’re done.
Freezing via command-line
On Android, there’s the PackageManager to deal with all kind of things concerning “packages” (i.e. apps, seen from the systems side). It manages a catalog of installed apps and their properties, such as permissions, features (e.g. does it have camera support?), signatures (who signed them?) – and their states. Its interface can be used to list or change selected properties, or even to install/uninstall a package. As it comes with a command-line tool named pm
, we can use it for our purpose5 – either via ADB, or using a terminal app.
In a first step, we need to figure out the apps package name. Easiest way to do this is to visit its page at Google Play, and check the URL of that page. For Titanium Backup, this would e.g. be https://play.google.com/store/apps/details?id=com.keramidas.TitaniumBackup
. The id
here is the package name – so for Titanium Backup, this is com.keramidas.TitaniumBackup
. For the next step I assume you’re already on the command line (either started the terminal app, or connected via adb shell
) – and (optionally) gained super-user privileges (without that, you will not be able to deal with protected system-apps this way). So let’s do it here with the Titanium Backup example:
# Check whether TiBu is enabled. If the following command returns its name, it is:
$ pm list packages -e | grep TitaniumBackup
package:com.keramidas.TitaniumBackup
# It’s enabled, so let’s disable it:
$ pm disable com.keramidas.TitaniumBackup
Package com.keramidas.TitaniumBackup new state: disabled
# cross-check whether it’s now listed as “disabled”:
$ pm list packages -d | grep TitaniumBackup
package:com.keramidas.TitaniumBackup
# Good. But we still need it, so let’s revert the change:
$ pm enable com.keramidas.TitaniumBackup
Package com.keramidas.TitaniumBackup new state: enabled
You can see a good use for this in some other situations: imagine you’ve disabled several apps a couple of months ago, and already forgot which ones those were. Now, for some reason, you need to factory-reset the device – but don’t want to fiddle around figuring which apps you have to deal with afterwards. Without the grep
part, the pm list
commands would list all packages with the state you specify, so listing all currently disabled apps would be as easy as pm list packages -d >/sdcard/disabled.list
. Now edit the resulting file correspondingly, so each line reads pm disable <package_name>
, and after the factory-reset you can use it as a shell-script to automatically disable them all with one call: sh /sdcard/disabled.list
.
Another good use: You’ve accidentally disabled your one and only keyboard app (or worse, the home-screen) – what a mess! No big deal: adb shell
and the pm enable
command return your device into a “usable state” as easy as “1-2-3”
With root: deactivate broadcast listeners
I’ve already mentioned them above: Broadcast listeners. Android sends “broadcasts” on different events, such as “boot completed”, “battery low”, “package installed”, “network state changed”, “SD card mounted”, and many more. Apps can register “listeners” for those, so they get notified whenever anything happens they might “need to know”. A good example here would be the “media scanner”, which wants to be informed e.g. whenever the SD card is mounted, so it can check whether there are new photos, videos, or music files on it to register with its database6. While this example makes perfect sense, and it’s unlikely you want to change it – that might be different for other things. Some apps simply use that a little too much, especially when you rarely use them (or not at all). Moreover it seems even deactivated apps still get started this way: on my LG Optimus 4X HD I e.g. froze the LG Remote Care app7. Still, after each reboot it pops up its welcome box.
There are several apps available to deal with that. In the past, I’ve used Autorun Manager PRO, and was pretty satisfied with it. But as I’m meanwhile using ROM Toolbox Pro for several other tasks, which includes this feature as well (see screenshot to the right), I’m now using it also to manage those “auto-start ramps” (no need for a separate app, as good as it is).
Taking a look at the mentioned screenshot, you might be a little shocked how many listeners some apps register8. I’ve seen some with 50 and more. ROM Toolbox shows you some details (see the blue ⓘ icon next to each entry?). Tapping an app-entry reveals the listeners registered9. You can “unregister” each listener separately. Which ones are safe to get rid of you either might guess at the name of listener or intents, or figure later when something no longer works as expected. No big deal, simply re-enable the listener, and it should be “back to normal”.
Besides: when you uninstall the “managing app”, those listeners remain in the states you’ve set them to – so remember to check that before. If you forgot, re-installing the “manager” might not help to figure which parts you’ve changed. But then, re-installing (or updating) the app-in-question should also re-enable all its listeners.
With root: remove
Before you go that far, make sure you’ve:
- first tried that neither disabling/freezing the app, nor de-activating all its receivers had any unwanted side-effects
- made a backup of the app (and optionally its data), as you might need it again later and it might not be available on the markets then
Uninstalling an app is a step you cannot simply “revert”: Gone is gone, and without a backup there might be no way back (that’s why it’s called back up
). I’ve seen plenty of cases where people were sitting with a (partially) unusable device afterwards when they “forgot” about those steps. Be slow in “tapping around” and consider two or three times whether to hit the “confirm” button – again, I’ve seen often enough that people “accidentally deleted the wrong app”. Also important to remember: not even a factory-reset will bring back deleted apps. What you broke on the
/system
partition stays broken, unless you’ve got the tools and material to repair it yourself. I’ve warned you!
Some tools required to execute this task have already been mentioned: Titanium Backup and ROM Toolbox Pro are two of them, more candidates can be found in this app-list. Everything else has been explained above
-
On some systems, disabled apps are moved to the end of the list – so in case you cannot find the app again in “alphabetical order”, simply scroll the list all the way down and look there. ↩︎
-
“intents” and “broadcasts” are ways of Androids inter-process communication, which you can find described in this Stack Exchange article. ↩︎
-
I highly recommend to buy Titanium Backup Pro to unleash its full power! It was one of the very first apps I bought for Android, and I never regret it. ↩︎
-
The “Dalvik Cache” stores the optimized byte-code for Androids Dalvik VM, files usually carrying the
.odex
extention (Optimized Dalvik EXexutable). If you frequenty install/uninstall apps, this cache might get “fragmented” (and sometimes even.odex
files of apps long uninstalled remain). Titanium Backup can clean up the mess a little, resulting in your system becoming more responsive again – though that’s not always “subjective perceivable”. ↩︎ -
as e.g. described in an article on Stack Exchange ↩︎
-
Many apps use that to avoid scanning all media on each app start (or having to maintain their own databases), e.g. the media gallery, music players, and more. ↩︎
-
an app intended for the LG staff to remotely access your device – officially with your consent only, when you call them with a service case and they feel it helpful. Unfortunately, this is “Mafia-ware” – I mean, it asks your permission as soon as you’ve started the device, offering you an “accept now” or “later”, but no way to decline. “Later” then means the popup appears all 30 minutes… until you finally give up. Or “freeze” the app
↩︎
-
hey, that’s Facebook – what did you expect? They want to know when you poo’d even, but (un?)fortunately that’s not automatically broadcast by Android
↩︎
-
As you can see, multiple intents can be registered with one listener. ↩︎