Debloating Your Android Device?

Denislav Popov, 27 July 2022

Introduction

[2] mobile-evolution

In 1997, the Nokia 6110 included a built-in version of the basic arcade game “Snake,” which many consider the first mobile app. The first iPod would also come with built-in games: Solitaire and Brick.

This is how the InventionsLand’s brief blog post about the history of mobile apps starts. And back then, implementing a game or mobile application was a no easy feat. The only app developers were those working at the same company that produces the mobile device or its software. And building an app was as difficult and stressing as debugging without attaching logs every two lines of code.

As mobile devices continued to evolve, we were gradually introduced to the abundance of applications, thanks to the independent developers and app stores. Browsers, social apps, personalization apps, productivity apps, you name it. If you have a light bulb burned out, there’s probably an app for that.

Soon enough, OEMs took notice and followed suit, by preloading every smartphone they release with all the apps you’d may need. And then some more that you may not need. This brings me to the main topic of this article - the unnecessary and, more often than not, too intrusive applications that nearly every Android device comes with - bloatware. Now, I’d like to point out that bloatware is a subjective term, which means that what is a much-needed application for ones, may be quickly deleted by others. There are no specific applications automatically classified as bloatware, rather it is what the user perceives as such.

Another topic that is worth attention is that in some cases the “unloved” apps may be found in different locations of the device, those locations are better known as partitions. Some manufacturers will install the third-party apps in the user directory, while some may prefer to place them in the system directory. “What is the difference?” you may ask. If an app is installed in the user directory, then the user can choose to uninstall the application, just like an application downloaded from Google Play. On the other hand, applications installed in the system directory would require a different approach.

What is bloatware?

Bloatware is often described as a software that introduces more features than users are likely to use, has performance issues that may affect the whole system it is running on, or, in the case of Android - applications that come preinstalled and are neither useful nor available for the user to uninstall. Historically, bloatware on Android devices has been a problem since the early days of Android with applications being either too heavy to use on the then greatest hardware, or provided services that were not available in a specific region or country.

Fear not

As you might have guessed, Android is a pretty flexible operating system and being an open source makes for various possible approaches when a problem or a challenge arises. Depending on the skills, tools availability or the hardware of the device, there are multiple solutions to uninstall unwanted apps, starting from the easiest one and moving on to the more advanced where deep understanding of the matter is required.

Since this post focuses on the Android Debug Bridge approach, I’ll only briefly touch on the other two.

1. If it is a user app

Sometimes manufacturers install some of the bloatware apps on the user partition, meaning that the user can uninstall them like any other user app by using the provided option in the launcher or by going to Settings>Apps

2. Removing system bloatware using root

Before moving ahead, there are a few important things to mention when it comes to gaining root access and opening the system partition of a device.

  1. I and the rest of the authors don’t take responsibility if something goes wrong with your device. There are hundreds of different Android-powered smartphones, each requiring its own tools and special steps. This post merely describes that such method of uninstalling exists and is not a tutorial on how to gain root access.
  2. In most of the cases, unless explicitly specified by the OEM, root access will void the guarantee of the device.
  3. Rooting may also weaken the device’s security, so I’d advise against rooting if there’s sensitive information on the device like credit cards, personal, or even company data.
  4. Rooting may disable official OEM updates if not done properly.
  5. It is strongly recommended that you already have some experience with such modifications and are advanced Android power user. This procedure is not suitable for the general public.

As already said, some unwanted apps are located in the system partition, where uninstalling them as an ordinary app won’t do the trick. In such case, gaining root privileges will give you access to the system.

Then, using some sort of root explorer or system app remover (check Play Store) you could either directly access the installed package and delete it manually or use the system app remover to uninstall any bloatware just like you would with a user installed application. I’d go for the second option, since removing manually the installed package would suggest you’d better remove the cached data that would be otherwise sitting orphaned. As a whole though, rooting your device just to uninstall a few bloatware apps is rather beyond what is needed plus gaining root is not an easy task, especially if things go wrong, ask me how I know.

3. Removing system bloatware using ADB

I’d say that this is the ideal solution for both power users and people who don’t want to mess with their phones too much. Let’s start with what ADB is. Android Debug Bridge (ADB) is a command line tool that communicates with a connected Android device, allowing for sending both simple adb-specific commands and Unix commands through Unix shell. More info can be found on the official ADB page here.

Required tools/apps

  1. ADB is available through Android SDK. Once the SDK is downloaded, adb can be found and started from platform-tools directory inside SDK’s location.
  2. Package Names app or any other app like AppXplore that can read apps’ package names
  3. Enabled USB Debugging

The app that I’m going to demonstrate the process of deinstallation with, is BloatwareApp - application that I have specifically developed for the purpose of demonstration. I have managed to push the app into the system app directory using root. While I’m demonstrating the process using this example app, the same steps are applied for all the applications that you may consider bloatware. So, using Package Names app, I’m searching for the BloatwareApp package, here it is:

Bloatware-app-installed
Once I know which package I should be looking for, I’m checking if there are any devices available:

adb devices
1
2
3
4
5
user ~ % adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
HQ618R2BF0	device

There is a device connected so let’s proceed. Using the adb shell script, I can list all the installed packages on the device.

adb shell 'pm list packages -f'

With all the packages listed, using command + F I’ll search for “com.example.bloatwareapp”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
user ~ % adb shell 'pm list packages -f'
... //some more packages
package:/data/app/~~8tSBjQQi34gOYB127BN6Wg==/com.sonymobile.xperiatesticonpackiii-naKlsySeR6ZdwXPAw1D18A==/base.apk=com.sonymobile.xperiatesticonpackiii
package:/product/overlay/DisplayCutoutEmulationDouble/DisplayCutoutEmulationDoubleOverlay.apk=com.android.internal.display.cutout.emulation.double
package:/system/priv-app/TelephonyProvider/TelephonyProvider.apk=com.android.providers.telephony
package:/system/app/~~2rr2hX8IYlfvuzqB8RveXA==/com.example.bloatwareapp-BU0qCPkNn901xMdbDkWbBQ==/base.apk=com.example.bloatwareapp
package:/data/app/~~3QHI058ctzeDnPYkbfbFvg==/com.google.android.googlequicksearchbox-hTZeSNQcnMcyDLfgdehExA==/base.apk=com.google.android.googlequicksearchbox
package:/product/overlay/SystemUIRes-Platform-Overlay.apk=com.android.systemui.platform.overlay
package:/apex/com.android.cellbroadcast/priv-app/GoogleCellBroadcastServiceModule@M_2022_06/GoogleCellBroadcastServiceModule.apk=com.google.android.cellbroadcastservice
package:/system/priv-app/CalendarProvider/CalendarProvider.apk=com.android.providers.calendar
package:/data/app/~~qI7StXOuCEL8jLNulz89IQ==/com.facebook.mlite-o7dkjWMKTt_GiYQ1ALY37A==/base.apk=com.facebook.mlite
package:/system/app/SunlightBooster/SunlightBooster.apk=com.sonymobile.sunlightbooster
package:/system/priv-app/MediaProviderLegacy/MediaProviderLegacy.apk=com.android.providers.media
package:/system_ext/priv-app/SomcGameEnhancerAPI/SomcGameEnhancerAPI.apk=com.sonymobile.gameenhancer.api
package:/data/app/~~8snp0a8iD6-XVmXDx7PPEQ==/com.sonymobile.xperiatesticonpacki-o92DzqhOnjYRX6OP3rocKA==/base.apk=com.sonymobile.xperiatesticonpacki
... //some more packages

A more advanced way, however, is to use shell’s grep command to filter specific search results:

adb shell 'pm list packages -f' | grep bloatwareapp
1
2
user ~ % adb shell 'pm list packages -f' | grep bloatwareapp
package:/data/app/~~2rr2hX8IYlfvuzqB8RveXA==/com.example.bloatwareapp-BU0qCPkNn901xMdbDkWbBQ==/base.apk=com.example.bloatwareapp

Now that I verified that there is indeed such package, I can uninstall it.

adb shell pm uninstall --user 0 com.example.bloatwareapp
1
2
3
user ~ % adb shell pm uninstall --user 0 com.example.bloatwareapp
Success
user ~ % 

ADB returned “Success” message meaning BloatwareApp is now uninstalled. Package Names app confirms it.

Bloatware-app-uninstalled

[3] wait

4. Alternatives

There are various tools developed that can uninstall apps considered as bloatware, automating the process above, but the downside is that the preloaded list of packages that the tools checks against, are not timely updated, which means that one app in one Android version may be bloatware, but could be vital for the next one and without updated tool, there’s no safety guaranteed.

Conclusion

To conclude the article, I’ll summarize in TLDR manner the main topics from this post:

  • OEMs ship third-party applications that some users may not need or consider to be lowering the performance of their devices. Such apps are known as bloatware.
  • The article demonstrated the process of removing such applications if they’re in the system partition.
  • Unless the apps cannot be removed using the built-in option for that, Android Debug Bridge is a good alternative, rooting is possible too, but please consider the warnings I’ve listed.

Happy debloating!

Credits