Rovo89: Update on Development of Xposed for Nougat
The reason why I personally continue to use Android 6.0 Marshmallow on my OnePlus 3, despite OnePlus pushing out the Nougat update for the phone to stable channels, is the presence of Xposed. The Xposed framework and the module ecosystem forms a crucial part of the Android experience that I prefer — to the point where I am willing to forego the latest OS update from the OEM just to savor this sweet fruit.
While Xposed for Nougat is taking a while to come along and some of us do not mind waiting further, it had been a while since we last heard on the progress of the project.
“It seems that more and more people get nervous about whether (and when) there will be Xposed for Nougat or not, so I felt I should say something.
Why does it take that long? Because with every release, I try to ensure that Xposed integrates nicely with the improvements in the new ART version. The step from Lollipop to Marshmallow wasn’t huge. It was an evolution, some things even made it possible to integrate Xposed in a more elegant way. On the whole, it was mainly careful porting than rather innovating.
With Nougat, something fundamental has changed. If you’re using Nougat already, you’ll have noticed that installations are much faster now. That’s because APKs aren’t compiled immediately (AOT), but start in (slower) interpreting mode. Sounds bad, but they have enabled JIT, which will quickly compile those methods that are used very often. That will restore the well-known and constantly improving performance of native code. Besides that, ART keeps a list of these frequently used methods (“profiling”). When the device is idle, it finally does the AOT compilation, but based on the profiling data. After that, you get the great performance right after starting the app. JIT is still waiting in case the usage patterns change, and I think it will also adjust the profile and improve the AOT compilation.
That results in various different compilation states and more complexity. Besides that, there were many issues in the past caused by Xposed’s need to recompile the whole ROM and all apps: It sometimes caused boot loops when the odex files were too heavily pre-optimized, it blocked quite some storage space to store the recompiled files, and I needed to disable some optimizations like inlining and direct pointer calls. I hope that I can make use of the JIT compiler to avoid that in Nougat. If Xposed knew from where a method is called, it could invalidate the callers’ compiled code, so that they would temporarily use the interpreter. If they’re important enough, JIT will recompile them.
I have already done a lot of research and experiments for this and I’m currently trying to implement this. But as you can imagine, all of that is much effort and can easily take hundreds of hours…..” <continued in forum post>
The main issue as usually is in hobbyist projects, is the allocation of time, and we understand where rovo89 is coming from. Even as the Xposed project currently stands, it includes months of efforts from various developers to help make it possible for the end user to enjoy in such a simple and distributable manner.
As they say, Rome was not built in a day, but the bricks were laid every hour:
“So yes, I’m still working on Nougat support, whenever my free time allows it, but I don’t have any idea when it will be done. Once it’s done, you’ll know.”
Android isn’t perfect and Xposed is that what allows us to fix what the original developer won’t. The wait for the ultimate Android fix continues on the newest OS, and we wish rovo89 the best of luck from our end.
You can read the full statement in the forum post. Are you waiting for Xposed too? Let us know in the comments!