Remove Android system applications

Normally it is not possible to delete some system apps that came pre-installed on your Android phone. Some can be turned off so that they won’t start and show on the list of apps on your phone.

  1. Open your phone’s Settings app.

  2. Select Apps & notifications.

  3. Select the app you want to disable.

  4. Select Disable.

Unfortunately, some preinstalled applications (for example Facebook on some phones, and mostly branding application of your phone or sim provider) cannot even be turned off even if they are non-essential for the phone to work.

Some examples of applications:

  • Google search, Gmail, youtube, gmaps

  • Bixby

  • Microsoft Office

  • Facebook

Even if you are not starting them explicitly, they are annoying. You should update them to avoid potential security issues (and because it’s easier to configure the phone to update everything), thus stealing bandwidth, and they might get started automatically in the background or on some event, thus stealing resources like battery power, personal data and further bandwidth.

One of the main advantages of a rooted phone is being able to remove or replace all preinstalled applications, but it’s not always a viable approach.

A more viable and foolproof approach is to uninstall the application for the current user, and not from the system.

There is AFAIK no GUI for this operation, and one has to resort to ADB, which makes the process less user-friendly.

To use ADB it is necessary to enable USB debugging. . Open the Settings app. . Select “About Phone”. . Select the “Build Number” item seven times. You should get a message saying you are now a developer. . From the main Settings page, there should be a new option near the bottom called “Developer Options”, select it. . Select "Enable USB Debugging".

when you connect your phone to your computer, you’ll see a popup entitled “Allow USB Debugging?” on your phone. Eventually, check the "Always allow from this computer" box and select OK.

On Debian-like system (and other GNU/Linux distributions) it is possible to install adb through the package manager:

sudo aptitude install adb

On Windows, it might be necessary to install the whole sdk.

For listing all installed applications from the shell:

adb shell pm list packages

For installing and uninstalling packages the recommended approach is to use the package manager (pm).

adb shell pm uninstall package.name

The error Failure [DELETE_FAILED_INTERNAL_ERROR] indicates that you probably do not have the necessary permissions for such operation.

In this case the parameter --user can be used for disabling the application for the given user:

adb shell pm uninstall --user 0 package.name

The error Failure [not installed for 0] hints that the package was not installed on the phone, probably a typo.

As packages are not removed from the system, it is still possible to query them:

adb shell pm list packages -u

And it is also possible to reinstall them:

adb shell pm install-existing package.name

or directly from F-Droid, Google Play Store‎ or somewhere else, like a local apk file.

The advantage of pm, even if more convoluted is that it is possible to remove virtually any package, even "critical" packages like the launcher.

Apparently, it is not possible to uninstall every package. As I did not encounter packages I was not able to remove with --user, this limitation might be when removing packages completely from the system, or a further limitation on some specific phones.

In this case, it should still be is possible to disable the package:

adb shell pm disable package_name

A more "violent" approach (normally only available only for rooted phones), is deleting the .apk file from it install location. It will effectively uninstall the application but will leave data like cache, settings and other files scattered through the system. So it’s not the recommended approach.

Side note

Even if it is possible to execute pm from the phone directly, for example from Termux, I’ve got the following error android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died.

It seems to be a system restriction (implemented with SELinux), and I have found no way to disable it (even temporarily).

Thus, unfortunately, it does not seem possible to uninstall application directly from the phone without a computer, or root permissions.