#!/sbin/sh ########################################################################################## # # Magisk Module Template Install Script # by topjohnwu # ########################################################################################## # Detect whether in boot mode ps | grep zygote | grep -v grep >/dev/null && BOOTMODE=true || BOOTMODE=false $BOOTMODE || ps -A 2>/dev/null | grep zygote | grep -v grep >/dev/null && BOOTMODE=true TMPDIR=/dev/tmp INSTALLER=$TMPDIR/install MAGISKBIN=/data/adb/magisk # Default permissions umask 022 # Initial cleanup rm -rf $TMPDIR 2>/dev/null mkdir -p $INSTALLER # echo before loading util_functions ui_print() { echo "$1"; } require_new_magisk() { ui_print "*******************************" ui_print " Please install Magisk v15.0+! " ui_print "*******************************" exit 1 } ########################################################################################## # Environment ########################################################################################## OUTFD=$2 ZIP=$3 mount /data 2>/dev/null # Utility functions must exist [ -f $MAGISKBIN/util_functions.sh ] || require_new_magisk # Load utility fuctions . $MAGISKBIN/util_functions.sh # We can't alter magisk image live, use alternative image if required $BOOTMODE && IMG=/data/adb/magisk_merge.img # Always mount under tmp MOUNTPATH=$TMPDIR/magisk_img # Preperation for flashable zips get_outfd # Mount partitions mount_partitions # Detect version and architecture api_level_arch_detect # You can get the Android API version from $API, the CPU architecture from $ARCH # Useful if you are creating Android version / platform dependent mods # Setup busybox and binaries $BOOTMODE && boot_actions || recovery_actions ########################################################################################## # Preparation ########################################################################################## # Extract common files unzip -o "$ZIP" module.prop config.sh 'common/*' -d $INSTALLER >&2 [ ! -f $INSTALLER/config.sh ] && abort "! Unable to extract zip file!" # Load configurations . $INSTALLER/config.sh # Check the installed magisk version MIN_VER=`grep_prop minMagisk $INSTALLER/module.prop` [ ! -z $MAGISK_VER_CODE -a $MAGISK_VER_CODE -ge $MIN_VER ] || require_new_magisk MODID=`grep_prop id $INSTALLER/module.prop` MODPATH=$MOUNTPATH/$MODID # Print mod name print_modname # Please leave this message in your flashable zip for credits :) ui_print "******************************" ui_print "Powered by Magisk (|topjohnwu)" ui_print "******************************" ########################################################################################## # Install ########################################################################################## # Get the variable reqSizeM. Use your own method to determine reqSizeM if needed request_zip_size_check "$ZIP" # This function will mount $IMG to $MOUNTPATH, and resize the image based on $reqSizeM mount_magisk_img # Create mod paths rm -rf $MODPATH 2>/dev/null mkdir -p $MODPATH # Extract files to system. Use your own method if needed ui_print "- Extracting module files" unzip -o "$ZIP" 'system/*' -d $MODPATH >&2 # Remove placeholder rm -f $MODPATH/system/placeholder 2>/dev/null # Handle replace folders for TARGET in $REPLACE; do mktouch $MODPATH$TARGET/.replace done # Auto Mount $AUTOMOUNT && touch $MODPATH/auto_mount # prop files $PROPFILE && cp -af $INSTALLER/common/system.prop $MODPATH/system.prop # Module info cp -af $INSTALLER/module.prop $MODPATH/module.prop if $BOOTMODE; then # Update info for Magisk Manager mktouch /sbin/.core/img/$MODID/update cp -af $INSTALLER/module.prop /sbin/.core/img/$MODID/module.prop fi # post-fs-data mode scripts $POSTFSDATA && cp -af $INSTALLER/common/post-fs-data.sh $MODPATH/post-fs-data.sh # service mode scripts $LATESTARTSERVICE && cp -af $INSTALLER/common/service.sh $MODPATH/service.sh # Module script placement script_install ui_print "- Setting permissions" set_permissions ########################################################################################## # Finalizing ########################################################################################## # Unmount magisk image and shrink if possible unmount_magisk_img $BOOTMODE || recovery_cleanup rm -rf $TMPDIR ui_print "- Done" exit 0