|
| 1 | +########################################################################################## |
| 2 | +# |
| 3 | +# Magisk Module Installer Script |
| 4 | +# |
| 5 | +########################################################################################## |
| 6 | +########################################################################################## |
| 7 | +# |
| 8 | +# Instructions: |
| 9 | +# |
| 10 | +# 1. Place your files into system folder (delete the placeholder file) |
| 11 | +# 2. Fill in your module's info into module.prop |
| 12 | +# 3. Configure and implement callbacks in this file |
| 13 | +# 4. If you need boot scripts, add them into common/post-fs-data.sh or common/service.sh |
| 14 | +# 5. Add your additional or modified system properties into common/system.prop |
| 15 | +# |
| 16 | +########################################################################################## |
| 17 | + |
| 18 | +########################################################################################## |
| 19 | +# Config Flags |
| 20 | +########################################################################################## |
| 21 | + |
| 22 | +# Set to true if you do *NOT* want Magisk to mount |
| 23 | +# any files for you. Most modules would NOT want |
| 24 | +# to set this flag to true |
| 25 | +SKIPMOUNT=false |
| 26 | + |
| 27 | +# Set to true if you need to load system.prop |
| 28 | +PROPFILE=false |
| 29 | + |
| 30 | +# Set to true if you need post-fs-data script |
| 31 | +POSTFSDATA=false |
| 32 | + |
| 33 | +# Set to true if you need late_start service script |
| 34 | +LATESTARTSERVICE=false |
| 35 | + |
| 36 | +########################################################################################## |
| 37 | +# Replace list |
| 38 | +########################################################################################## |
| 39 | + |
| 40 | +# List all directories you want to directly replace in the system |
| 41 | +# Check the documentations for more info why you would need this |
| 42 | + |
| 43 | +# Construct your list in the following format |
| 44 | +# This is an example |
| 45 | +REPLACE_EXAMPLE=" |
| 46 | +/system/app/Youtube |
| 47 | +/system/priv-app/SystemUI |
| 48 | +/system/priv-app/Settings |
| 49 | +/system/framework |
| 50 | +" |
| 51 | + |
| 52 | +# Construct your own list here |
| 53 | +REPLACE=" |
| 54 | +" |
| 55 | + |
| 56 | +########################################################################################## |
| 57 | +# |
| 58 | +# Function Callbacks |
| 59 | +# |
| 60 | +# The following functions will be called by the installation framework. |
| 61 | +# You do not have the ability to modify update-binary, the only way you can customize |
| 62 | +# installation is through implementing these functions. |
| 63 | +# |
| 64 | +# When running your callbacks, the installation framework will make sure the Magisk |
| 65 | +# internal busybox path is *PREPENDED* to PATH, so all common commands shall exist. |
| 66 | +# Also, it will make sure /data, /system, and /vendor is properly mounted. |
| 67 | +# |
| 68 | +########################################################################################## |
| 69 | +########################################################################################## |
| 70 | +# |
| 71 | +# The installation framework will export some variables and functions. |
| 72 | +# You should use these variables and functions for installation. |
| 73 | +# |
| 74 | +# ! DO NOT use any Magisk internal paths as those are NOT public API. |
| 75 | +# ! DO NOT use other functions in util_functions.sh as they are NOT public API. |
| 76 | +# ! Non public APIs are not guranteed to maintain compatibility between releases. |
| 77 | +# |
| 78 | +# Available variables: |
| 79 | +# |
| 80 | +# MAGISK_VER (string): the version string of current installed Magisk |
| 81 | +# MAGISK_VER_CODE (int): the version code of current installed Magisk |
| 82 | +# BOOTMODE (bool): true if the module is currently installing in Magisk Manager |
| 83 | +# MODPATH (path): the path where your module files should be installed |
| 84 | +# TMPDIR (path): a place where you can temporarily store files |
| 85 | +# ZIPFILE (path): your module's installation zip |
| 86 | +# ARCH (string): the architecture of the device. Value is either arm, arm64, x86, or x64 |
| 87 | +# IS64BIT (bool): true if $ARCH is either arm64 or x64 |
| 88 | +# API (int): the API level (Android version) of the device |
| 89 | +# |
| 90 | +# Availible functions: |
| 91 | +# |
| 92 | +# ui_print <msg> |
| 93 | +# print <msg> to console |
| 94 | +# Avoid using 'echo' as it will not display in custom recovery's console |
| 95 | +# |
| 96 | +# abort <msg> |
| 97 | +# print error message <msg> to console and terminate installation |
| 98 | +# Avoid using 'exit' as it will skip the termination cleanup steps |
| 99 | +# |
| 100 | +# set_perm <target> <owner> <group> <permission> [context] |
| 101 | +# if [context] is empty, it will default to "u:object_r:system_file:s0" |
| 102 | +# this function is a shorthand for the following commands |
| 103 | +# chown owner.group target |
| 104 | +# chmod permission target |
| 105 | +# chcon context target |
| 106 | +# |
| 107 | +# set_perm_recursive <directory> <owner> <group> <dirpermission> <filepermission> [context] |
| 108 | +# if [context] is empty, it will default to "u:object_r:system_file:s0" |
| 109 | +# for all files in <directory>, it will call: |
| 110 | +# set_perm file owner group filepermission context |
| 111 | +# for all directories in <directory> (including itself), it will call: |
| 112 | +# set_perm dir owner group dirpermission context |
| 113 | +# |
| 114 | +########################################################################################## |
| 115 | +########################################################################################## |
| 116 | +# If you need boot scripts, DO NOT use general boot scripts (post-fs-data.d/service.d) |
| 117 | +# ONLY use module scripts as it respects the module status (remove/disable) and is |
| 118 | +# guaranteed to maintain the same behavior in future Magisk releases. |
| 119 | +# Enable boot scripts by setting the flags in the config section above. |
| 120 | +########################################################################################## |
| 121 | + |
| 122 | +# Set what you want to display when installing your module |
| 123 | + |
| 124 | +print_modname() { |
| 125 | + ui_print "**************************************" |
| 126 | + ui_print " Twemoji v13.1.0 " |
| 127 | + ui_print " Maintained by Julien Gontier " |
| 128 | + ui_print "**************************************" |
| 129 | +} |
| 130 | + |
| 131 | +# Copy/extract your module files into $MODPATH in on_install. |
| 132 | + |
| 133 | +on_install() { |
| 134 | + # The following is the default implementation: extract $ZIPFILE/system to $MODPATH |
| 135 | + # Extend/change the logic to whatever you want |
| 136 | + ui_print "- Extracting module files" |
| 137 | + unzip -o "$ZIPFILE" 'system/*' -d $MODPATH >&2 |
| 138 | + [[ -d /sbin/.core/mirror ]] && MIRRORPATH=/sbin/.core/mirror || unset MIRRORPATH |
| 139 | + FONTS=/system/etc/fonts.xml |
| 140 | + FONTFILES=$(sed -ne '/<family lang="und-Zsye".*>/,/<\/family>/ {s/.*<font weight="400" style="normal">\(.*\)<\/font>.*/\1/p;}' $MIRRORPATH$FONTS) |
| 141 | + for font in $FONTFILES |
| 142 | + do |
| 143 | + ln -s /system/fonts/NotoColorEmoji.ttf $MODPATH/system/fonts/$font |
| 144 | + done |
| 145 | +} |
| 146 | + |
| 147 | +# Only some special files require specific permissions |
| 148 | +# This function will be called after on_install is done |
| 149 | +# The default permissions should be good enough for most cases |
| 150 | + |
| 151 | +set_permissions() { |
| 152 | + # The following is the default rule, DO NOT remove |
| 153 | + set_perm_recursive $MODPATH 0 0 0755 0644 |
| 154 | + |
| 155 | + # Here are some examples: |
| 156 | + # set_perm_recursive $MODPATH/system/lib 0 0 0755 0644 |
| 157 | + # set_perm $MODPATH/system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0 |
| 158 | + # set_perm $MODPATH/system/bin/dex2oat 0 2000 0755 u:object_r:dex2oat_exec:s0 |
| 159 | + # set_perm $MODPATH/system/lib/libart.so 0 0 0644 |
| 160 | +} |
| 161 | + |
| 162 | +# You can add more functions to assist your custom script code |
0 commit comments