-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 59354f4
Showing
43 changed files
with
967 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Declare files that will always have LF line endings on checkout. | ||
*.sh text eol=lf | ||
*.prop text eol=lf | ||
*.md text eol=lf | ||
*.xml text eol=lf | ||
META-INF/** text eol=lf | ||
|
||
# Denote all files that are truly binary and should not be modified. | ||
common/addon/**/tools/** binary |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
__MACOSX | ||
.DS_Store |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
#MAGISK |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
<h1 align="center">Magisk Module Template Extended (MMT-Ex)</h1> | ||
|
||
<div align="center"> | ||
<!-- Version --> | ||
<img src="https://img.shields.io/badge/Version-v2.0-blue.svg?longCache=true&style=popout-square" | ||
alt="Version" /> | ||
<!-- Last Updated --> | ||
<img src="https://img.shields.io/badge/Updated-January 21, 2022-green.svg?longCache=true&style=flat-square" | ||
alt="_time_stamp_" /> | ||
<!-- Min Magisk --> | ||
<img src="https://img.shields.io/badge/MinMagisk-20.4-red.svg?longCache=true&style=flat-square" | ||
alt="_time_stamp_" /></div> | ||
|
||
<div align="center"> | ||
<strong>MMT Extended is the spiritual successor of Unity and makes magisk module creation easy. Instructions in the | ||
<h3><a href="https://github.com/Zackptg5/MMT-Extended/wiki">Wiki</a></h3> | ||
</div> | ||
|
||
<div align="center"> | ||
<h3> | ||
<a href="https://github.com/Zackptg5/MMT-Extended"> | ||
Source Code | ||
</a> | ||
<span> | </span> | ||
<a href="https://github.com/Zackptg5/MMT-Extended-Addons"> | ||
Addons Repository | ||
</a> | ||
<span> | </span> | ||
<a href="https://forum.xda-developers.com/apps/magisk/magisk-module-template-extended-mmt-ex-t4029819"> | ||
XDA | ||
</a> | ||
</h3> | ||
</div> | ||
|
||
### Usage | ||
- [Follow the directions here (DO NOT FORK)](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template) | ||
- Then follow instructions in [Wiki](https://github.com/Zackptg5/MMT-Extended/wiki) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
### v1.0 - 04.06.2022 | ||
* Initial release |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,238 @@ | ||
########################################################################################## | ||
# | ||
# 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 | ||
} | ||
|
||
# Credits | ||
ui_print "**************************************" | ||
ui_print "* MMT Extended by Zackptg5 @ XDA *" | ||
ui_print "**************************************" | ||
ui_print " " | ||
|
||
# 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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
########################################################################################## | ||
# | ||
# 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=30 | ||
MAXAPI=30 | ||
#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 | ||
} | ||
|
||
########################################################################################## | ||
# MMT Extended Logic - Don't modify anything after this | ||
########################################################################################## | ||
|
||
SKIPUNZIP=1 | ||
unzip -qjo "$ZIPFILE" 'common/functions.sh' -d $TMPDIR >&2 | ||
. $TMPDIR/functions.sh |
Oops, something went wrong.