|
| 1 | +#!/sbin/sh |
| 2 | +########################################################################################## |
| 3 | +# |
| 4 | +# Magisk Module Template Install Script |
| 5 | +# by topjohnwu |
| 6 | +# |
| 7 | +########################################################################################## |
| 8 | + |
| 9 | +# Detect whether in boot mode |
| 10 | +ps | grep zygote | grep -v grep >/dev/null && BOOTMODE=true || BOOTMODE=false |
| 11 | +$BOOTMODE || ps -A 2>/dev/null | grep zygote | grep -v grep >/dev/null && BOOTMODE=true |
| 12 | + |
| 13 | +# This path should work in any cases |
| 14 | +TMPDIR=/dev/tmp |
| 15 | +MOUNTPATH=/magisk |
| 16 | +IMG=/data/magisk.img |
| 17 | +if $BOOTMODE; then |
| 18 | + MOUNTPATH=/dev/magisk_merge |
| 19 | + IMG=/data/magisk_merge.img |
| 20 | +fi |
| 21 | +INSTALLER=$TMPDIR/install |
| 22 | +MAGISKBIN=/data/magisk |
| 23 | + |
| 24 | +# Default permissions |
| 25 | +umask 022 |
| 26 | + |
| 27 | +# Initial cleanup |
| 28 | +rm -rf $TMPDIR 2>/dev/null |
| 29 | +mkdir -p $INSTALLER |
| 30 | + |
| 31 | +########################################################################################## |
| 32 | +# Environment |
| 33 | +########################################################################################## |
| 34 | + |
| 35 | +OUTFD=$2 |
| 36 | +ZIP=$3 |
| 37 | + |
| 38 | +ui_print() { |
| 39 | + if $BOOTMODE; then |
| 40 | + echo "$1" |
| 41 | + else |
| 42 | + echo -n -e "ui_print $1\n" >> /proc/self/fd/$OUTFD |
| 43 | + echo -n -e "ui_print\n" >> /proc/self/fd/$OUTFD |
| 44 | + fi |
| 45 | +} |
| 46 | + |
| 47 | +require_new_magisk() { |
| 48 | + ui_print "***********************************" |
| 49 | + ui_print "! $MAGISKBIN isn't setup properly!" |
| 50 | + ui_print "! Please install Magisk v14.0+!" |
| 51 | + ui_print "***********************************" |
| 52 | + exit 1 |
| 53 | +} |
| 54 | + |
| 55 | +ui_print "- Mounting /system, /vendor, /data, /cache" |
| 56 | +mount -o ro /system 2>/dev/null |
| 57 | +mount -o ro /vendor 2>/dev/null |
| 58 | +mount /data 2>/dev/null |
| 59 | +mount /cache 2>/dev/null |
| 60 | + |
| 61 | +# Utility functions must exist |
| 62 | +[ -f $MAGISKBIN/util_functions.sh ] || require_new_magisk |
| 63 | +# Load utility fuctions |
| 64 | +. $MAGISKBIN/util_functions.sh |
| 65 | +get_outfd |
| 66 | + |
| 67 | +$BOOTMODE && ! is_mounted /magisk && abort "! Magisk is not activated!" |
| 68 | +[ ! -f /system/build.prop ] && abort "! /system could not be mounted!" |
| 69 | + |
| 70 | +# Detect version and architecture |
| 71 | +api_level_arch_detect |
| 72 | + |
| 73 | +# You can get the Android API version from $API, the CPU architecture from $ARCH |
| 74 | +# Useful if you are creating Android version / platform dependent mods |
| 75 | + |
| 76 | +# We need busybox/binaries to be setup |
| 77 | +$BOOTMODE && boot_actions || recovery_actions |
| 78 | + |
| 79 | +########################################################################################## |
| 80 | +# Preparation |
| 81 | +########################################################################################## |
| 82 | + |
| 83 | +# Extract common files |
| 84 | +unzip -o "$ZIP" module.prop config.sh 'common/*' -d $INSTALLER 2>/dev/null |
| 85 | + |
| 86 | +[ ! -f $INSTALLER/config.sh ] && abort "! Unable to extract zip file!" |
| 87 | +# Load configurations |
| 88 | +. $INSTALLER/config.sh |
| 89 | + |
| 90 | +# Check the min magisk version |
| 91 | +MIN_VER=`grep_prop template $INSTALLER/module.prop` |
| 92 | +[ ! -z $MAGISK_VER_CODE -a $MAGISK_VER_CODE -ge $MIN_VER ] || require_new_magisk |
| 93 | +MODID=`grep_prop id $INSTALLER/module.prop` |
| 94 | +MODPATH=$MOUNTPATH/$MODID |
| 95 | + |
| 96 | +# Print mod name |
| 97 | +print_modname |
| 98 | + |
| 99 | +# Please leave this message in your flashable zip for credits :) |
| 100 | +ui_print "******************************" |
| 101 | +ui_print "Powered by Magisk (@topjohnwu)" |
| 102 | +ui_print "******************************" |
| 103 | + |
| 104 | +########################################################################################## |
| 105 | +# Install |
| 106 | +########################################################################################## |
| 107 | + |
| 108 | +request_zip_size_check "$ZIP" |
| 109 | + |
| 110 | +if [ -f "$IMG" ]; then |
| 111 | + ui_print "- Found $IMG" |
| 112 | + image_size_check $IMG |
| 113 | + if [ "$reqSizeM" -gt "$curFreeM" ]; then |
| 114 | + newSizeM=$(((reqSizeM + curUsedM) / 32 * 32 + 64)) |
| 115 | + ui_print "- Resizing $IMG to ${newSizeM}M" |
| 116 | + $MAGISKBIN/magisk --resizeimg $IMG $newSizeM |
| 117 | + fi |
| 118 | +else |
| 119 | + newSizeM=$((reqSizeM / 32 * 32 + 64)); |
| 120 | + ui_print "- Creating $IMG with size ${newSizeM}M" |
| 121 | + $MAGISKBIN/magisk --createimg $IMG $newSizeM |
| 122 | +fi |
| 123 | + |
| 124 | +ui_print "- Mounting $IMG to $MOUNTPATH" |
| 125 | +MAGISKLOOP=`$MAGISKBIN/magisk --mountimg $IMG $MOUNTPATH` |
| 126 | +is_mounted $MOUNTPATH || abort "! $IMG mount failed..." |
| 127 | + |
| 128 | +# Create mod paths |
| 129 | +rm -rf $MODPATH 2>/dev/null |
| 130 | +mkdir -p $MODPATH |
| 131 | + |
| 132 | +ui_print "- Extracting module files" |
| 133 | +unzip -o "$ZIP" 'system/*' -d $MODPATH 2>/dev/null |
| 134 | + |
| 135 | +# Handle replace folders |
| 136 | +for TARGET in $REPLACE; do |
| 137 | + mktouch $MODPATH$TARGET/.replace |
| 138 | +done |
| 139 | + |
| 140 | +# Auto Mount |
| 141 | +$AUTOMOUNT && touch $MODPATH/auto_mount |
| 142 | + |
| 143 | +# prop files |
| 144 | +$PROPFILE && cp -af $INSTALLER/common/system.prop $MODPATH/system.prop |
| 145 | + |
| 146 | +# Module info |
| 147 | +cp -af $INSTALLER/module.prop $MODPATH/module.prop |
| 148 | +if $BOOTMODE; then |
| 149 | + # Update info for Magisk Manager |
| 150 | + mktouch /magisk/$MODID/update |
| 151 | + cp -af $INSTALLER/module.prop /magisk/$MODID/module.prop |
| 152 | +fi |
| 153 | + |
| 154 | +# post-fs-data mode scripts |
| 155 | +$POSTFSDATA && cp -af $INSTALLER/common/post-fs-data.sh $MODPATH/post-fs-data.sh |
| 156 | + |
| 157 | +# service mode scripts |
| 158 | +$LATESTARTSERVICE && cp -af $INSTALLER/common/service.sh $MODPATH/service.sh |
| 159 | + |
| 160 | +ui_print "- Setting permissions" |
| 161 | +set_permissions |
| 162 | + |
| 163 | +########################################################################################## |
| 164 | +# Finalizing |
| 165 | +########################################################################################## |
| 166 | + |
| 167 | +$MAGISKBIN/magisk --umountimg $MOUNTPATH $MAGISKLOOP |
| 168 | +rmdir $MOUNTPATH |
| 169 | + |
| 170 | +# Shrink the image if possible |
| 171 | +image_size_check $IMG |
| 172 | +newSizeM=$((curUsedM / 32 * 32 + 64)) |
| 173 | +if [ $curSizeM -gt $newSizeM ]; then |
| 174 | + ui_print "- Shrinking $IMG to ${newSizeM}M" |
| 175 | + $MAGISKBIN/magisk --resizeimg $IMG $newSizeM |
| 176 | +fi |
| 177 | + |
| 178 | +$BOOTMODE || recovery_cleanup |
| 179 | +rm -rf $TMPDIR |
| 180 | + |
| 181 | +ui_print "- Done" |
| 182 | +exit 0 |
0 commit comments