Android Oreo Introduces Command Line Interface for Themes

We may earn a commission for purchases made using our links.

With the launch of Android Oreo comes a lot of time spent searching for hidden goodies within the source code. In the past, the Android engineering team has talked about enabling theming in Android O. We reported in May that the second Developer Preview of Android O may have been a hint of Google supporting the Overlay Manager Service (OMS) and Runtime Resource Overlay (RRO), but now we know for certain it was. Android Oreo now, technically, supports OMS/RRO theming and even provides an interface for enabling or disabling themes, provided you can stomach using the command line.

Update: Substratum has been using these commands with the dev previews and now with Oreo since they were available!

What are RRO and OMS?

RRO was developed internally by Sony for theme functionality on the Sony Xperia line. Developers who recognized its significance worked to extend its support to other ROMs, and with it came RRO theming across a multitude of devices- not just Sony devices. It ingeniously replaced resources at the app runtime, an ease of use unseen from other theming options at the time. This has evolved into OMS, which also was developed in-house by Sony. The famous Layers Manager used RRO theming originally, but OMS was later adapted into what is now known as Substratum and is the theming framework most familiar to users on our forums now. ROMs on our forums with OMS commits mean they support the standard theming engine of Substratum. “Legacy mode” within Substratum is using RRO theming.

Android Oreo Introduces Theme Commands

It seems Google now wishes to fully support this theme type in AOSP, possibly moving towards a full, system-supported theme manager. On the Android Gerrit, Google has made a number of changes in recent months (and with Android Oreo) which suggest moves to enable the theming engine system-wide. The changes are below, with links to their respective commits.

All of these changes signify a move by Google towards some form of system theming application to be included in the future. The permission listed above requires system privileges, and thus means that only a system application (or an application with root access) can invoke this permission. It’s interesting nonetheless, as it shows Google is finally working towards something.

So why only technically does Android Oreo support theming? Well, the simple answer is that while you can invoke the system method of installing themes, to do so would prove rather pointless. This is because, even though you can use the new command line interface to manage installed themes, you cannot actually install new themes without root access because the themes need to go into a directory that is restricted from user space. With root access you can simply enable a Substratum theme anyway, so there is no need to do it the new way. Google has not included a system application to theme the device, so until then there is no benefit whatsoever to trying to do it the newly included way.

The Command Line Theming Interface

We at XDA tested the command on a Google Pixel running the Android Oreo release. We decided to test some of the commands and firstly used

cmd overlays list

to view all pre-installed overlays. We noticed the existence of a “com.google.android.theme.pixel”, disabling it and instead enabling “android.auto_generated_rro__” by running the following commands.

As can be seen here, the standard overlay is disabled and the auto-generated one is enabled. Running our command to view our installed overlays again, we see the following output.

This results in a newly themed Android System settings application on our Google Pixel. Note that the above overlay list also includes themes installed using Substratum, and we were able to enable/disable these just as easily.

We also found another command when digging through the source. The command is as follows

cmd overlay dump --user 0

gives us the following output.

Output Settings

android.auto_generated_rro__:0 {

mPackageName…….: android.auto_generated_rro__

mUserId…………: 0

mTargetPackageName.: android

mBaseCodePath……: /vendor/overlay/framework-res__auto_generated_rro.apk

mState………….: STATE_ENABLED

mIsEnabled………: true

mIsStatic……….: true

}

com.google.android.theme.pixel:0 {

mPackageName…….: com.google.android.theme.pixel

mUserId…………: 0

mTargetPackageName.: android

mBaseCodePath……: /vendor/overlay/Pixel/PixelThemeOverlay.apk

mState………….: STATE_DISABLED

mIsEnabled………: false

mIsStatic……….: false

}

Default overlays: com.google.android.theme.pixel

PackageInfo cache

2 package(s)

So as can be seen, Google has put a lot of work into the development of the theming engine and integrating it into AOSP source. It looks like if it were to be added system-wide, themes would be enabled within the System UI tuner. Google have also provided information for OEMs, so it’s possible that additional OEMs could enable theming support based on the AOSP version in the future on Android Oreo.

Overall, this is a very exciting development. Theming is one of the many parts that defines Android as a fully customizable operating system on your phone, even if it currently requires root for system wide themes. In the future if it were enabled to work without root access, it would be a major step in the direction of user freedom. Of course, it might be locked away in System UI tuner for quite some time (as broken themes can break apps) but allowing the user to even take advantage of native theme support in the first place is a huge addition to the mobile operating system.