|
| 1 | +#!/sbin/sh |
| 2 | +########################################################################################## |
| 3 | +# |
| 4 | +# Magisk Module Template Install Script |
| 5 | +# by topjohnwu |
| 6 | +# |
| 7 | +########################################################################################## |
| 8 | + |
| 9 | +TMPDIR=/dev/tmp |
| 10 | +INSTALLER=$TMPDIR/install |
| 11 | +# Always mount under tmp |
| 12 | +MOUNTPATH=$TMPDIR/magisk_img |
| 13 | + |
| 14 | +# Default permissions |
| 15 | +umask 022 |
| 16 | + |
| 17 | +# Initial cleanup |
| 18 | +rm -rf $TMPDIR 2>/dev/null |
| 19 | +mkdir -p $INSTALLER |
| 20 | + |
| 21 | +# echo before loading util_functions |
| 22 | +ui_print() { echo "$1"; } |
| 23 | + |
| 24 | +require_new_magisk() { |
| 25 | + ui_print "*******************************" |
| 26 | + ui_print " Please install Magisk v17.0+! " |
| 27 | + ui_print "*******************************" |
| 28 | + exit 1 |
| 29 | +} |
| 30 | + |
| 31 | +########################################################################################## |
| 32 | +# Environment |
| 33 | +########################################################################################## |
| 34 | + |
| 35 | +OUTFD=$2 |
| 36 | +ZIP=$3 |
| 37 | + |
| 38 | +mount /data 2>/dev/null |
| 39 | + |
| 40 | +# Load utility functions |
| 41 | +if [ -f /data/adb/magisk/util_functions.sh ]; then |
| 42 | + . /data/adb/magisk/util_functions.sh |
| 43 | +elif [ -f /data/magisk/util_functions.sh ]; then |
| 44 | + NVBASE=/data |
| 45 | + . /data/magisk/util_functions.sh |
| 46 | +else |
| 47 | + require_new_magisk |
| 48 | +fi |
| 49 | + |
| 50 | +# Use alternative image if in BOOTMODE |
| 51 | +$BOOTMODE && IMG=$NVBASE/magisk_merge.img |
| 52 | + |
| 53 | +# Preperation for flashable zips |
| 54 | +setup_flashable |
| 55 | + |
| 56 | +# Mount partitions |
| 57 | +mount_partitions |
| 58 | + |
| 59 | +# Detect version and architecture |
| 60 | +api_level_arch_detect |
| 61 | + |
| 62 | +# You can get the Android API version from $API, the CPU architecture from $ARCH |
| 63 | +# Useful if you are creating Android version / platform dependent mods |
| 64 | + |
| 65 | +# Setup busybox and binaries |
| 66 | +$BOOTMODE && boot_actions || recovery_actions |
| 67 | + |
| 68 | +########################################################################################## |
| 69 | +# Preparation |
| 70 | +########################################################################################## |
| 71 | + |
| 72 | +# Extract common files |
| 73 | +unzip -o "$ZIP" module.prop config.sh 'common/*' -d $INSTALLER >&2 |
| 74 | + |
| 75 | +[ ! -f $INSTALLER/config.sh ] && abort "! Unable to extract zip file!" |
| 76 | +# Load configurations |
| 77 | +. $INSTALLER/config.sh |
| 78 | + |
| 79 | +# Check architecture |
| 80 | +check_architecture |
| 81 | + |
| 82 | +# Check the installed magisk version |
| 83 | +MIN_VER=`grep_prop minMagisk $INSTALLER/module.prop` |
| 84 | +[ ! -z $MAGISK_VER_CODE -a $MAGISK_VER_CODE -ge $MIN_VER ] || require_new_magisk |
| 85 | +MODID=`grep_prop id $INSTALLER/module.prop` |
| 86 | +MODPATH=$MOUNTPATH/$MODID |
| 87 | + |
| 88 | +# Print mod name |
| 89 | +print_modname |
| 90 | + |
| 91 | +# Please leave this message in your flashable zip for credits :) |
| 92 | +ui_print "******************************" |
| 93 | +ui_print "Powered by Magisk (@topjohnwu)" |
| 94 | +ui_print "******************************" |
| 95 | + |
| 96 | +########################################################################################## |
| 97 | +# Install |
| 98 | +########################################################################################## |
| 99 | + |
| 100 | +# Get the variable reqSizeM. Use your own method to determine reqSizeM if needed |
| 101 | +request_zip_size_check "$ZIP" |
| 102 | + |
| 103 | +# This function will mount $IMG to $MOUNTPATH, and resize the image based on $reqSizeM |
| 104 | +mount_magisk_img |
| 105 | + |
| 106 | +# Create mod paths |
| 107 | +rm -rf $MODPATH 2>/dev/null |
| 108 | +mkdir -p $MODPATH |
| 109 | + |
| 110 | +# Extract files to system. Use your own method if needed |
| 111 | +ui_print "- Extracting module files" |
| 112 | +unzip -o "$ZIP" 'system/*' -d $MODPATH >&2 |
| 113 | + |
| 114 | +# Remove placeholder |
| 115 | +rm -f $MODPATH/system/placeholder 2>/dev/null |
| 116 | + |
| 117 | +# Extra copy file function |
| 118 | +copy_files |
| 119 | + |
| 120 | +# Handle replace folders |
| 121 | +for TARGET in $REPLACE; do |
| 122 | + mktouch $MODPATH$TARGET/.replace |
| 123 | +done |
| 124 | + |
| 125 | +# Auto Mount |
| 126 | +$AUTOMOUNT && touch $MODPATH/auto_mount |
| 127 | + |
| 128 | +# prop files |
| 129 | +$PROPFILE && cp -af $INSTALLER/common/system.prop $MODPATH/system.prop |
| 130 | + |
| 131 | +# Module info |
| 132 | +cp -af $INSTALLER/module.prop $MODPATH/module.prop |
| 133 | +if $BOOTMODE; then |
| 134 | + # Update info for Magisk Manager |
| 135 | + mktouch /sbin/.core/img/$MODID/update |
| 136 | + cp -af $INSTALLER/module.prop /sbin/.core/img/$MODID/module.prop |
| 137 | +fi |
| 138 | + |
| 139 | +# post-fs-data mode scripts |
| 140 | +$POSTFSDATA && cp -af $INSTALLER/common/post-fs-data.sh $MODPATH/post-fs-data.sh |
| 141 | + |
| 142 | +# service mode scripts |
| 143 | +$LATESTARTSERVICE && cp -af $INSTALLER/common/service.sh $MODPATH/service.sh |
| 144 | + |
| 145 | +ui_print "- Setting permissions" |
| 146 | +set_permissions |
| 147 | + |
| 148 | +########################################################################################## |
| 149 | +# Finalizing |
| 150 | +########################################################################################## |
| 151 | + |
| 152 | +# Unmount magisk image and shrink if possible |
| 153 | +unmount_magisk_img |
| 154 | + |
| 155 | +$BOOTMODE || recovery_cleanup |
| 156 | +rm -rf $TMPDIR |
| 157 | + |
| 158 | +ui_print "- Done" |
| 159 | +exit 0 |
0 commit comments