Should I root my Android phone
or a install a custom rom?
The longer answer:
This is a non-exhaustive list of reasons why I think being able to have administrator privileges is as important on phones, as it is on a normal pc.
While writing it I noticed I should have made it a long time ago, because tracking down when particular operations are now available on stock Android is more difficult than expected.
I’m not distinguishing between a device with administrative rights (root permissions) or an unlocked bootloader and the ability to install custom ROMs. While different things, from a higher-level perspective it means having better control over what runs on the device.
If the bootloader is unlocked, and there are custom ROMs like LineageOS, Replicant or /e/, one can obtain administrative rights on the device. If there is no custom ROM (for example because of missing drivers), it might be easier to root the device to get administrative rights, without installing another operating system.
For some features, it could be sufficient to install a program as a "system app", which does not mean that the program has root permissions, but for the installation step, administrative rights are required.
move apps to sd card (until Android 2.1)
It is now possible, it but it has not always been. Also, some applications had some limitations at the beginning. With root permissions, and with Link2SD, it is possible to move any application to an SD card.
Preinstalled/system apps (and updates of those apps) still cannot be moved without administrator rights.
Update system certificates (until Android 4)
Before Android 4, there was no way, without root permissions, to update certificates.
I still have an old android 2 device, and if I did not have root permissions, I would be practically unable to visit any website, or use any online service. As of today, most websites use HTTPS, and certificates expire and are released continuously.
get WiFi passwords (until Android 10)
It is possible to backup some data, but it is not possible to backup private data unless the application we want to back up offers an export or some synchronization functionality.
With root permissions, this is a non-issue. With programs like oandbackup or the much more famous Titanium Backup, it is possible to create an offline backup of all applications (or only a subset) and of theirs settings.
Those backups can also be used for exporting/importing settings from one phone to another (of course some programs might not work correctly).
Without administrative rights, or without a built-in backup functionality integrated into Android directly, there is not much one can do. Without root, as far as I know, the most complete solution is to use
replace/remove/disable system programs
Currently, it is possible to disable nearly all applications with adb. In previous versions of Android, not even this was possible (I remember a Phone with android 2.2 or 2.1 full of trial programs I could not remove), thus the situation improved dramatically. Unfortunately, there are still non-essential applications that still cannot be disabled or removed.
disable any app from the phone itself/with GUI
adb it is possible to disable nearly all applications, the same does not hold when disabling applications from the phone itself.
The interface provided by
adb is not as intuitive; it shows the package name and not the application name and/or the icon. It also requires a separate device, as
adb cannot be invoked from the phone itself, for example from
termux, without errors.
With root, any application can be disabled or removed.
extend supported version, newer updates
Currently, manufactures are obliged to provide updates for a couple of years. This does not mean a phone will get newer android versions, just the security fixes.
But what happens after two years?
Being able to install alternate ROMs, which can be based on newer android versions, means being able to install newer versions of android, which means having all security fixes too.
I continue to find it disturbing that for normal computers it is possible to be able to update the operating system, no matter what the manufacturers say. On "smart" devices, this is not possible. It is, for the consumer, from an ecological point of view and from a security perspective, a huge step backward.
better debug possibilities (release vs debug)
For those who develop, it is known that ideally release and debug variations of an application should behave the same, but in practice, they might work differently. On Android, it is normally not possible to access the private folder of a release program, while it is for a debug program.
busybox for better shell experience (termux, but no access to ADB)
Granted, I mostly use termux which has its owns binaries and thus does not need installing busybox system-wide. But from termux it is not possible to accomplish some operations (adb)
Granted, I could not find any up-to-date projects. I also think that termux is normally more than enough, but considering that termux does not officially work with Android 10, some of those projects might get resurrected.
The most common alternative to edit
/etc/hosts is using a local VPN. Unfortunately, solutions based on VPN are not as good. Only one VPN at a time can be executed, while it is, generally, possible to add multiple entries to
/etc/hosts. A VPN is a separate running program, so it probably consumes more resources, decreases battery duration etc. etc.
Common use-cases (at least on PC, server, and other devices where one normally has administrator rights)
add system-wide automatic redirects
assign a name to an ip-address without changing anything in the network infrastructure
At least those are the reasons I edit my
Again, a VPN could work, but it is generally not as good. A real firewall would take advantage of the features of the operating system (
iptables), and not consume any resources. Lineageos, for example, has an integrated firewall, a third-party alternative (that requires root) is AFWall+.
tweak advanced system settings
Those can help to reduce resource usages and increase battery life. Or they migh enhance some feature, like adjusting the led brightness.
control startup programs
For some reason, it is not possible to control which programs can start automatically like on most devices. autostarts gives a very granular control which program can start on which event, but it requires root permissions.
personalize boot sequence
On some devices, it is not (or at least was not) possible to disable the startup or shutdown sound. With root permissions, it is mostly possible to replace the audio file, or change system settings and change the behavior. As far as I know, on all current devices, it is possible to disable those sounds.
Custom ROMs give (or at least gave) the possibility to change the boot screen/animation.
This is in part fixed by launchers, that do not require root permissions. They make it possible, for example, to change icons on the home screen. But they cannot change the icons of the settings menu or the top bar.
Also before Android 10, there has not been a black theme for a long time.
The customization possibilities are still less powerful than those offered by cyanogenmod (un).
I like having a restart button, but this is not present on most Android devices
Lineageos has an option for enabling such functionality, on other ROMs it is possible, with root permissions, to use Simple Reboot.
Install incompatible apps
Sometimes, apps are incompatible just because they weren’t made or tested for a specific device, or because they have some known bugs, but are otherwise usable. The phone carrier or manufacturer could also blacklist programs. With administrator privileges, it is possible to overcome those limitations.
While Android (I guess) always supported tethering, some devices disabled it, because carriers required it. With Barnacle Wifi Tether it was possible to enable this disabled functionality.
Call recording does, unfortunately, not work reliably. With root permissions or by installing this program as a system app, the chances for this app to work correctly increase.
As already mentioned, devices are not always kept up-to-date by manufacturers, and after a couple of years, not even security updates are released for older devices.
install an app as a system app
Some application can take advantage of the fact of being installed as a system application
f-droid can automatically install updates
it is possible to reuse space usage, as system apps are normally installed on a separate partition
record calling might work more reliably
System apps can survive a reset. This is useful for adding a store or browser, otherwise one needs to install them manually
Change system settings from an app
A program like LibreTasks or tasker (which do not requires administrative privileges) can help to automate tasks on the smartphone. Unfortunately, some types of tasks, mostly changing system settings, must be done manually. Unless one has root access.
Change DNS settings
It is possible to change DNS settings on Android, but it is cumbersome and error-prone.
It is cumbersome because one has to manually enter it in each network connections (every Wi-Fi connection and the cellular connection).
For changing the Wi-Fi settings, one has to "Modify network", then toggle on the advanced options and change "IP settings" from DHCP to Static.
As a side effect, one has to manually specify the phone’s IP address and other details.
There are alternatives for non-rooted devices, and those involves using a VPN, which is hardly a good solution, but is less error-prone than to editing every network by hand, and does not require to not set ip addresses to static.