[Magisk] topjohnwu:
2017.7.11 Magisk v13.1

Wow, what a journey! The last stable release is in April, nearly 3 months ago! As stated before, even though the functionality is the same as previous "script based" releases (anything prior to v13), the underlying mechanisms are actually significantly different from all aspects. You can consider this as a complete different project from previous versions lol. Here I will just do some announcements instead of going through all changes. The changelog now shows proper v12.0 -> v13.1 changes instead of changes for each beta iteration. Those interested in the actual changes can take a look there.

Completely Drop Support for Older Versions

Due to the massive difference between v12.0 and v13.X+, older "script based" versions were and will be never, ever put into consideration in development. There will be a lot more things that is no longer backwards compatible, and staying on an old release will let you miss out a tons of fixes and improvements, so please be sure to upgrade to the latest version.

New Magisk Module Template v4

Finally, the module template received an update! The new upgrade brings proper Android O handling, and many fixes for flashing in all kinds of environment. New changes comes with new things that need to be noted. You will find out that the commands in the flash script are now greatly reduced, with only the essentials and function calls remain. The script now relies on the main binary /data/magisk/magisk, and the shell script function collection /data/magisk/util_functions.sh, both come along with a proper Magisk v13.1+ installation. These changes are due to the fact that a lot of the ext4 image handling are now offloaded to the magisk binary, since there is no real way to properly handle these operations aside from using my own written tools, one factor being the removal of the bundled busybox. Another major advantage is that since the actual logic and operations are not bundled in the template itself but rather included in Magisk, once a bug or improvement is found, the changes can simply be pushed through a Magisk update instead of updating the template, which requires module developers to migrate to new code. It is similar concept to what "shared libraries" are doing.

However, due to these changes, Magisk Modules are no longer flashable in custom recoveries without /data access. You have to either flash in proper configured custom recovery with /data access, or flash within Magisk Manager (the scripts and merge handling are greatly improved compared to old versions, worth trying!)

The next release (not this one) of Magisk Manager will filter out all modules on the repo with template version lower than v4, developers please find some time to upgrade your modules, I believe it will only take you a few minutes!

Module Repo Submission

Many could have questioned why I haven't accepted a single module into the repo for quite a while, not because I don't care about the community (I gave up Play Store for this, how come will I abandon it), the reason is because I have been working hard to finalize Magisk, which only after then I can decide the final format of the template. With the new Magisk comes to stable, and a lot of thoughts have been into, things should rarely change, at least not significantly, and as a result module submissions will start get accepted once they are adapted to template v4.

This summer vacation I have an internship, so things are different compared to last summer when Magisk was born from my endless and sleepless development - I have proper work to do now lol. Also due to the fact that it's going to be my last year in university, I need to start preparing for applying graduate school; the free time will be very limited. I will focus more on maintaining the online repo, and slow down the development of Magisk, which means submission should be addressed in a timely manner.

Play Store Device Certification

There is a new thing within Play Store called "Device Certification" (you can check through settings). Currently I cannot find how it works, it always shows "Certified" on my Nexus 5X on O preview and Galaxy Note 10.1 2014 running LineageOS 14.1, however no matter what I do, my HTC U11 always shows "Uncertified". Currently this isn't a big deal though, I won't spend time investigate this.

Some Miscellaneous Stuff

Some might have noticed, the scripts under /magisk/.core/post-fs-data.d and /magisk/.core/service.d requires execution permissions to be executed, this is done intentionally as some developers rely on the file permissions to toggle scripts. post-fs-data.sh and service.sh in modules, on the other hand, doesn't have this requirement. These scripts should be toggled along with the module, not based on the permission of the file itself.

On Android O, setting system props through property_service (the setprop command, and resetprop by default) in the post-fs-data stage will cause the boot progress to halt - it will wait till the timeout set in Magisk init scripts is over, doing nothing in the meantime. This will cause super long boot times and prevents Magisk to work properly. In previous Android O previews, this even prevents the device to boot up.

Important: I HIGHLY suggest all developers/users to run their scripts in service mode UNLESS necessary. If you had to set props in post-fs-data (build related ro props for example), please consider using system.prop in modules as Magisk will handle it properly. If you really need to set props through post-fs-data scripts, call resetprop with the flag "-n" enabled, this will bypass the property_service.

With the introduction of mount namespace separation, some root developers contacted me for a request for "master-mount" option. This is added to MagiskSU, and calling su with this flag will give you the global mount namespace regardless of user configuration within Magisk Manager. Useful for root developers which need to global mount namespace for managing mount points.

Final Words

The documentation is super outdated now, and I have previously promised for an update but it never happened lol.

I already start working on it, too many has changed and some stuffs has changed seriously. A major new release should come with proper documentation :)

I will post another update once the documentations are done, I will point out some of the most important ones.