Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
gwolf2u committed Apr 3, 2023
0 parents commit 58f8d48
Show file tree
Hide file tree
Showing 9 changed files with 374 additions and 0 deletions.
33 changes: 33 additions & 0 deletions META-INF/com/google/android/update-binary
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/sbin/sh

#################
# Initialization
#################

umask 022

# echo before loading util_functions
ui_print() { echo "$1"; }

require_new_magisk() {
ui_print "*******************************"
ui_print " Please install Magisk v20.4+! "
ui_print "*******************************"
exit 1
}

#########################
# Load util_functions.sh
#########################

OUTFD=$2
ZIPFILE=$3

mount /data 2>/dev/null

[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk
. /data/adb/magisk/util_functions.sh
[ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk

install_module
exit 0
1 change: 1 addition & 0 deletions META-INF/com/google/android/updater-script
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#MAGISK
232 changes: 232 additions & 0 deletions common/functions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
##########################################################################################
#
# MMT Extended Utility Functions
#
##########################################################################################

cleanup() {
rm -rf $MODPATH/common 2>/dev/null
}

abort() {
ui_print "$1"
rm -rf $MODPATH 2>/dev/null
cleanup
rm -rf $TMPDIR 2>/dev/null
exit 1
}

device_check() {
local opt=`getopt -o dm -- "$@"` type=device
eval set -- "$opt"
while true; do
case "$1" in
-d) local type=device; shift;;
-m) local type=manufacturer; shift;;
--) shift; break;;
*) abort "Invalid device_check argument $1! Aborting!";;
esac
done
local prop=$(echo "$1" | tr '[:upper:]' '[:lower:]')
for i in /system /vendor /odm /product; do
if [ -f $i/build.prop ]; then
for j in "ro.product.$type" "ro.build.$type" "ro.product.vendor.$type" "ro.vendor.product.$type"; do
[ "$(sed -n "s/^$j=//p" $i/build.prop 2>/dev/null | head -n 1 | tr '[:upper:]' '[:lower:]')" == "$prop" ] && return 0
done
[ "$type" == "device" ] && [ "$(sed -n "s/^"ro.build.product"=//p" $i/build.prop 2>/dev/null | head -n 1 | tr '[:upper:]' '[:lower:]')" == "$prop" ] && return 0
fi
done
return 1
}

cp_ch() {
local opt=`getopt -o nr -- "$@"` BAK=true UBAK=true FOL=false
eval set -- "$opt"
while true; do
case "$1" in
-n) UBAK=false; shift;;
-r) FOL=true; shift;;
--) shift; break;;
*) abort "Invalid cp_ch argument $1! Aborting!";;
esac
done
local SRC="$1" DEST="$2" OFILES="$1"
$FOL && local OFILES=$(find $SRC -type f 2>/dev/null)
[ -z $3 ] && PERM=0644 || PERM=$3
case "$DEST" in
$TMPDIR/*|$MODULEROOT/*|$NVBASE/modules/$MODID/*) BAK=false;;
esac
for OFILE in ${OFILES}; do
if $FOL; then
if [ "$(basename $SRC)" == "$(basename $DEST)" ]; then
local FILE=$(echo $OFILE | sed "s|$SRC|$DEST|")
else
local FILE=$(echo $OFILE | sed "s|$SRC|$DEST/$(basename $SRC)|")
fi
else
[ -d "$DEST" ] && local FILE="$DEST/$(basename $SRC)" || local FILE="$DEST"
fi
if $BAK && $UBAK; then
[ ! "$(grep "$FILE$" $INFO 2>/dev/null)" ] && echo "$FILE" >> $INFO
[ -f "$FILE" -a ! -f "$FILE~" ] && { mv -f $FILE $FILE~; echo "$FILE~" >> $INFO; }
elif $BAK; then
[ ! "$(grep "$FILE$" $INFO 2>/dev/null)" ] && echo "$FILE" >> $INFO
fi
install -D -m $PERM "$OFILE" "$FILE"
done
}

install_script() {
case "$1" in
-l) shift; local INPATH=$NVBASE/service.d;;
-p) shift; local INPATH=$NVBASE/post-fs-data.d;;
*) local INPATH=$NVBASE/service.d;;
esac
[ "$(grep "#!/system/bin/sh" $1)" ] || sed -i "1i #!/system/bin/sh" $1
local i; for i in "MODPATH" "LIBDIR" "MODID" "INFO" "MODDIR"; do
case $i in
"MODPATH") sed -i "1a $i=$NVBASE/modules/$MODID" $1;;
"MODDIR") sed -i "1a $i=\${0%/*}" $1;;
*) sed -i "1a $i=$(eval echo \$$i)" $1;;
esac
done
[ "$1" == "$MODPATH/uninstall.sh" ] && return 0
case $(basename $1) in
post-fs-data.sh|service.sh) ;;
*) cp_ch -n $1 $INPATH/$(basename $1) 0755;;
esac
}

prop_process() {
sed -i -e "/^#/d" -e "/^ *$/d" $1
[ -f $MODPATH/system.prop ] || mktouch $MODPATH/system.prop
while read LINE; do
echo "$LINE" >> $MODPATH/system.prop
done < $1
}

# Check for min/max api version
[ -z $MINAPI ] || { [ $API -lt $MINAPI ] && abort "! Your system API of $API is less than the minimum api of $MINAPI! Aborting!"; }
[ -z $MAXAPI ] || { [ $API -gt $MAXAPI ] && abort "! Your system API of $API is greater than the maximum api of $MAXAPI! Aborting!"; }

# Set variables
[ -z $ARCH32 ] && ARCH32="$(echo $ABI32 | cut -c-3)"
[ $API -lt 26 ] && DYNLIB=false
[ -z $DYNLIB ] && DYNLIB=false
[ -z $DEBUG ] && DEBUG=false
INFO=$NVBASE/modules/.$MODID-files
ORIGDIR="$MAGISKTMP/mirror"
if $DYNLIB; then
LIBPATCH="\/vendor"
LIBDIR=/system/vendor
else
LIBPATCH="\/system"
LIBDIR=/system
fi
if ! $BOOTMODE; then
ui_print "- Only uninstall is supported in recovery"
ui_print " Uninstalling!"
touch $MODPATH/remove
[ -s $INFO ] && install_script $MODPATH/uninstall.sh || rm -f $INFO $MODPATH/uninstall.sh
recovery_cleanup
cleanup
rm -rf $NVBASE/modules_update/$MODID $TMPDIR 2>/dev/null
exit 0
fi

# Debug
if $DEBUG; then
ui_print "- Debug mode"
ui_print " Module install log will include debug info"
ui_print " Be sure to save it after module install"
set -x
fi

# Extract files
ui_print "- Extracting module files"
unzip -o "$ZIPFILE" -x 'META-INF/*' 'common/functions.sh' -d $MODPATH >&2
[ -f "$MODPATH/common/addon.tar.xz" ] && tar -xf $MODPATH/common/addon.tar.xz -C $MODPATH/common 2>/dev/null

# Run addons
if [ "$(ls -A $MODPATH/common/addon/*/install.sh 2>/dev/null)" ]; then
ui_print " "; ui_print "- Running Addons -"
for i in $MODPATH/common/addon/*/install.sh; do
ui_print " Running $(echo $i | sed -r "s|$MODPATH/common/addon/(.*)/install.sh|\1|")..."
. $i
done
fi

# Remove files outside of module directory
ui_print "- Removing old files"

if [ -f $INFO ]; then
while read LINE; do
if [ "$(echo -n $LINE | tail -c 1)" == "~" ]; then
continue
elif [ -f "$LINE~" ]; then
mv -f $LINE~ $LINE
else
rm -f $LINE
while true; do
LINE=$(dirname $LINE)
[ "$(ls -A $LINE 2>/dev/null)" ] && break 1 || rm -rf $LINE
done
fi
done < $INFO
rm -f $INFO
fi

### Install
ui_print "- Installing"

[ -f "$MODPATH/common/install.sh" ] && . $MODPATH/common/install.sh

ui_print " Installing for $ARCH SDK $API device..."
# Remove comments from files and place them, add blank line to end if not already present
for i in $(find $MODPATH -type f -name "*.sh" -o -name "*.prop" -o -name "*.rule"); do
[ -f $i ] && { sed -i -e "/^#/d" -e "/^ *$/d" $i; [ "$(tail -1 $i)" ] && echo "" >> $i; } || continue
case $i in
"$MODPATH/service.sh") install_script -l $i;;
"$MODPATH/post-fs-data.sh") install_script -p $i;;
"$MODPATH/uninstall.sh") if [ -s $INFO ] || [ "$(head -n1 $MODPATH/uninstall.sh)" != "# Don't modify anything after this" ]; then
install_script $MODPATH/uninstall.sh
else
rm -f $INFO $MODPATH/uninstall.sh
fi;;
esac
done

$IS64BIT || for i in $(find $MODPATH/system -type d -name "lib64"); do rm -rf $i 2>/dev/null; done
[ -d "/system/priv-app" ] || mv -f $MODPATH/system/priv-app $MODPATH/system/app 2>/dev/null
[ -d "/system/xbin" ] || mv -f $MODPATH/system/xbin $MODPATH/system/bin 2>/dev/null
if $DYNLIB; then
for FILE in $(find $MODPATH/system/lib* -type f 2>/dev/null | sed "s|$MODPATH/system/||"); do
[ -s $MODPATH/system/$FILE ] || continue
case $FILE in
lib*/modules/*) continue;;
esac
mkdir -p $(dirname $MODPATH/system/vendor/$FILE)
mv -f $MODPATH/system/$FILE $MODPATH/system/vendor/$FILE
[ "$(ls -A `dirname $MODPATH/system/$FILE`)" ] || rm -rf `dirname $MODPATH/system/$FILE`
done
# Delete empty lib folders (busybox find doesn't have this capability)
toybox find $MODPATH/system/lib* -type d -empty -delete >/dev/null 2>&1
fi

# Set permissions
ui_print " "
ui_print "- Setting Permissions"
set_perm_recursive $MODPATH 0 0 0755 0644
if [ -d $MODPATH/system/vendor ]; then
set_perm_recursive $MODPATH/system/vendor 0 0 0755 0644 u:object_r:vendor_file:s0
[ -d $MODPATH/system/vendor/app ] && set_perm_recursive $MODPATH/system/vendor/app 0 0 0755 0644 u:object_r:vendor_app_file:s0
[ -d $MODPATH/system/vendor/etc ] && set_perm_recursive $MODPATH/system/vendor/etc 0 0 0755 0644 u:object_r:vendor_configs_file:s0
[ -d $MODPATH/system/vendor/overlay ] && set_perm_recursive $MODPATH/system/vendor/overlay 0 0 0755 0644 u:object_r:vendor_overlay_file:s0
for FILE in $(find $MODPATH/system/vendor -type f -name *".apk"); do
[ -f $FILE ] && chcon u:object_r:vendor_app_file:s0 $FILE
done
fi
set_permissions

# Complete install
cleanup
Empty file added common/install.sh
Empty file.
71 changes: 71 additions & 0 deletions customize.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
##########################################################################################
#
# MMT Extended Config Script
#
##########################################################################################

##########################################################################################
# Config Flags
##########################################################################################

# Uncomment and change 'MINAPI' and 'MAXAPI' to the minimum and maximum android version for your mod
# Uncomment DYNLIB if you want libs installed to vendor for oreo+ and system for anything older
# Uncomment DEBUG if you want full debug logs (saved to /sdcard)
#MINAPI=21
#MAXAPI=25
#DYNLIB=true
#DEBUG=true

##########################################################################################
# Replace list
##########################################################################################

# List all directories you want to directly replace in the system
# Check the documentations for more info why you would need this

# Construct your list in the following format
# This is an example
REPLACE_EXAMPLE="
/system/app/Youtube
/system/priv-app/SystemUI
/system/priv-app/Settings
/system/framework
"

# Construct your own list here
REPLACE="
"

##########################################################################################
# Permissions
##########################################################################################

set_permissions() {
: # Remove this if adding to this function

# Note that all files/folders in magisk module directory have the $MODPATH prefix - keep this prefix on all of your files/folders
# Some examples:

# For directories (includes files in them):
# set_perm_recursive <dirname> <owner> <group> <dirpermission> <filepermission> <contexts> (default: u:object_r:system_file:s0)

# set_perm_recursive $MODPATH/system/lib 0 0 0755 0644
# set_perm_recursive $MODPATH/system/vendor/lib/soundfx 0 0 0755 0644

# For files (not in directories taken care of above)
# set_perm <filename> <owner> <group> <permission> <contexts> (default: u:object_r:system_file:s0)

# set_perm $MODPATH/system/lib/libart.so 0 0 0644
# set_perm /data/local/tmp/file.txt 0 0 644

chmod +x $MODPATH/system/etc/mglru-checker-loop.sh
chmod +x $MODPATH/service.sh
}

##########################################################################################
# MMT Extended Logic - Don't modify anything after this
##########################################################################################

SKIPUNZIP=1
unzip -qjo "$ZIPFILE" 'common/functions.sh' -d $TMPDIR >&2
. $TMPDIR/functions.sh
6 changes: 6 additions & 0 deletions module.prop
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
id=mglru-disable
name=MGLRU Disabler
version=4.0
versionCode=4
author=gwolfu
description=Checks every 30 seconds the status of MGLRU feature and disables it if enabled (prevent system hang on Nothing OS 1.5.3+)
2 changes: 2 additions & 0 deletions service.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/system/bin/sh
./system/etc/mglru-checker-loop.sh
12 changes: 12 additions & 0 deletions system/etc/mglru-checker-loop.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/system/bin/sh

while true
do
mglru_enabled=$(cat /sys/kernel/mm/lru_gen/enabled)

if [ "$mglru_enabled" != "0x0000" ]; then
resetprop persist.sys.mglru_enable false
fi

sleep 30
done
17 changes: 17 additions & 0 deletions uninstall.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Don't modify anything after this
if [ -f $INFO ]; then
while read LINE; do
if [ "$(echo -n $LINE | tail -c 1)" == "~" ]; then
continue
elif [ -f "$LINE~" ]; then
mv -f $LINE~ $LINE
else
rm -f $LINE
while true; do
LINE=$(dirname $LINE)
[ "$(ls -A $LINE 2>/dev/null)" ] && break 1 || rm -rf $LINE
done
fi
done < $INFO
rm -f $INFO
fi

0 comments on commit 58f8d48

Please sign in to comment.