├── 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
--------------------------------------------------------------------------------