-
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
1 parent
c3c8aea
commit d5bd444
Showing
9 changed files
with
359 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,173 @@ | ||
#!/sbin/sh | ||
|
||
################# | ||
# Initialization | ||
################# | ||
|
||
umask 022 | ||
|
||
# Global vars | ||
TMPDIR=/dev/tmp | ||
PERSISTDIR=/sbin/.magisk/mirror/persist | ||
|
||
rm -rf $TMPDIR 2>/dev/null | ||
mkdir -p $TMPDIR | ||
|
||
# echo before loading util_functions | ||
ui_print() { echo "$1"; } | ||
|
||
require_new_magisk() { | ||
ui_print "*******************************" | ||
ui_print " Please install Magisk v19.0+! " | ||
ui_print "*******************************" | ||
exit 1 | ||
} | ||
|
||
is_legacy_script() { | ||
unzip -l "$ZIPFILE" install.sh | grep -q install.sh | ||
return $? | ||
} | ||
|
||
print_modname() { | ||
local len | ||
len=`echo -n $MODNAME | wc -c` | ||
len=$((len + 2)) | ||
local pounds=`printf "%${len}s" | tr ' ' '*'` | ||
ui_print "$pounds" | ||
ui_print " $MODNAME " | ||
ui_print "$pounds" | ||
ui_print "*******************" | ||
ui_print " Powered by Magisk " | ||
ui_print "*******************" | ||
} | ||
|
||
############## | ||
# Environment | ||
############## | ||
|
||
OUTFD=$2 | ||
ZIPFILE=$3 | ||
|
||
mount /data 2>/dev/null | ||
|
||
# Load utility functions | ||
[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk | ||
. /data/adb/magisk/util_functions.sh | ||
[ $MAGISK_VER_CODE -gt 18100 ] || require_new_magisk | ||
|
||
# Preperation for flashable zips | ||
setup_flashable | ||
|
||
# Mount partitions | ||
mount_partitions | ||
|
||
# Detect version and architecture | ||
api_level_arch_detect | ||
|
||
# Setup busybox and binaries | ||
$BOOTMODE && boot_actions || recovery_actions | ||
|
||
############## | ||
# Preparation | ||
############## | ||
|
||
# Extract prop file | ||
unzip -o "$ZIPFILE" module.prop -d $TMPDIR >&2 | ||
[ ! -f $TMPDIR/module.prop ] && abort "! Unable to extract zip file!" | ||
|
||
$BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules | ||
MODULEROOT=$NVBASE/$MODDIRNAME | ||
MODID=`grep_prop id $TMPDIR/module.prop` | ||
MODPATH=$MODULEROOT/$MODID | ||
MODNAME=`grep_prop name $TMPDIR/module.prop` | ||
|
||
# Create mod paths | ||
rm -rf $MODPATH 2>/dev/null | ||
mkdir -p $MODPATH | ||
|
||
########## | ||
# Install | ||
########## | ||
|
||
if is_legacy_script; then | ||
unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2 | ||
|
||
# Load install script | ||
. $TMPDIR/install.sh | ||
|
||
# Callbacks | ||
print_modname | ||
on_install | ||
|
||
# Custom uninstaller | ||
[ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh | ||
|
||
# Skip mount | ||
$SKIPMOUNT && touch $MODPATH/skip_mount | ||
|
||
# prop file | ||
$PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop | ||
|
||
# Module info | ||
cp -af $TMPDIR/module.prop $MODPATH/module.prop | ||
|
||
# post-fs-data scripts | ||
$POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh | ||
|
||
# service scripts | ||
$LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh | ||
|
||
ui_print "- Setting permissions" | ||
set_permissions | ||
else | ||
print_modname | ||
|
||
unzip -o "$ZIPFILE" customize.sh -d $MODPATH >&2 | ||
|
||
if ! grep -q '^SKIPUNZIP=1$' $MODPATH/customize.sh 2>/dev/null; then | ||
ui_print "- Extracting module files" | ||
unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2 | ||
|
||
# Default permissions | ||
set_perm_recursive $MODPATH 0 0 0755 0644 | ||
fi | ||
|
||
# Load customization script | ||
[ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh | ||
fi | ||
|
||
# Handle replace folders | ||
for TARGET in $REPLACE; do | ||
ui_print "- Replace target: $TARGET" | ||
mktouch $MODPATH$TARGET/.replace | ||
done | ||
|
||
if $BOOTMODE; then | ||
# Update info for Magisk Manager | ||
mktouch $NVBASE/modules/$MODID/update | ||
cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop | ||
fi | ||
|
||
# Copy over custom sepolicy rules | ||
if [ -f $MODPATH/sepolicy.rule -a -e $PERSISTDIR ]; then | ||
ui_print "- Installing custom sepolicy patch" | ||
PERSISTMOD=$PERSISTDIR/magisk/$MODID | ||
mkdir -p $PERSISTMOD | ||
cp -af $MODPATH/sepolicy.rule $PERSISTMOD/sepolicy.rule | ||
fi | ||
|
||
# Remove stuffs that don't belong to modules | ||
rm -rf \ | ||
$MODPATH/system/placeholder $MODPATH/customize.sh \ | ||
$MODPATH/README.md $MODPATH/.git* 2>/dev/null | ||
|
||
############## | ||
# Finalizing | ||
############## | ||
|
||
cd / | ||
$BOOTMODE || recovery_cleanup | ||
rm -rf $TMPDIR | ||
|
||
ui_print "- Done" | ||
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,2 @@ | ||
#MAGISK | ||
#Xzhi |
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,6 @@ | ||
#!/system/bin/sh | ||
|
||
user_config_dir="/data/media/0/Android/Xzhi/custom-dir-mount" | ||
config_file="$user_config_dir/目录挂载.conf" | ||
log_file="$user_config_dir/run.log" | ||
mount_record_file="$user_config_dir/.勿删除勿修改" |
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,20 @@ | ||
ui_print " | ||
***************************************************************** | ||
* [Xzhi-自定义目录挂载]模块的配置文件路径: | ||
/storage/emulated/0/Android/Xzhi/custom-dir-mount/目录挂载.conf | ||
或 | ||
/data/media/0/Android/Xzhi/custom-dir-mount/目录挂载.conf | ||
* 如果是第一次安装,请在配置文件里添加需要挂载目录的路径。 | ||
***************************************************************** | ||
" | ||
|
||
source $MODPATH/constant.sh | ||
|
||
mkdir -p "$user_config_dir" | ||
[[ ! -f "$config_file" ]] && echo '#使用说明: | ||
#如果要添加注释,第一个字符一定加上#这个符号,否则模块可能出现异常 | ||
#格式(注意有空格):"源目录路径" "目标目录路径",例子: | ||
#应用双开-阿里云盘目录挂载 | ||
#"/data/media/999/AliYunPan" "/data/media/0/_Xzhi/目录挂载/阿里云盘"' >"$config_file" | ||
cp -f "$MODPATH/更新配置.sh" "$user_config_dir/更新配置.sh" |
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,12 @@ | ||
#!/system/bin/sh | ||
MODDIR="$(dirname "$0")" | ||
source $MODDIR/constant.sh | ||
|
||
log() { | ||
log_msg="[$(date "+%Y-%m-%d %H:%M:%S")] - $1" | ||
if [ -z "$2" ]; then | ||
echo $log_msg >>$log_file | ||
else | ||
echo $log_msg >$log_file | ||
fi | ||
} |
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,6 @@ | ||
id=Xzhi-custom-dir-mount | ||
name=Xzhi-自定义目录挂载 | ||
version=v2.0.65 | ||
versionCode=20230830 | ||
author=Xzhi | ||
description=配置文件路径:/storage/emulated/0/Android/Xzhi/custom-dir-mount/目录挂载.conf 或 /data/media/0/Android/Xzhi/custom-dir-mount/目录挂载.conf |
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,50 @@ | ||
#!/system/bin/sh | ||
MODDIR="$(dirname "$0")" | ||
source $MODDIR/constant.sh | ||
source $MODDIR/log.sh | ||
|
||
mount_dir() { | ||
log "开始读取配置文件" | ||
echo -n >$mount_record_file | ||
if [[ -f "$config_file" ]]; then | ||
# 读取配置文件 | ||
while IFS= read -r line || [[ -n "$line" ]]; do | ||
# 去除行两端的空格 | ||
line=$(echo "$line" | awk '{$1=$1};1') | ||
# 忽略没有内容的一行 | ||
if [ -z "$line" ]; then | ||
continue | ||
fi | ||
# 检查行末尾是否有换行符 | ||
if ! echo "$line" | grep -q $'\n'; then | ||
line="$line"$'\n' | ||
fi | ||
# 忽略以 "#" 开头的注释行 | ||
if [[ $line != \#* ]]; then | ||
# 分割行为源路径和目标路径 | ||
source_path=$(echo "$line" | awk '{print $1}') | ||
target_path=$(echo "$line" | awk '{print $2}') | ||
#去除路径中的双引号 | ||
source_path=$(sed 's/"//g' <<<"$source_path") | ||
target_path=$(sed 's/"//g' <<<"$target_path") | ||
[[ ! -d $target_path ]] && mkdir -p "$target_path" | ||
if [[ -d $source_path ]]; then | ||
mount -o make,private,gid=9997,uid=9997,bind,rw "$source_path" "$target_path" | ||
chcon u:object_r:media_rw_data_file:s0 "$source_path" | ||
chown media_rw:media_rw "$target_path" | ||
# chmod -R 2777 "$target_path" | ||
source_path_mount_record="${source_path%/}" | ||
echo $source_path_mount_record >>$mount_record_file | ||
log "目录挂载成功,源路径:$source_path >>> 目标路径:$target_path" | ||
else | ||
log "(T_T) 挂载失败,源路径:$source_path 不存在该目录 (T_T)" | ||
fi | ||
fi | ||
done <"$config_file" | ||
else | ||
log "(T_T) 配置文件$config_file 读取失败 (T_T)" | ||
fi | ||
log "^_^ 自定义目录挂载结束 ^_^" | ||
} | ||
|
||
mount_dir |
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,29 @@ | ||
#!/system/bin/sh | ||
MODDIR=${0%/*} | ||
source $MODDIR/log.sh | ||
|
||
system_init_check() { | ||
until [[ $(getprop sys.boot_completed) -eq 1 ]]; do | ||
sleep 2 | ||
done | ||
|
||
local test_file="/sdcard/Android/.test_file_Xzhi" | ||
touch $test_file | ||
while [[ ! -f $test_file ]]; do | ||
touch $test_file | ||
sleep 1 | ||
done | ||
rm $test_file | ||
} | ||
|
||
call_mount_dir() { | ||
log "^_^ 开启自定义目录挂载 ^_^" "清空历史日志" | ||
chown root:root $MODDIR/mount_dir.sh | ||
chmod 777 $MODDIR/mount_dir.sh | ||
/system/bin/sh $MODDIR/mount_dir.sh &>/dev/null & | ||
} | ||
|
||
system_init_check | ||
call_mount_dir | ||
|
||
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,61 @@ | ||
#!/system/bin/sh | ||
|
||
user_config_dir="/data/media/0/Android/Xzhi/custom-dir-mount" | ||
config_file="$user_config_dir/目录挂载.conf" | ||
log_file="$user_config_dir/run.log" | ||
mount_record_file="$user_config_dir/.勿删除勿修改" | ||
|
||
mount_dir() { | ||
log "^_^ 开始更新配置 ^_^" | ||
if [[ -f "$config_file" ]]; then | ||
# 读取配置文件 | ||
while IFS= read -r line || [[ -n "$line" ]]; do | ||
# 去除行两端的空格 | ||
line=$(echo "$line" | awk '{$1=$1};1') | ||
# 忽略没有内容的一行 | ||
if [ -z "$line" ]; then | ||
continue | ||
fi | ||
# 检查行末尾是否有换行符 | ||
if ! echo "$line" | grep -q $'\n'; then | ||
line="$line"$'\n' | ||
fi | ||
# 忽略以 "#" 开头的注释行 | ||
if [[ $line != \#* ]]; then | ||
# 分割行为源路径和目标路径 | ||
source_path=$(echo "$line" | awk '{print $1}') | ||
target_path=$(echo "$line" | awk '{print $2}') | ||
#去除路径中的双引号 | ||
source_path=$(sed 's/"//g' <<<"$source_path") | ||
target_path=$(sed 's/"//g' <<<"$target_path") | ||
[[ ! -d $target_path ]] && mkdir -p "$target_path" | ||
if [[ -d $source_path ]]; then | ||
#查询该源目录是否曾挂载成功过 | ||
source_path_mount_record="${source_path%/}" | ||
source_path_exist=$(grep "$source_path_mount_record" "$mount_record_file") | ||
if [[ -z $source_path_exist ]]; then | ||
mount -o make,private,gid=9997,uid=9997,bind,rw "$source_path" "$target_path" | ||
chcon u:object_r:media_rw_data_file:s0 "$source_path" | ||
chown media_rw:media_rw "$target_path" | ||
# chmod -R 2777 "$target_path" | ||
echo $source_path_mount_record >>$mount_record_file | ||
log "更新成功,源路径:$source_path >>> 目标路径:$target_path" | ||
else | ||
log "源路径:$source_path (包含子目录或父目录)已经挂载成功无需更新" | ||
fi | ||
else | ||
log "(T_T) 挂载失败,源路径:$source_path 不存在该目录 (T_T)" | ||
fi | ||
fi | ||
done <"$config_file" | ||
else | ||
log "(T_T) 配置文件$config_file 读取失败 (T_T)" | ||
fi | ||
log "^_^ 更新配置结束 ^_^" | ||
} | ||
|
||
log() { | ||
echo "[$(date "+%Y-%m-%d %H:%M:%S")] - $1" >>$log_file | ||
} | ||
|
||
mount_dir |