[Magisk] topjohnwu:
2017.8.13 Magisk v13.5 (1350)(beta)

Here comes another public beta!

As most of you should know, Magisk is a fairly young project, and only recently does it undergo a complete rewrite on v13, so I place stability and compatibility first before I kept adding more features into it. This release comes with several major under-the-hood changes, both in native Magisk and Magisk Manager sides.

Busybox Fights Back Strong

Previously I had completely removed busybox from Magisk for causing too many troubles, and also the difficulty to build it myself. But after dealing with so many compatibility issues, and the need of reliable and feature packed command-line tools pushed me to add this gem back. I spent quite a lot of time integrating busybox sources into Magisk's building system, and believe me this isn't an easy task: busybox's config is based on Linux kernel, which itself is a complex topic. I created a tool (ndk-busybox-kitchen) to automatically handle the generation of config-based headers, and parse those files into Android.mk to support building with ndk-build command. To be honest this is super dope IMO, and I'm really proud of it lol.

The next effort is to maximize compatibility for the Magisk installation process. I decided instead of adding busybox directly into the flashable zip, I would directly embed busybox into update-binary, which is now a specially crafted shell script to dump the correct binary for the CPU architecture, and then execute the installation process completely on the busybox's shell and command-line tools. The extracted busybox will also be utilized in many other places such as boot scripts (yes, the boot scripts will now run in a complete busybox environment) and Magisk Manager. The busybox binary will be installed only for internal use, if you want to install busybox to your device, [MENTION=4544860]osm0sis[/MENTION] already uploaded a Magisk Module on the repo, please install that instead.

Finalizing Magisk Procedures

Magisk hijacks specific points in the boot process, and will go through its own procedures to fulfill all the features. The order of these procedures are now be finalized, which means it is very less likely to change in the future. For post-fs-data mode, general scripts (scripts under post-fs-data.d) and modules scripts (post-fs-data.sh in each module) are executed before magic mount happens. This means experienced developers can now customize magic mount's behavior to a certain degree. However, I still suggest that most scripts should be run in service mode unless necessary such as time critical commands. Service mode will guarantee SELinux patches are finished, and setting props with proper init triggers will not block the device's boot or lead to a crash.

Samsung Stock Kernel Workarounds

Well, apparently Samsung is always here to break everything. On stock kernels, it places a restriction on how binaries can behave if they are executed from /data. An additional magisk binary mirror is created to overcome this issue, and will be used extensively in Magisk Manager (it will not effect recovery). Unfortunately, even though I had offloaded most of the functionality into a shell script function collection that can be upgraded through Magisk updates, the template itself still has to be slightly updated to reflect the changes. Magisk Module Template v5 is already live on another branch. However, before you go and upgrade all your modules to v5, please think twice and consider it as a Developer Preview. It depends on the updated util_functions.sh in this beta, so if you upgrade them into the Online Repo, your module won't install on users running the latest stable Magisk version (v13.3). It will be the default template version once the next stable release is live.

A Small Mistake

There was a small mistake in v13.3, which the SHA1 of the stock image cannot be acquired, and also the SHA1 backed up within ramdisk is also not extracted. This leads to stock boot image restoration (happens when uninstalling) fails, and will only revert your device by ramdisk backups. This mean you will be able remove Magisk, but the boot image will not be 100% reverted. If you are concern about the backups, restore your boot image back to stock, and reflash this current build to re-create the Magisk's stock boot image backup.