├── META-INF └── com │ └── google │ └── android │ ├── update-binary │ └── updater-script ├── README.md ├── bin └── alist ├── control.sh ├── customize.sh ├── data ├── config.json └── data.db ├── module.prop ├── service.sh └── update.sh /META-INF/com/google/android/update-binary: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | ################# 4 | # Initialization 5 | ################# 6 | 7 | umask 022 8 | 9 | # echo before loading util_functions 10 | ui_print() { echo "$1"; } 11 | 12 | require_new_magisk() { 13 | ui_print "********************************" 14 | ui_print " Please install Magisk v20.4+! " 15 | ui_print "********************************" 16 | exit 1 17 | } 18 | 19 | ######################### 20 | # Load util_functions.sh 21 | ######################### 22 | 23 | OUTFD=$2 24 | ZIPFILE=$3 25 | 26 | mount /data 2>/dev/null 27 | 28 | [ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk 29 | . /data/adb/magisk/util_functions.sh 30 | [ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk 31 | 32 | install_module 33 | exit 0 34 | -------------------------------------------------------------------------------- /META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Alist-magisk 2 | 本模块的alist二进制文件来自termux的镜像源
3 | 模块默认开机自启alist进程
4 | 模块内提供的update.sh实现了自动对比源内版本号低于最新版时自动更新,检查循环为4小时一次
5 | 模块内control.sh用于检查magisk的启动开关
6 | -------------------------------------------------------------------------------- /bin/alist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Peooop/alist-magisk/94a7bab1d52d7130b41c78d95ec6aa0eef80fa20/bin/alist -------------------------------------------------------------------------------- /control.sh: -------------------------------------------------------------------------------- 1 | #!/system/bin/sh 2 | 3 | MODDIR="$(dirname "$(readlink -f "$0")")" 4 | 5 | get_local_ip() { 6 | # 获取本机局域网IP 7 | ip=$(ifconfig wlan0 | grep "inet addr" | awk '{print $2}' | awk -F ':' '{print $2}') 8 | 9 | # 打印IP地址 10 | echo "本机局域网IP地址:$ip" 11 | } 12 | 13 | while true; do 14 | 15 | if [ -f "/data/adb/modules/Alist/disable" ]; then 16 | pkill -f 'alist' 17 | else 18 | pgrep -f 'alist' >/dev/null || $MODDIR/bin/alist server --data "$MODDIR/data" & 19 | fi 20 | result=$(pgrep -f 'update.sh') 21 | if [ -n "$result" ]; then 22 | status="更新[开启中]" 23 | else 24 | status="更新[已停止]" 25 | fi 26 | replacement="$status $(get_local_ip)" 27 | 28 | sed -i "s/\(description=\).*/\1$replacement/g" "$MODDIR/module.prop" 29 | 30 | sleep 3 31 | done 32 | 33 | 34 | -------------------------------------------------------------------------------- /customize.sh: -------------------------------------------------------------------------------- 1 | #!/system/bin/sh 2 | MODDIR=${0%/*} 3 | 4 | ui_print "安装中,请稍等..." 5 | sleep 1 6 | ui_print "AList是一款提供多个储存挂载服务的开源程序" 7 | ui_print "你可以挂载市面上大部分网盘如: 阿里云盘 百度网盘 蓝奏云等 使其便于管理" 8 | ui_print "Alist支持webdav协议使其可以桥接市面大部分观影阅读软件" 9 | ui_print "你可以尽情享受原画观影的快乐" 10 | 11 | ui_print "网页后台登录地址:http://127.0.0.1:5244 账户 admin 密码 5244" 12 | 13 | sleep 1 14 | ui_print "安装已完成,请重启 ↘" 15 | 16 | -------------------------------------------------------------------------------- /data/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "force": false, 3 | "address": "0.0.0.0", 4 | "port": 5244, 5 | "jwt_secret": "gs8032l9Z2D2xmmF", 6 | "cdn": "", 7 | "database": { 8 | "type": "sqlite3", 9 | "host": "", 10 | "port": 0, 11 | "user": "", 12 | "password": "", 13 | "name": "", 14 | "db_file": "/data/adb/modules/Alist/data/data.db", 15 | "table_prefix": "x_", 16 | "ssl_mode": "" 17 | }, 18 | "scheme": { 19 | "https": false, 20 | "cert_file": "", 21 | "key_file": "" 22 | }, 23 | "temp_dir": "/data/adb/modules/Alist/data/temp", 24 | "log": { 25 | "enable": true, 26 | "name": "/data/adb/modules/Alist/data/log/log.log", 27 | "max_size": 10, 28 | "max_backups": 5, 29 | "max_age": 28, 30 | "compress": false 31 | } 32 | } -------------------------------------------------------------------------------- /data/data.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Peooop/alist-magisk/94a7bab1d52d7130b41c78d95ec6aa0eef80fa20/data/data.db -------------------------------------------------------------------------------- /module.prop: -------------------------------------------------------------------------------- 1 | id=Alist 2 | name=Alist 3 | version=v 4 | versionCode=400 5 | author=酷安@七七琴979 6 | description=一款支持多个存储挂载的文件列表程序,并且支持webdav协议,享受Alist带来的网盘管理便捷吧! 7 | -------------------------------------------------------------------------------- /service.sh: -------------------------------------------------------------------------------- 1 | #!/system/bin/sh 2 | 3 | MODDIR="$(dirname "$(readlink -f "$0")")" 4 | 5 | # 赋予执行权限 6 | chmod 755 "$MODDIR"/bin/alist 7 | 8 | # 等待系统启动成功 9 | while [ "$(getprop sys.boot_completed)" != "1" ]; do 10 | sleep 5s 11 | done 12 | 13 | # 防止系统挂起 14 | echo "PowerManagerService.noSuspend" > /sys/power/wake_lock 15 | 16 | # 启动 alist 服务 17 | "$MODDIR"/bin/alist server --data "$MODDIR"/data & 18 | 19 | # 启动 update.sh 服务 20 | /system/bin/sh "$MODDIR"/update.sh & 21 | 22 | # 启动 control.sh 服务 23 | /system/bin/sh "$MODDIR"/control.sh & 24 | -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | #!/system/bin/sh 2 | 3 | # 获取当前脚本所在目录 4 | MODDIR="$(dirname "$(readlink -f "$0")")" 5 | 6 | # busybox的路径地址 7 | BUSYBOX_PATH="/data/adb/magisk/busybox:/data/adb/ksu/bin/busybox" 8 | BUSYBOX="" 9 | 10 | # 架构 11 | ARCH=$(uname -m) 12 | 13 | # 更新的源 14 | URL="https://packages-cf.termux.dev/apt/termux-main/pool/main/a/alist/" 15 | 16 | # 最新版本号 17 | get_latest_version() { 18 | url_version="$("${BUSYBOX}" wget -q --no-check-certificate -O - "${URL}" | grep -o 'alist_[^"]*' | sed 's/alist_//' | grep '_'"${ARCH}"'.deb$' | sed 's/_'"${ARCH}"'\.deb//' | tail -n 1)" 19 | } 20 | 21 | # 本地版本号 22 | get_version() { 23 | version="$("${MODDIR}/bin/alist" version | awk '/^Version:/ {print $2}')" 24 | } 25 | 26 | # 检查网络连通性函数 27 | check_connectivity() { 28 | if ! ping -q -c 1 -W 1 www.baidu.com >/dev/null; then 29 | sleep 5s 30 | return 1 31 | fi 32 | return 0 33 | } 34 | 35 | # 找到可用的busybox路径 36 | find_busybox() { 37 | for path in $(echo $BUSYBOX_PATH | tr ":" "\n"); do 38 | if [ -f "$path" ]; then 39 | BUSYBOX="$path" 40 | break 41 | fi 42 | done 43 | } 44 | 45 | # 删除大于1MB的log.log文件 46 | delete_log() { 47 | log_size=$(wc -c < "${MODDIR}/log.log") 48 | if [ "$log_size" -gt 1048576 ]; then 49 | rm "${MODDIR}/log.log" 50 | fi 51 | } 52 | 53 | # 下载并解压更新包 54 | download_and_extract() { 55 | Alist_file="alist_${url_version}_${ARCH}.deb" 56 | mkdir -p "${MODDIR}/tmp" 57 | "${BUSYBOX}" wget -O "${MODDIR}/tmp/${Alist_file}" "${URL}${Alist_file}" 58 | chmod 755 "${MODDIR}/tmp/${Alist_file}" 59 | "${BUSYBOX}" ar -p "${MODDIR}/tmp/${Alist_file}" data.tar.xz > "${MODDIR}/tmp/data.tar.xz" && "${BUSYBOX}" tar -xf "${MODDIR}/tmp/data.tar.xz" -C "${MODDIR}/tmp" 60 | mv -f "${MODDIR}/tmp/data/data/com.termux/files/usr/bin/alist" "${MODDIR}/bin/alist" 61 | chmod 755 "${MODDIR}/bin/alist" 62 | rm -r "${MODDIR}/tmp" 63 | } 64 | 65 | # 比较版本号函数 66 | version_ge() { 67 | test "$(echo -e "$1\n$2" | sort -V | tail -n 1)" = "$2" 68 | } 69 | 70 | # 更新列表并重启进程 71 | update_and_restart() { 72 | get_version 73 | echo "[$(date "+%Y-%m-%d %H:%M:%S")] v${version},更新后" >> "${MODDIR}/log.log" 74 | sed -i "s/^version=.*/version=v${version}/g" "${MODDIR}/module.prop" 75 | if pgrep -f 'alist' >/dev/null; then 76 | pkill alist 77 | fi 78 | "${MODDIR}/bin/alist" server --data "${MODDIR}/data" & 79 | } 80 | 81 | # 更新失败 82 | handle_failed_update() { 83 | echo "[$(date "+%Y-%m-%d %H:%M:%S")] 更新失败!" >> "${MODDIR}/log.log" 84 | } 85 | 86 | # 更新检测 87 | check_and_update_version() { 88 | # 获取最新版本号 89 | retry_times=0 90 | while true; do 91 | get_latest_version 92 | 93 | if [ -n "$url_version" ]; then 94 | break 95 | fi 96 | 97 | ((retry_times++)) 98 | if [ $((retry_times % 60)) -eq 0 ]; then 99 | echo "[$(date "+%Y-%m-%d %H:%M:%S")] 获取URL版本号失败..." >> "${MODDIR}/log.log" 100 | fi 101 | 102 | sleep 30m 103 | done 104 | 105 | if [ ! -x "${MODDIR}/bin/alist" ]; then 106 | echo "[$(date "+%Y-%m-%d %H:%M:%S")] ${MODDIR}/bin/alist 未找到,直接从URL进行更新..." >> "${MODDIR}/log.log" 107 | download_and_extract 108 | update_and_restart 109 | return 110 | fi 111 | 112 | get_version 113 | if version_ge "${url_version}" "${version}"; then 114 | echo "[$(date "+%Y-%m-%d %H:%M:%S")] v${version},最新版本" >> "${MODDIR}/log.log" 115 | sed -i "s/^version=.*/version=v${version}/g" "${MODDIR}/module.prop" 116 | else 117 | echo "[$(date "+%Y-%m-%d %H:%M:%S")] v${version},更新中..." >> "${MODDIR}/log.log" 118 | 119 | download_and_extract 120 | 121 | max_attempts=3 # 最大尝试次数 122 | attempt=1 # 当前尝试次数 123 | 124 | while [ $attempt -le $max_attempts ]; do 125 | sleep 10s 126 | get_version 127 | if [[ "${url_version}" == "${version}" ]]; then 128 | update_and_restart 129 | break 130 | else 131 | ((attempt++)) 132 | if [ $attempt -gt $max_attempts ]; then 133 | handle_failed_update 134 | break 135 | fi 136 | download_and_extract 137 | fi 138 | done 139 | fi 140 | } 141 | 142 | # 查找并设置busybox路径 143 | find_busybox 144 | 145 | while true; do 146 | delete_log 147 | if ! check_connectivity; then 148 | sleep 5s 149 | continue 150 | fi 151 | check_and_update_version 152 | sleep 3h 153 | done --------------------------------------------------------------------------------