Xposed for Nougat & abforce Submodule Explained, and Why It’s Worth Waiting for rovo89’s Full Release
The Xposed framework was — and still is — a major way to customize your Android device, compatible with pretty much all devices, letting you easily install modules to tweak virtually any detail.
Want to get all the features a custom ROM offers without having to flash one? GravityBox or XTouchwiz will do that. Want to tweak certain settings on a per-app basis, like changing a specific app’s DPI? App Settings has you covered. Wish an application’s developers thought of adding a specific feature, like Google letting you personalize Hangouts or Facebook allowing you to download Instagram posts you like? Well, you don’t need to because Xposed gives developers the power to modify pretty much anything they want, be it a system-wide feature that would require a custom ROM, or a tweak for a specific application.
The Xposed framework comes with a major advantage for developers, which is the ease of development (compared to having to compile AOSP for ROM tweaks, or having to edit Smali code). It also brings a huge advantage for users: convenience, as it no longer forces them to find and flash the ROM that provides every single feature they’re looking for (instead, they can mix and match independent modules) on top of their target balance of stability and performance. It also makes tweaking applications much easier as there’s no need to deal with different signatures, which as a result would require users to uninstall the original version or jump through certain hoops when the application checks its signature (something modified YouTube clients deal with, for instance).
The only problem? Due to its nature and the amount of free time Xposed’s developer (our own Senior Recognized Developer, rovo89) has, it often lags behind Android releases. It took about four months to get updated to support Lollipop, and it’s taking about a year to come to Nougat. This isn’t as bad as it may seem if you think about how many Android users are actually on Nougat (around 13.5%, though keep in mind Android enthusiasts, Xposed’s target audience, are also more likely to be on Nougat). However, it can still be quite annoying not to be able to use your favorite Xposed modules and have the latest and greatest Android version at the same time.
With the source code of the Xposed framework being available (at least for stable, released versions), developer abforce decided to get his hands dirty and see if he could port some of rovo89’s modifications to Nougat. Opting for a different and simpler approach, abforce essentially adapted the part of Xposed that actually does the magic once installed, and made it possible to include it when compiling your own ROM (after that, other workarounds surfaced). This approach is arguably very different as it ignores one of Xposed’s core advantages, which is being available to everyone with ease. However, all progress is welcome and multiple heads tackling a task can be advantageous and offer new insight. The main issue, as we see it, is the misinformation surrounding this development (spread by some other “developers” and some blogs), as well as some of the reactions by the community. Hopefully, this article will make the whole picture clearer.
How does Xposed work?
First of all, in order to understand the work that went — and still goes — into the official Xposed framework as well as abforce’s version, we need to look at how the framework works. While the framework itself is only part of the project, we usually mean both the framework and installer as the framework loses many of its advantages without the universal installer, which a lot of work goes into as well.
The power of Xposed comes from a simple concept: any method can be “hooked” (methods being the small parts that make up any program) to have an Xposed module’s code execute before, after or instead of it. Let’s take a simple example: assume Instagram uses a method called “showMenuOptions” when you click the menu button, and that method handles showing you the “Report” and “Share” buttons. By creating an Xposed module, you can modify that method to add an additional button to download the image instead of sharing it, for example. The modifications can range from simple tweaks (e.g. Play Store Changelog) to major overhauls (such as GravityBox, which aims to provide all the features a custom ROM would have)!
That makes Xposed powerful, but it’s only part of the equation. The other parts are versatility — or actually being able to use Xposed on pretty much any device out there (with a supported Android version), and ease of use. All users have to do is grab the installer, which does its magic and patches their system dynamically to integrate Xposed. To apply a module, you just need to install it, enable it and reboot. No fuss required, no need to flash a custom ROM (especially when custom ROMs aren’t always a viable choice), no need to uninstall an APK to install another signed with a different signature. All you need is root (you absolutely can have a custom ROM and that makes sense a lot of the time; but while Xposed can provide most of the functionality a custom ROM can provide, it also goes beyond that).
Behind this simplicity goes a lot of work, though:
- For module developers, the provided API must be stable and guaranteed to work. The Xposed framework can’t randomly fail with certain ROM and/or hook combinations (except in exceptional cases). In other words, if a user is having a problem, that problem should either be the user’s fault (for not installing/enabling something correctly) or the module developer’s fault (for having bugs in the module). But it should be nearly certain that the framework itself is working as intended, and isn’t the source of the errors that would leave the users frustrated and developers confused.
- For users, the framework must be easy to install on their device and ROM, no matter if they have a Samsung running the latest version of TouchWiz or a Nexus with LineageOS installed. The Xposed installer handles all that behind the scenes. A lot of work must go into this to test the installer and framework on a variety of devices and ROM combinations. Errors are found, often due to differing implementations by OEMs, and must be fixed to ensure reliability for all users.
- Major Android revisions can sometimes bring major changes, which requires rethinking parts of the framework’s architecture to adapt to those changes. Sometimes, additional opportunities also surface with newer versions, requiring some extra time to have a better product. When ART was first introduced, for example, having Xposed disabled certain optimizations so that hooking can work correctly. In Nougat’s case, the just-in-time (JIT) compiler brings an opportunity to keep those optimizations.
A lot of the above work goes into minor details, where most of the framework is functioning as intended but the inconsistencies and minor issues would make it a gamble to use for users, and a support and development nightmare for module developers. The released product, however, aims to be usable by all and without surprises. There are some exceptions, of course, as some OEMs’ changes require more effort to adapt to, but those are minor and the vast majority of users (and developers) get to enjoy a stable and reliable Xposed experience. Any encountered exceptions get documented with clear disclaimers so that no one is surprised.
With the above in mind, rovo89’s vision for Xposed is to be a stable solution that provides a reliable and easy to use contract for users and developers. His philosophy, though you may disagree with it, is simple and understandable: a product should be released when it’s ready to be used as intended, as releasing it before leads to more trouble than benefits.
abforce’s Xposed ART submodule for Nougat
We’re reluctant to call abforce’s work a “port” or an “unofficial Xposed” as that’s inaccurate and misleading. As we’ve seen, Xposed has two major components:
- The core of the Xposed framework itself, which handles the magic of hooking methods.
- The Xposed installer, which ensures the framework is easy to install on all devices correctly.
What abforce did was port rovo89’s Marshmallow code on the first part (the Xposed framework only) to Nougat, in a way that would require the changes to be baked while compiling the custom ROM. In addition to that, many minor (but important) parts of the framework aren’t fully adapted to Nougat. As such, behavior can be inconsistent and while it mostly works (though not for everyone), it’s not reliable. For module developers and users, relying on an incomplete and inconsistent implementation would just provide a bad experience for all parties involved, with some modules not working at all or causing the device not to boot. While many users may be okay with having something rather than nothing, the developers’ point of view is still perfectly understandable (especially if you keep in mind that disclaimers don’t stop bogus support questions and whining).
(In addition to the above two major points, we’ll also be expecting further changes to the final, official Xposed framework to take advantage of changes introduced in Nougat.)
It should be noted that abforce did an excellent job when most were content with simply talking, but his work is far from the full Xposed experience and no developer or blog is claiming otherwise (and definitely not abforce; again, we have nothing but respect towards all the actual developers who are putting real work and effort into this). In fact, as we’ll touch upon in a bit, some of the community’s response (be it users or “developers”) is the only sour part in this chain of developments.
Let’s cut through the chase and get straight to the point: any community has bad elements and aspects. With as big a community as Android enthusiasts, the bad elements may seem like a huge portion when they’re but a small part (sizeable, but still minor in relative terms). Without sugar-coating it, though, a lot of the community’s response towards the development of Xposed for Nougat has been extremely childish, inconsiderate or irresponsible.
The first major issue has been the condescending attitude shown by many about the “death of Xposed” because it’s taking too long to be released for Nougat. This is despite rovo89’s updates and assurances, and despite pretty much the exact scenario happening with Lollipop when the initial version of ART was introduced. It’s fine to stop using Xposed, but it’s not to insult anyone’s capability or attack others for having a different philosophy or not ensuring your flashing needs are met immediately. This is even more true for an entirely free project, where the developer has expressed his development methodology and reasons behind it.
Another issue with the community’s response has been misunderstanding the nature of abforce’s work, with many hailing it as the new Xposed or advertising it as a port for Nougat. A major problem with this has been with “developers” rushing to offer flashable versions without understanding (or caring about) the drawbacks, since no disclaimers were offered at all in some threads, with some even going so far as to credit abforce and not rovo89 (who’s behind the vast majority of the work on Xposed) and other contributors.
As a final point, we feel we should bring up rovo89’s development philosophy again. With many vocal users claiming that having the latest changes being open-source would be beneficial. While this sounds good in theory, it’s not as easy in practice especially if we consider rovo89’s explanation:
[…] I believe that just pushing out the current state wouldn’t help the project. We would maybe see “some” release really fast by people who compile the code, see that it appears to be working fine and publish it as “their port”, despite the issues and things to do that they wouldn’t be aware of. So call me selfish, but I wouldn’t want to see such a half-finished release. [Source]
Which has actually proven to be a fairly good prediction of the current situation, with several “developers” applying abforce’s changes and offering a flashable ZIP with minimal or no warnings, incomplete credits, all while asking for donations.
We hope these explanations cleared up some of your doubts and addressed possible misconceptions you might have had. Xposed has been an amazing project that has reached a huge portion of our enthusiast and flashaholic community, and Xposed for Nougat should be another gigantic milestone full of opportunities. With modules like GravityBox already offering Nougat support, rovo89’s finished project will return to a host of options.
Are you excited for Xposed on your Nougat ROM? Let us know in the comments!