1. All of the system apps cannot be deleted
System apps are not just apps to be used by end users, but many of them don't have any user interface and they provide some core functionality of Android OS. So you cannot remove them. E.g. SystemUI app loads basic user interface including status bar, notifications and theme, while Settings app does what the name suggests. Other examples of such apps deeply integrated with Android core framework include Bluetooth, ContactsProvider, DocumentsUI, DownloadProvider, ExternalStorageProvider, Shell etc.
Though mostly system apps are part of AOSP, some might be vendor or hardware related. E.g. on Qualcomm devices there are QtiTelephonyService, TimeService and QCRilMsgTunnel etc. in /vendor/app/
. Vendors may also inject their own code to AOSP apps. SystemUI and Settings apps are almost always modified by device OEMs to provide custom user interface and settings. So are other essentially required apps like Launcher, Keyboard and Dialer, though you can replace them with your own apps.
So it's not always practically possible to remove bloatware apps completely, and the situation may vary for different vendors, different phone models and different Android versions. An easy way to avoid the hassle of failed debloating attempts is to use a vanilla Android custom ROM on a rooted device with open source kernel and unlocked bootloader.
2. Deleting apps may not debloat the device completely
If you are too much concerned about bloatware, removing apps (system and/or user) only may not be enough to completely debloat your phone. Though in most cases Java apps are the culprits and you need to be more cautious about closed source apps usually included by OEMs, it's not that the other software components on device may never contain some kind of bloatware stuff.
Android apps run in Java-like virtual machines, so they come into play only after the zygote
is up. But from bootloader to zygote
in booting process, a huge chain of native code is executed. Bootloader starts Linux/Android kernel which starts first userspace process: init
. init
in turn starts many native services and daemons in background which provide different functionalities. To name a few, there are rild
, netd
, mediaserver
, surfaceflinger
, servicemanager
, logd
etc. zygote
is started in the last.
Most of this code is open source; Google develops AOSP and a common kernel source. Latter is further modified by device OEMs according to device hardware, but not all of them release kernel source. OEMs might also modify AOSP native stack, though it's not very likely that they contain some anti-privacy code. But SoC and hardware related code including bootloaders and binary blobs (HALs) in userspace are always closed source. And your device can be controlled remotely even if it's turned off or even if there is not operating system on it.
So it's hard to avoid falling prey to profit-driven corporations and secret services unless you stop using gadgets. To avoid human bodies being tracked or controlled remotely might be the next challenge.