Xposed: The mighty Android toolbox

It´s unlikely you´ve never heard the term, with the framework being around for a few years now. But you might have ignored it (deep system modifications sounding too dangerous), or just never had the time to „dig into it“. So I want to give you a brief introduction to get you started about what it is, how to get it unto your device, how to use it, and some examples of what you can do with it.
What is Xposed?
Xposed is a framework for modules that can change the behavior of the system and apps without touching any APKs. Instead, it reaches deep into the system, modifying the corresponding DEX1 or ART2 representations of the app. To be able to do so, Xposed must be deeply integrated with the Android system – which is done on installation of the framework, where it replaces some system components (after backing up the originals, so you can revert back anytime).
There are multiple advantages to this approach. Listing some of them:
- you can modify parts of the system you otherwise could not
- you can apply multiple modifications to the same app in a combination best fitting your intentions
- changes are easy to undo: As all changes are done in the memory, you just need to deactivate the module and reboot to get your original system back.
How to install the framework
First things first: Your Android device must be rooted. And better also have a fresh Nandroid backup made, one never knows. With this requirement met, you can go on:
Android 4.x
On Android 4.x, installation is quite easy: you download the Installer, install it to your device (e.g. using adb install
), run it. You will be greated by a screen like that in the screenshot to the right, most likely using your own language. Now tap on the first entry – the one labeled „Framework“.
This is were you manage the framework itself. As the buttons show, you can install/update the framework from here, remove it if you don´t want it any longer, chose the installation mode (write directly to /system
, automatically install via recovery using a .zip
file, or create a .zip
file on your SD card so you can install it yourself manually from within recovery mode), or restart your device. The latter is always necessary after installs/updates to the framework or its modules because, as pointed out above, modifications are applied dynamically on system start.
Having done the installation, you need to restart your device for the framework to start its job. You´ve got the choice between a „software restart“ and a „device restart“ here. The former is faster (no complete shutdown) and should do in most cases, the latter is more thorough (full shutdown and reboot). The following boot-up will take noticably longer than you´re used to, so don´t be surprised: after all, now Xposed will have to fuse itself into the system. It might take several minutes. Not a bad idea to have your device connected to a charger, especially if your battery is not fully charged
Android ≥ 5
Starting with Lollipop, things got a little more complicated. This is due to the change from Dalvik to ART, which requires a little more work to be done for the framework to integrate with the system. As pointed out in the official thread for Lollipop/Marshmallow, you first need to fetch the appropriate .zip
file from there (the xposed-v*-sdk*-*.zip
matching your device´s architecture) and flash that via your custom recovery (while there, best fetch the corresponding uninstaller (xposed-uninstaller*.zip
) as well, just in case). That done, also fetch the XposedInstaller_3.0*.apk
from the same place – and proceed as described above.
How to uninstall
One way you might already have guessed from the installation description: if everything is still in working order, you can simply use the Xposed Installer, go to the Framework section, and push the „Uninstall“ button. If you´ve already installed some modules, it might be a good idea to uninstall those first: without the framework in place, they won´t be any good anymore either.
But what if you´re forced to uninstall the framework because your device couldn´t handle it, and doesn´t boot up anymore? For this case, Xposed provides a .zip
file to be flashed from your recovery, which takes care for the uninstall. With Android 4.x, this archive is created when you install the framework, and placed on your SD card (the installer informs you about its location). With Android 5 and up, you need to fetch the uninstaller (xposed-uninstaller*.zip
) from the official thread again, and flash that via your device´s recovery.
How to use – and What are modules?
Just with the framework installed and activated, you probably won´t notice any changes (except for the reboot having taken a bit longer than usual) – which is nothing to worry about. The framework itself only provides the basement its modules are based upon, exposing new interfaces to the Android OS itself (hence the name „Xposed“). To really see changes, you will need the appropriate modules. Some of those can be found at the Google Play Store (or other app stores of your choice), but the majority is hosted in the Xposed Repository. I´ve picked a few examples to introduce to you further down the page. Before we come to that, a little basic background might be useful – which applies to all those modules.
Modules you have installed are managed in the Modules section of the installer (see screenshot to the right). Going to that section right after you´ve installed the framework most likely presents you with an empty page: not having installed any module, there are none to manage. The Xposed Installer, however, has its own repository integrated for your convenience – so you can browse available modules, install or update them, directly from your device by going to the Download section of the Installer. As you can see in the screenshot to the left, you´re even informed whenever there are updates available (unfortunately only when you open this section; there´s no notification popping up in the notification area as obviously there´s no automatic update check in place). Special hint: some modules are intended for specific Android versions only, or only work with specific ROMs. So make sure to read the details before installing a module!
Once you´ve updated a module, the device needs to be restarted (in my experience, a „Software Restart“ suffices in most cases). If you installed a new module, before restarting the device you must activate it in the Modules section first. This is a security measure to prevent malicious apps of simply installing and running potential harmful modules automatically; while they might still be able to install a module, that wouldn´t cause it to be loaded unless you´ve explicitly enabled it first.
In the Modules section, long-pressing on a module´s entry will open a pop-up allowing you to check for updates, get some app info, or uninstall the module. A short tap on an entry might or might not achieve anything; usually, it opens the corresponding module´s settings, but not all modules have settings you can modify. In that case, you will only see a toast message informing you the module doesn´t have a GUI.
Another general hint: if you need additional details, or have any issue, a good starting place is the Xposed section at XDA. Here announcements are being made, useful information is gathered, and support can be obtained. Before bringing up your issue there, do a little search in existing threads: it might well be someone else brought it up already, and you even might find a solution been posted on it. Besides: new modules are often introduced here as well.
Some example modules
Let me shortly introduce some of the modules I´m using and learned to value:
- Backup All Apps: Developers can decide having their apps opting out of ADB backups. This module simply overrides that, so you can backup them all. Most essential module for me
- DynamicAlarmIcon: Nice to have an alarm icon in your notification area whenever an alarm is set (you have, of course). But how much nicer if that even shows you what time the next alarm is due!
- Bring back the GPS icon: another nice little goodie. I want to see when an app is trying to obtain my location, if I´ve got a fix, etc.
- FakeGApps: As you might know I´m using „Android without Google“ via the microG framework. This one helps me to convince some apps otherwise, so they don´t complain (or break)
- Amplify: Keeps other apps from keeping the device awake for too long, resulting in extended battery live. Supports Tasker – and (especially with the donation version) can be configured flexibly (though presets seem fine).
- XPrivacy: Control your apps´ permissions/privacy-settings (to keep them away from your personal stuff). Very fine-grained. Unlikely you haven´t heard of it
Several other apps bring their modules along, such as Secure Settings. And there are plenty other modules I cannot introduce or even name all here (almost 800 modules are listed in the Xposed Repo alone as of today. You can also have Multi-Window, Pie Control and more. If you´re looking for some introductions of „best-of“ modules (which, of course, are always subjective), I suggest you start with those linked at the bottom of my Xposed Framework Resources.
Other resources
- Official XDA Xposed area: Announcements, Downloads, Xposed Support, and more
- Xposed Repo: Here you can list available modules, download their
.apk
files, find the corresponding support places, and more - IzzyOnDroid Xposed Framework Resources: Selected modules, links, and more. Modules are also listed amongst the other app categories, wherever they fit.
-
Dalvik EXecutable. On Android versions before Lollipop, Android used Dalvik as runtime. Whenever an app was installed, it was „compiled“ for this. The resulting DEX files were placed into the so called „Dalvik Cache“ – and this was what got executed whenever you started an app. Starting with Android 5.0 (Lollipop), Dalvik was replaced by ART. ↩︎
-
Android RunTime. This replaced Dalvik starting with Android 5.0/Lollipop. It still builds upon the
.dex
files, but now apps are compiled to ELF binaries. This takes a bit longer initially, and uses more „disk space“ – but then apps can be executed as native code, which results in increased performance. ↩︎