Flashable Zip Brings Unofficial Xposed Framework to Android 7.1 Nougat
After months upon months of waiting, we’ve finally got Xposed Framework support for Nougat ROMs (albeit unofficially). Thanks to some talented developers over on our very own XDA Forums, you can now install the Xposed Framework on an Android Nougat ROM through a flashable zip.
Up until now, the future for Xposed on Nougat looked a little shaky. Rovo89 – the developer behind the Xposed Framework – provided an update on support for Android Nougat a little more than a week ago. Rovo89 essentially stated that there was still a lot of work to be done in order to get Xposed working properly on Nougat, and that we would just have to be patient.
Thankfully, it looks like we’ve gotten a temporary solution for those of us who have been anxiously waiting for a stopgap measure. The PurifyOS Team grabbed the ART module that developer abforce had been working on (and that was posted about earlier today), and adapted it to be installable on other custom ROMs through a flashable zip (instead of having to be implemented when compiling the ROM).
There are currently three available versions for different platforms, including Xposed SDK25 ARM64, Xposed SDK25 ARM, and Xposed SDK25 x86. The PurifyOS Team has tested this new version of Xposed with a OnePlus 3T running OxygenOS based off of Android 7.1, but it should work on other phones running Android Nougat and users are already reporting that they’ve been able to successfully install it on different ROMs and devices. For instance, a few users on the OnePlus 5 have reported it working (no surprise, given that it runs on the OnePlus 3T just fine), but a user running an AOSP-based ROM for the Samsung Galaxy S6 also reported that it worked for them.
There will be quirks to figure out and not everyone has managed to get it to work so far, with some users experiencing force closes and other oddities. However, even with this being the case, you can still give it a shot if you’ve been waiting for the arrival of Xposed on Nougat ever since the previous version of the Android OS was released. Not all existing Xposed Framework modules will work right off the bat, but some really popular ones such as Amplify are reported to be working.
Be sure to make regular backups and read the thread carefully before venturing in if you are unsure about whether your device or ROM is supported. Finally, make sure to use the “search” function before leaving a duplicate question. Android O might be right around the corner, but as the saying goes, “better late than never.” Plus, a lot of users aren’t going to be seeing Android O on their devices for quite some time, so Xposed should be a nice treat so you don’t feel left behind.
Update: Rovo89’s Response
The original developed behind the Xposed Framework, XDA Senior Recognized Developer rovo89, has been responding on Github with his thoughts on these recent developments.
From my experience, I can tell you that it’s indeed not that hard to get the basics done, but it takes a hell lot of time for the details. It’s like the 80-20 rule, except that it’s more like 95-5 or so.
The hooking approach I have designed for the previous releases is rather stable and can be applied for newer releases as well. I assume you needed most of the time to check all the places where
IsDirect()is called and decide whether they should consider the new method modifier or not (i.e. use parameter
trueor not). If you didn’t do that, you might have missed some places where they have newly introduced such calls. Same for methods like
InstallStubsForMethod(), which needs to operate on the original original method even when they’re called for a hooked method. You’d need to check for more places where this could be relevant. That’s still in the range of days, but if you miss to do it, you might see obscure crashes or misbehavior that are very hard to debug.
Besides that, you took an approach where hooks would only work properly for ROMs which are entirely compiled from scratch. On stock ROMs and even most custom ROMs (that didn’t include your port while building) as well as for any apps the device might have compiled before. So you’d have to start all over again with a wiped device running a special ROM. If not, then optimizations (e.g. inlining) might prevent a method from being called at all, and hence hooks wouldn’t work. The worst thing about this is that the exact behavior would depend on the ROM, or even how the user uses the device (now that apps are compiled based on profiles). Modules would fail randomly and the module developers would be wondering what they did wrong (answer: nothing). If not all of the prerequisites are fulfilled, it’s a pretty unreliable API. Imagine Google published an update where the
OnClickListenerof a button wasn’t called sometimes, unless you compiled your ROM from scratch… For me personally, this is a big limitation.
He goes on:
It doesn’t make sense at all to publish flashable ZIPs with this, as the port is only intended for recompiling a ROM from scratch.
And as I feared, there is not a single warning that this is an incomplete port that will often fail to fulfill the API contract. 😠 That’s bad for developers and users, they should at least know it’s incomplete so they can decide whether they want to support/use it. I would never dare to do something like that without a big fat warning. Actually, as I’m rather perfectionist, I wouldn’t publish an incomplete version at all, reliablity is very important for me.
I just checked my Git log and I had the basic hooking (as in this port) ready in October. Since then, I have worked on removing the limitations. To make it more reliable on pre-compiled ROMs, I could have ported the recompiling part as well, however that’s still not ideal. As explained somewhere above, we have JIT now, which allows us to keep all the optimizations, only invalidating (and possibly recompiling) the methods which are directly affected by hooking. This is quite challenging, as it’s more than just copy & paste. And until this isn’t done, I won’t publish anything. 9 months for that (until now) is really a long time, I know, but hey, it’s my spare time and e.g. due to moving to a new apartment, I couldn’t work on Xposed for several months (!) at all, and had only very limited time otherwise.
We should make it clear that these recent developments aren’t the true “Xposed” that you all know and love, but functionally they allow you to use some Xposed Framework Modules right now on Android Nougat. We won’t fault you for not waiting for the official, more stable, and more compatible version of the Xposed Framework for Android Nougat, but we want to make it clear that this iteration is merely a stopgap measure meant to satiate the needs of some users right now. It is likely not the way Xposed will be handled in the future.
Download Unofficial Xposed Framework for Nougat on the XDA Forums