-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__runtime__.sh
More file actions
139 lines (122 loc) · 3.61 KB
/
Copy path__runtime__.sh
File metadata and controls
139 lines (122 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# shellcheck shell=ash
# __runtime__.sh
# 统一生命周期运行时:负责 KAM_HOME 初始化、PATH/LD_LIBRARY_PATH、以及 phase 调度
import __termux__
# -----------------------------
# KAM_HOME / HOME 初始化
# Lead 定案:KAM_HOME = $MODDIR
# -----------------------------
kamfw_init_home() {
# MODDIR 在入口脚本里通常已设置;这里做兜底
if [ -z "$MODDIR" ]; then
MODDIR=${0%/*}
export MODDIR
fi
export KAM_HOME="$MODDIR"
export HOME="$MODDIR"
# 约定目录(类 XDG,但根是 $MODDIR)
for _d in \
"$KAM_HOME/.config" \
"$KAM_HOME/.cache" \
"$KAM_HOME/.state" \
"$KAM_HOME/.log" \
"$KAM_HOME/.tmp"; do
[ -d "$_d" ] || mkdir -p "$_d" 2>/dev/null
done
unset _d
}
# -----------------------------
# Termux 环境(若可用则激活)
# -----------------------------
kamfw_init_termux() {
# __termux__ 内部可能会判断环境;这里保持调用幂等
active_termux_env
}
# -----------------------------
# PATH / LD_LIBRARY_PATH
# -----------------------------
kamfw_init_paths() {
# 优先模块自带 bin,再补齐 root manager 与系统常用路径
export PATH="$MODDIR/bin:/data/adb/magisk:/data/adb/ksu/bin:/system/bin:/system/xbin:/sbin:$PATH"
export LD_LIBRARY_PATH="$MODDIR/lib:$LD_LIBRARY_PATH"
}
# -----------------------------
# 生命周期调度(最小实现)
# 入口脚本应调用:kamfw run <phase> -- "$@"
# -----------------------------
kamfw() {
_cmd="${1:-help}"
[ $# -gt 0 ] && shift
case "$_cmd" in
run)
kamfw_run "$@"
;;
help|-h|--help)
printf '%s\n' "Usage: kamfw run <phase> -- [args...]"
;;
*)
# 兼容未来扩展
# 关键路径:输出必须走统一通道;error 失败视为框架未初始化,直接 abort。
error "Invalid kamfw command: $_cmd" || abort "Invalid kamfw command: $_cmd"
return 1
;;
esac
unset _cmd
}
kamfw_run() {
_phase="${1:-}"
[ -n "$_phase" ] || {
error "Missing phase" || abort "Missing phase"
return 2
}
shift
# 允许:kamfw run <phase> -- <args>
if [ "${1:-}" = "--" ]; then
shift
fi
kamfw_init_home
kamfw_init_termux
kamfw_init_paths
# Phase route: shell handlers are the runtime source of truth.
case "$_phase" in
install)
import __install_core__
kamfw_phase_install "$@"
;;
post-fs-data)
kamfw_phase_post_fs_data "$@"
;;
service)
kamfw_phase_service "$@"
;;
boot-completed)
kamfw_phase_boot_completed "$@"
;;
uninstall)
import __uninstall__
kamfw_phase_uninstall "$@"
;;
action)
kamfw_phase_action "$@"
;;
post-mount)
kamfw_phase_post_mount "$@"
;;
*)
# 关键路径:输出必须走统一通道;error 失败视为框架未初始化,直接 abort。
error "Unknown phase: $_phase" || abort "Unknown phase: $_phase"
return 2
;;
esac
unset _phase
}
# -----------------------------
# 默认 phase 实现(模板最小可运行;业务可覆盖这些函数)
# -----------------------------
kamfw_phase_install() { :; }
kamfw_phase_post_fs_data() { :; }
kamfw_phase_service() { :; }
kamfw_phase_boot_completed() { :; }
kamfw_phase_uninstall() { :; }
kamfw_phase_action() { :; }
kamfw_phase_post_mount() { :; }