[OFFICIAL] Xposed for Lollipop/Marshmallow/Nougat/Oreo [v90-beta3, 2018/01/29]

Status
Not open for further replies.
Search This thread

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Framework version 75 adds compatibility with the latest 5.1.1 ROMs (v19 and later) which include a change to app_process. This version should be compatible with both, newer and older 5.1.x ROMs. The change didn't affect 5.0.x. This version also disables the dex2oat watchdog, so especially on older devices with less performance, Xposed might now be working.

Fixing this issue prevented me from gettings started with Marshmallow so far, but I'm on it. My Nexus 9 is running on stock AOSP 6.0 already and the sources are synced to the build server (thanks to XDA for providing it). I assume that integrating the hooking mechanism should work relatively smoothless (although there were some bigger architectural changes). However, there are some new things, e.g. JIT and the optimizing compiler that need more attention to ensure that methods which could potentially be hooked are really called instead of being optimized away.

I can't give any timeline for this, it's done when it's done, and Xposed is not the only thing in my life. That said, donations are always very welcome as a little extra motivation. :)
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Quick status update: I have transferred most of my ART modifications to the 6.0 source code and the few app_process AOSP changes to my binary. It's more difficult than 5.0 - > 5.1 (which was not much more than a fix update) as Google has refactored and reworked the code in many places. So I had to find out where the code has moved and how it works now (and sometimes, this led to cleaner modifications, which is nice).

Recompilation of odex files seems to work fine, but needs more testing. I also didn't disable any ART optimizations yet, which will be necessary to ensure that hooked methods are actually called.

A simple test hook is working fine now, as is booting with the modified ART libraries. However, it's not booting yet due to some kind of stack corruption. I have no idea how difficult it will be to find and fix the root cause and how many more issues I will run into.

So as always, I can't and won't give any ETAs. Just wanted to let you know that I'm on a good way and say thanks for the donations I've received lately.

PS: Marshmallow muffins today, yummy!
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Meanwhile, most things are working fine. My Nexus 9 is booting and running with Xposed enabled. I have fixed the root cause of a couple of crashes which unfortunately needed much time for analysis (with the outcome that three additional lines fix it). There are a few more things I need to test, but I think you can expect a first version later this week. It should be stable enough for daily use, even though not all modules will work out of the box due to the usual amount of changes in AOSP.

Also, due to popular demand, I have added a Bitcoin address to my donation page now.
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Marshmallow!

I have just uploaded version 76 with support for Android 6.0 (Marshmallow). Even though I tested it only on my Nexus 9/arm64, I'm confident that the arm and x86 builds will work fine as well. The Xposed Installer app didn't require any changes, you can still use version 3.0 alpha4.

What else can I say about it? Well, as expected, the upgrade from 5.1 to 6.0 was a much bigger one than from 5.0 to 5.1. Therefore, porting the Xposed-related changes in ART was more complicated, but as Google has done a lot of refactoring, I could simplify some of my own changes as well. Pretty much everything is ported now, except for support for gzipped and encrypted files - let's see if vendors even use them on 6.0.

The only limitations I'm aware of at this time are:
- I have only tested this with SuperSU installed, due to which dm-verity and some SELinux rules are disabled. Especially dm-verity would definitely conflict with the modifications of the system partition.
- Access to preferences files might be blocked by SELinux, and Xposed is currently not able to work around that. (*) Some modules might be affected by this, nevertheless I strongly recommend to keep SELinux enabled and enforcing to keep your device as safe as possible.
- I could not test all Xposed APIs. The system is booting without any error messages from Xposed, but some functions that the framework makes available might still need to be adjusted for Marshmallow.
- Obviously, modules themselves might need to be updated as well due to changes in AOSP. Please be patient and give module developers the time to make the required changes. If you absolutely "cannot live" without module X, don't update to Marshmallow yet.
- Some issues might arise from JIT (disabled by default, even in AOSP) and the "optimizing" compiler (which rewrites apps' code to be more efficient, due to which some calls might simply be skipped). Both of these are new in Marshmallow and might have various consequences in combination with Xposed, from hooks that silently don't work to crashes. However, as it's running stable for me, I decided not to disable them and will instead look into them in more detail if concrete issues are reported.

Three more things:
- I plan to publish a new version for Lollipop (5.0/5.1) within the next days, with backports of some of the changes I did for Marshmallow. This needs some more testing though.
- I know that some vendors seem to have backported the latest 5.1 security fix (see a few posts above) to 5.0, due to which Xposed is no longer working. This should also be fixed with the next version.
- I will push the changes to GitHub soon, also within the next days (once I have made sure they don't break 5.0/5.1).

And now: Have fun flashing Marshmallow and Xposed! Discussions go here.


(*) For developers: Marshmallow now lets apps run with context "u:r:untrusted_app:s0:c512,c768" instead of "u:r:untrusted_app:s0". If the app is run by a secondary user, the level ("c<nnn>,c<nnn>") is different, and system apps (like Settings) don't have such a level at all. The SELinux policy allows access to app data files only when the the level of the file and the process matches exactly, therefore you can no longer access preferences created by a primary user app from apps like Settings or while logged in as secondary user. I do have workarounds for Zygote and system_server, but I can't use them for normal apps in their current state as it might open big security holes.
 
Last edited:

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Some issues might arise from JIT (disabled by default, even in AOSP) and the "optimizing" compiler (which rewrites apps' code to be more efficient, due to which some calls might simply be skipped).

Yeah. I was wondering why I didn't come across any issues at all with the optimizing compiler during development - especially as Xposed Installer relies on certain methods not being optimized away. It turned out that a special kind of optimization wasn't done for debuggable versions of apps - so on my device, with Xposed Installer installed via Eclipse, everything was fine, but when you have the release build, some hooks are ineffective because the method is never really called, so the active Xposed version wasn't detected properly...

That's why I had to upload a new version 77 which disables the method inliner for the optimizing compiler as well, just like it was for the normal ("quick") compiler already. It will also trigger the recompilation of all oat files, so the first boot will take longer again.
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
As promised, I have just uploaded version 78. It contains:
- [5.0 only] Bootloop on ROMs where the vendor has merged a recent security fix from 5.1
- [5.0/5.1 only] Backports of a few changes on Xposed that I had initially done for 6.0
- [6.0 only] Fix XModuleResources.createInstance() API method
- Fix for the invokeOriginalMethod() API method

Now, the 5.0, 5.1 and 6.0 ZIPs are in sync again. In the future, I plan to release ZIPs for all three Android versions at the same time again - even in case the changes affect only one version. I think that's better than having to keep track of the latest release per version. This time was an exception due to the backports that I needed to verify.

The source code is also published on GitHub now.
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
In version 79, I have fixed many crashes and bootloops that were reported on GitHub. It's hard to say which devices and ROMs profit from the changes. Affected devices mentioned in the issues were mainly HTC and LG, plus any devices which have activated the compiler filter "everything" for ART.

Background:
The reason for these issues is in pretty much all cases that AOSP can't handle so called "quickened" instructions like "invoke-virtual-quick". They're the result of optimizations when the ROM was compiled, and usually just need to be executable by the runtime. However, as Xposed needs to recompile the whole ROM to disable a few optimizations that would prevent hooks from being called, these instructions need to be understood by the compiler as well, which isn't always the case. It did get better in Android 6.0 due to beginning JIT support, so I could port several changes to 5.0 and 5.1 (which isn't as easy as it sounds). But even on 6.0, several fixes were required. Unfortunately, debugging the issues to find those fixes often takes many hours or even days, hence the rather long time between v78 and v79.

More issues?
I hope that by now, most of these issues should be solved. If you still come across any bootloops - even without any active modules - please open an issue on GitHub. You must include a logcat of the failing boot attempt, otherwise I can't help you. My recommendation: Clear Dalvik cache, restart device, execute "adb logcat -v time > logcat.txt" as early as possible, wait a few minutes, press Ctrl+C.

Android 6.0.1:
Additionally, I have merged the AOSP changes from 6.0.0 to 6.0.1. They're just a few fixes, so the SDK23 ZIP works on any 6.0.x ROM.

Genymotion:
The latest version of Genymotion emulator contains improved flashing scripts based on my GenyFlash project, allowing you to flash recovery ZIPs properly. Now you can simply drag & drop the Xposed Installer APK and then the x86 framework ZIPs from the first post onto the window, without the extra step of flashing GenyFlash. Due to the great boot speed and overall performance, module development becomes much more efficient (and no, they don't sponsor me, I really just like it).

Two final statements:
- Making Xposed "systemless" (i.e. work without modifying the /system partition) should be generally possible. However, it will certainly be much effort, especially due to the high diversity of devices. I follow the process of @Chainfire's systemless SuperSU experiment to see how feasible it is. Maybe once this approach has become more mature, it can be re-used by other projects such as Xposed. I'd want to avoid incorporating the whole kernel modification stuff though - if there was some kind of init.d-like interface that allows other projects to plug in and execute some commands at very early boot time (e.g. to mount a custom libart.so over the original one), that would be great. So much for wishful thinking - currently, I'm not working on this.

- It seems that some vendors have ported a change that was originally made in 5.1 back to 4.4 (KitKat). Xposed currently doesn't work with such ROMs. Why isn't this fixed yet? Well, I have completely restructured the source code and installation procedures for ART on Lollipop. Even though I kept Dalvik in mind, it will still require much more work and testing. Therefore, I'm not able to release pre-Lollipop files at the moment and due to the focus on Lollipop/Marshmallow, I don't think this will change for the next weeks or maybe even months.
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Version 80:
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
After a long time with mainly bug fixes, version 81 focuses on improvements for developers:
  • There is a proper API now. Previously, I basically published the sources of XposedBridge.jar, which included many internal classes/methods that modules shouldn't use. Hiding them makes it easier to find the correct methods to use and also makes it easier for me to change implementation details.
  • The API is published on Bintray/JCenter, so it's easy to use, especially with Gradle/Android Studio. Full explanations here: https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API
  • 100% of the API are documented with Javadoc now: http://api.xposed.info/

Apart from that, downloads have moved to http://dl-xda.xposed.info/framework/ and are GPG-signed now. You can verify them against this key (fingerprint: 0DC8 2B3E B1C4 6D48 33B4 C434 E82F 0871 7235 F333). That's actually the master key, the files are signed with subkey 852109AA.

There are no real changes for end-users in this release, nevertheless I would recommend that at least developers test their modules with it.
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
With version 82, compatiblity with Huawei devices is improved, see https://github.com/rovo89/Xposed/issues/72.

Note that there's still an incompatiblity with their theming engine. You can either go to the Xposed Installer settings and disable the Xposed resource APIs (with the effect that some modules won't be loaded), or you have to disable their theming engine (obviously leading to theme limitations) by setting "ro.config.hwtheme" and "ro.config.hw_theme" to "0" in /system/build.prop. See also: http://xdaforums.com/android/general/guide-workaround-running-xposed-t3338765/
 
Last edited:

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Version 84:
  • Added a warning in the Xposed log if a module isn't compiled correctly, i.e. the APK includes the Xposed API classes instead of just referencing them. Developers, see https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API for how to do it correctly.
  • 6.0 only: Added support for LG's encrypted apps, fixing crashes of their weather app/service.
  • 6.0 only: Fixed crashes in Yandex apps, which were caused by an obviously unfinished AOSP commit.
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
There's currently some server maintenance on repo.xposed.info. No need to panic, it should work again within one hour. Most download links should still be working as they're hosted on a different server sponsored by XDA (thanks!!!).
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Version 85:
  • Fixed frequent boot freezes, especially with modules that access many files (details)
  • Built-in way to get a full logcat (details)
  • Crashes not related to Xposed/ART are no longer written to the normal Xposed logs
  • On encrypted devices with boot password, the password prompt is now shown quicker
  • Warning for developers to disable "Instant Run" in Android Studio, otherwise the module can't be loaded
  • 6.0 only: Cherry-picked some ART commit included in CyanogenMod and other ROMs
  • 6.0 only: Forced clearing Dalvik cache when upgrading from versions before 85 (would have been necessary for 84 and might have caused some boot loops)

I have also created a wiki page with detailed information how bugs should be reported: https://github.com/rovo89/XposedBridge/wiki/Bugs

Finally, a word to all module developers: In v84, I added a warning when a module's APK includes the Xposed API classes instead of just referencing them. I have also sent an email to the developers of all modules I could identify. With v86, I will turn the warning into an error and prevent the module from loading, as it could causes strange issues otherwise. Please update your module as soon as possible.
 
Last edited:

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Version 86:
  • More compatiblity with ROMs that use a Resources subclass for e.g. theming, like most Huawei stock ROMs (*)
  • Incorrectly compiled modules are now rejected, the warning which started to appear with v84 is now an error
  • A bit of general cleanup and minor fixes

(*) In the Xposed logs, it would usually say "XyzResources doesn't extend XResources" in such cases.
If you had to select "Disable resource hooks" in Xposed Installer in the past, it's now worth to try again without this workaround.
On Huawei devices, Xposed should now work with and without their theming engine enabled.


Next step (planned for the next version): Official systemless Xposed for Marshmallow. I have already started working on that, but I don't have much time and making something robust takes a while.
Note that the systemless installation will require SuperSU 2.76 or higher. That might be considered a disadvantage compared to the unofficial versions, however I think that it's the better way. @Chainfire put a lot of effort into developing and testing a solution that works reliably on virtually every device. Whenever new devices and Android versions pop up, he's fast at making SuperSU compatible. I think it totally makes sense to build upon those achievements instead of maintaining a fork of them or even reinventing the wheel, which could in the worst case even cause conflicts. I'll rather spend that time focusing on Xposed development itself, not on dealing with all kinds of different bootloaders etc.
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
The repository (repo.xposed.info) is currently down because my provider is temporarily moving it to a different server. They said the load is too high, but unfortunately failed to provide any details so far. It's also been six hours since they have started the move, no idea why it's taking that long and when it will be finished.

Unfortunately, there's nothing I can do at the moment, so please be patient.

UPDATE: Another six hours later, the site is finally back again. Expect another downtime in a few days though when it's moved back...
 
Last edited:

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
I have uploaded a new official installer (version 3.1) in the first post.
This version is based on @DVDandroid's fork. Special thanks to him and the other contributors for their work! :good:

Features:
  • Material Design
  • Download the correct framework ZIP for your architecture/Android version
  • Install/uninstall Xposed directly from the app, no custom recovery required (but obviously you must still make sure that you can reflash your ROM in case something goes wrong!)
  • Many changes under the hood for better stability, compatiblity and code quality

Note that this version is not on repo.xposed.info for the same reason 3.0 wasn't there: It would show an update notification to all users, including those who are still on ICS/JB/KK, for which I don't have framework ZIPs (yet).
Unfortunately, working on the installer required much more effort and time than I had expected. Therefore, no official systemless for now. :( Instead, I'll target Nougat next. :victory:
 

rovo89

Senior Recognized Developer
Jan 4, 2012
2,585
81,406
Current status for Nougat: Hooks are generally working now. However, they're still unreliable for inlined methods and when JIT is used (which is often the case). I had give a few technical insights here. I'm currently thinking about the different situations that need to be handled and I create unit tests for them. Then I need to fix those which are failing or even crashing the device - ideally without recompiling the whole ROM like in previous versions. Not sure if the latter is possible though.
 
Status
Not open for further replies.

Top Liked Posts

  • There are no posts matching your filters.
  • 11508
    Note: This thread is here mostly for historical purposes. While Xposed is supported in various forms [EdXposed and LSPosed], developent on the Xposed primary app has completed. Xposed framework compatible modules are still in active development and supported by their respective developers.

    This is the announcement thread for Xposed for Lollipop, Marshmallow, Nougat and Oreo. I'll post all relevant news here, so subscribe to it if you'd like to stay informed.

    You can find a list with Q&A about Lollipop support on the XDA Portal. Please read it, you will find many answers there. :) Also see this article with much background information on new stuff for Nougat.

    Please install it only if you're willing to take the risk of boot loops. Just because it's working fine and stable for me doesn't mean it will work for everyone the same way. ;)

    Downloads:
    XposedInstaller_*.apk
    from this thread: Must be installed to manage installed modules, the framework won't work without it.

    xposed*.zip from https://dl-xda.xposed.info/framework/: Must be flashed with a custom recovery (e.g. TWRP) to install the framework.
    SDK21 is Android 5.0 (Lollipop), SDK22 is Android 5.1 (also Lollipop) and SDK23 is Android 6.0 (Marshmallow).
    For Nougat, SDK24 is Android 7.0 and SDK25 is Android 7.1.
    For Oreo, SDK26 is Android 8.0 and SDK27 is Android 8.1.
    I only support the latest Xposed version per Android release!

    xposed-uninstaller*.zip from https://dl-xda.xposed.info/framework/: Can be flashed with a custom recovery (e.g. TWRP) to uninstall the framework.

    The small .asc files are GPG signatures of the .zip files. You can verify them against this key (fingerprint: 0DC8 2B3E B1C4 6D48 33B4 C434 E82F 0871 7235 F333). That's actually the master key, the files are signed with subkey 852109AA.

    Known issues:
    - Before Nougat: Bootloops on Samsung stock ROMs. That's due to Samsung's changes to ART. There are unofficial builds that work around this by deodexing and adjusting the ROM.
    - Sony seems to have shipped some ROMs with corrupted services.odex (the embedded .dex is invalid). Those ROMs will bootloop with a "Fatal signal 6" or "No pending exception expected: java.lang.ArrayIndexOutOfBoundsException" error, which I unfortunately cannot fix (see https://github.com/rovo89/Xposed/issues/64)
    - Dell ships (at least) their Venue 8 7840 with a non-standard version of ART that is somewhere between 5.1 and 6.0 which obviously isn't supported by Xposed (see https://github.com/rovo89/Xposed/issues/77)

    For discussions, please use the discussion threads (Lollipop / Marshmallow / Nougat / Oreo) or another matching one in this subforum.
    4162
    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. That's net (working) time, not real time. If I worked on Xposed 24 hours a day, that might be done within a week or two. But, in the last year or so, my "time for Xposed stuff" was about 5 hours a week, sometimes more and sometimes less. You can do the math yourselves... There are just so many other (non-technical) things that I need or want to do. If you substract the time it took me to build the new installer version, move the repo to a new server and restore compatibility with the Nov 2016 security patches, that's even less time for new stuff.

    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. :)
    2147
    Current status (Feb 19):

    The most important issue seems to be the incompatibility with Samsung stock ROMs, especially because it's leading to boot loops. I have been working hard on fixing this in the days since the release, however it's not just a single spot that needs fixing. Thanks to GermainZ for testing and providing good log files! So far, I have detected the following issues:
    - Enhanced .oat file format: Samsung has added a "TypeLookupTable", probably for performance reasons. The table itself will be ignored by Xposed, but it also means that the file format is slightly different. I have finally understood what they have done and added some logic to skip the referenes to this table.
    - Different size of the String class: They have added a clear() method, which is unusual as strings are usually immutable. As this class is one of few that have special support in native code, I had to add one entry to the virtual table of the class.
    - Additional fields in DexCache class: Offsets to some fields are different due to this and need to be handled in native code (as this another central class with native parts directly implemented in ART).
    - Verifier rejects ViewDebug class: Doesn't seem to be overly critical to me, yet to be tested whether it's working fine with original libraries.
    - Implementation missing for some native methods: Some methods in the reflection classes have been implemented in native code instead of Java. This means I will have to implement them as well.

    The changes done by Samsung are bigger than I expected, especially given that ART is very complex and mostly undocumented. Anyway, I still think that once these issues have been overcome, it's better to replace the libaries than trying to manipulate data structures and behavior from "outside" (app_process). Think about it: If they have done such big changes, it's very likely that offsets in these data structures are different from AOSP and would need special handling as well.


    It would of course be helpful to have an uninstaller ZIP in case you run into a bootloop. I didn't have time for that yet, but maybe someone can build an initial version that basically reverses the steps of the installer ZIP. For the ART libraries, that should be rather easy. You might want to stay away from moving app_process32 back in case you have SuperSU installed. It will need a special procedure to ensure you don't break either part or even your ROM.


    There are other issues for sure, for example it seems that some methods cannot be hooked. That's something that needs more investigation, but I would like to fix the more critical issue like the ones for Samsung first.


    That said, I won't be able to work on Xposed for the next days, definitely not before Monday. Keep in mind that this isn't my fulltime job and that an alpha phase might take some time. It would be illusionary to assume that we reach a stable state after a few days, with all the changes that have been done.
    2120
    As you have probably noticed, more than 2,000 posts have been made in the original thread about Xposed on Lollipop. I'm really overhelmed by all your feedback! Also many thanks to those people who have donated already, it's great to see how much Xposed means to you.

    Although so much discussion and helping each other is great, it's hard for anyone (including me) to follow. Hence, I have decided to create this thread were only I (and possibly the XDA moderators) will give some updates. This will make it easier for me to inform you about the current status, bugs I know about and so on. Feel free to subscribe to it or simply check from time to time. I'm not sure yet about the best way for me to get a consolidated overview of existing issues that have been confirmed by several people and ideally already have a sufficient information (like logcats, clear description of the error, ...) attached, but I hope we can work something out.
    1838
    Finally! I know you've been waiting for official Xposed for Nougat for a long time, and here it is. You'll find the download links in the usual place (see first post). Make sure to also use Xposed Installer 3.1.2 (update is also in first post).

    If you'd like to know what exactly you've been waiting for, check out this XDA article. Besides much background information on Xposed and its history, it includes a detailed statement by myself about what you'll get on top of the unofficial versions. You can find that statement right above the "Conclusion" headline, click the box to show it.

    Note that I've also released new binaries for Marshmallow and Lollipop, although the changes are very minor. Mostly, they ensure that all releases are in sync.

    I'd like to thank @wanam for testing and helping to fix the remaining bugs. He also tested it on the Samsung GS7. Also thanks to XDA for their continued support and for providing the infrastructure. And finally, thanks to you for being patient with me, coming up and implementing the new concept really took a long time (that I didn't always have).

    Now go ahead and try it out. :) For any feedback and discussions, please use the new discussion thread.