Xposed Framework needs no introduction to XDA readers. When asked about the things our community hates most about Lollipop, the single highest voted comment in the discussion was that it broke support for Xposed. In fact, many forum members have even refused to update to Lollipop specifically for this reason. But that all changes now, as the highly anticipated Xposed Framework has finally arrived for Android Lollipop.

If you’re not already familiar with Xposed, simply put, it is a godsend to the modding community. Xposed requires no flashing of any ROMs, but brings tons of customization and tweaks that users can install like apps on rooted devices. It is incredibly simple to use and with limited risk. And now, all Android enthusiasts on Lollipop can enjoy the benefits of this fantastic project on their devices. Grab your download and get to modding!

Download Xposed Framwork for Android Lollipop here.

rovo89 was also kind enough to provide us with a Q&A for the latest project. You can find answers to all your questions about the project below.

Why did it take so long? ART has been published more than a year ago!

First of all – many people keep asking for ART support. Lollipop has far more changes than that, such as even stricter SELinux policies, 64-bit ROMs and architecture changes that you would expect from a major release. And of course ART itself is constantly being improved; there are big differences between ART for KitKat and ART for Lollipop.

So one reason is the big complexity, which required many, many hours of work for research, development and testing.

Another reason is that there are other things in my life than Xposed, so there have been weeks or even months in which I have hardly even looked at the code at all.

Do we need to rewrite all the modules?

No, the Xposed API is pretty much unchanged. Xposed abstracts all the details, so modules don’t need to care whether they’re running on Dalvik or ART. Many modules will actually work without any changes, especially those which modify the behavior of user apps. Modules targeting the system behavior might need to be adjusted to the new Android framework code, which isn’t caused by ART, but simply by architecture and code changes that happen between any two Android releases. The most significant one is that the code for system services has been moved to a separate file. For most of the affected modules, this can be solved by a little refactoring (moving code to a different place).

Is it actually working?

Yes! At least for me, it’s working fine on my daily device (Nexus 5 on CM12) and also on my Nexus 9 (paid by XDA – thanks!). The phone is stable as usual and apps are working fine. And obviously, the modules and their hooks/resource replacements are working fine as well, otherwise there would be no point in releasing something.

But then why is it an alpha version?

Because there have been huge changes since the last stable release that need to be tested by people who know how to use a recovery, escape from boot loops and report bugs properly. I strongly advise newbies to wait until Xposed has been tested by enough experienced people.

There are also some edge-cases which haven’t been tested yet, such as hooking JNI (native) methods and methods that are being executed at the time of hooking them.

I want to install it. Now! What do I have to do?

Make sure that you’ve read my words above and you’re familiar with your phone’s internals. Obviously, you need to be on a Lollipop ROM and have a good backup of your data. For now, I will only publish the ARMv7 version. 64-bit is more complex, so let’s try the “easy” variant first.

For now, the installation has to be performed manually in a custom recovery. Flashing the zip file will install:

app_process32_xposed and some symlinks

libexposed_art.so

libart.so and some related binaries + libraries (based on 5.0.2, enhanced with support for hooking etc.)

XposedBridge.jar (now stored in /system/framework)

Backups of existing files will be created automatically and could be restored later.

It doesn’t work/I don’t like it! How can I uninstall it?

The easiest way is to restore a backup or flash the system partition. A zip file for uninstallation has yet to be created.

Why do you replace ART files on my device? That’s more invasive than on Dalvik, will cause significant performance issues and will be unstable!

I have written down some reasons on GitHub. Yes, it’s more invasive, so I have tried to avoid it for a long time, but from a technical and support-oriented point of view, I think it’s the better option.

Less performance than original ART? Probably, as I had to disable some optimizations to make certain kinds of hooks possible. However, this affects only a fraction of all methods and even for those, the performance loss is certainly not significant or noticeable, if even measureable. There are still thousands of other optimizations performed by ART, and I tried to disable as few as possible while providing as much flexibility as possible.

Stability is fine as mentioned above. Compared to the approach I used for Dalvik (modifying the runtime’s internal data structures from app_process), I’m even pretty sure that replacing the libraries completely is a much more reliable way. I could integrate my changes into existing code cleanly and reuse related functions, whereas many hacks and assumptions would be needed for other ways.

Will you finally make the source code public?

Sure, you will find it on GitHub very soon after the release of the alpha version, in a separate branch for now.

Does this mean that older Android version are no longer supported now?

No! The new code compiles on all 4.x versions of Android, and just need to be tested before a unified release. But first, I need to be sure that it’s working fine for Lollipop. Possibly, ART support could be backported to KitKat, but that’s of less priority.

How can I thank you for your work?

Many people have asked for ways to donate a few bucks, so I have set up a donation page now.

How much do I need to donate for you to add feature X or a module that does Y?

That’s not donating, that’s paying somebody in expectation of future work. I’m not interested in freelancer jobs.