-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjiji.sh
More file actions
129 lines (129 loc) · 4.42 KB
/
jiji.sh
File metadata and controls
129 lines (129 loc) · 4.42 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
#!/bin/sh
R='\e[1;31m'; G='\e[1;32m'; Y='\e[1;33m'; C='\e[1;36m'; B='\e[1;34m'; P='\e[1;35m'; NC='\e[0m'
T=砖寄脚本 S=开始 E1=":无" D=请 DL=独立 FB=fastboot ML=命令 A1=A槽 F2=vbmeta R1=到 R3=手动 R4=fastbootd C1=COW F3=逻辑 F4=格式化 OK=成功 FAIL=失败 TG=跳过 SC=删除 SF="是否(y/N)" CQ=重启 SR=刷入 JC=检测 BL=bootloader FQ=分区 JX=继续 SB=失败 S1=设备 YI=已 DD=等待 MS=模式 WC=错误 CS=超时 ZZ=正在 QR=确认 JR=进入 LJ=连接 W=耐心 YJ=依据 WZ=未知 GE=个 AH=按回车键 SK="(无此文件)"
# 镜像文件所在的目录"." 代表与脚本在同一个目录
imgs="images"
L="./flash.log"
#刷写列表
#bootloader模式刷写列表
ps="modem dtbo boot vendor_boot init_boot recovery"
#fastbootd刷写列表↓
#独立分区刷写列表 (例如: frp, persist等)如无留空
ns="" #以实际情况修改
#临时分区清理列表
cows="my_bigball my_carrier my_engineering my_heytap my_manifest my_product my_region my_stock odm product system system_dlkm system_ext vendor vendor_dlkm"
#a/b分区及逻辑分区刷写列表
fd="odm product system system_dlkm system_ext vendor vendor_dlkm"
fmt_bytes() {
echo "$1" | awk '
function human(x) {
s="BKMGT";
while (x >= 1024 && length(s) > 1) { x /= 1024; s = substr(s, 2); }
return sprintf("%.1f%s", x, substr(s, 1, 1));
}
{print human($1)}'
}
CG=0
sd=0
check_ab() {
fastboot getvar slot-count 2>&1 | grep -q "slot-count: 2" && sd=1
}
wd(){
local m=$1 t=$2 s=$3 f=$4 c=0
log "${DD}${m}${LJ}(${t}s)..."
while [ $c -lt $t ]; do
if fastboot devices | grep -q fastboot; then
log "\n${G}✓${S1}${YI}${LJ}${NC}"
read -p "${Y}${QR}${S1}${JR}${m}${MS}?${SF}${NC} " a
[[ "$a" == [Yy]* ]] && { log "${G}✓$s${NC}"; return 0; } || log "${R}${MS}${WC}${NC}"
fi
printf "."; sleep 1; c=$((c+1))
done
log "\n${R}✗$f${NC}"; return 1
}
#刷写函数
f() {
local p=$1 s=$2
local img="$imgs/${p}.img"
[ -f "$img" ] || { log "${B}-${NC} ${p}${s:+_$s} ${Y}${TG}${SK}${NC}"; return 1; }
local s_bytes=$(size "$img")
local s_human=$(fmt_bytes "$s_bytes")
CG=$((CG+1)); local C_COUNT=$(printf "%03d" $CG)
run "fastboot flash ${p}${s:+_$s} $img" "${SR} ${C}${p}${s:+_$s}${NC}->${p}.img ${P}[${s_human}]${NC}" "$C_COUNT"
}
fs() {
local p=$1
local count_before=$CG
if [ $sd -eq 1 ]; then
f "$p" a
[ $? -eq 0 ] && f "$p" b && CG=$((count_before + 1))
else
f "$p" ""
fi
}
echo "$(date)" > $L
log(){ echo -e "$1"|awk '{gsub(/\033\[[0-9;]*m/,"");gsub(/\033\[[0-9;]*[KG]/,"");print}'>>"$L";echo -e "$1";}
size() {
#使用 stat -c%s 获取镜像大小 无文件输出0
[ -f "$1" ] && stat -c%s "$1" || echo "0"
}
run() {
o=$(eval "$1" 2>&1);e=$?;echo "$o">>"$L"
if [ $e -eq 0 ] && ! echo "$o"|grep -qi "fail\|error\|no such\|cannot";then
log "${B}$3${NC} $2 ${G}${OK}${NC}";return 0
else
echo "${ML}${SB}: $1">>"$L";echo -e "${R}${WC}:${NC}\n$o"
log "${Y}${SB},${QR}${JX}?${SF}${NC}";read a
case $a in [Yy]*) return 0;; *) exit 1;; esac
fi
}
main() {
log "${G}${T}${NC}"
log "${Y}${AH}${S}${NC}"
read var
log "${B}${NC}${JC}${LJ}${S1}"
if ! wd "bootloader" 9 "${S1}${LJ}${OK}" "${S1}${LJ}${SB}"; then
log "${Y}${D}${JR}${FB}${MS}${NC}"
exit 1
fi
check_ab
read -p "${Y}${SF}${F4}?${NC}" a
[[ "$a" == [Yy]* ]] && run "fastboot -w" "${F4}" "-" || log "${F4}${SK}"
log "${B}${NC} ${SR}${FQ}..."
for p in $ps; do
fs "$p"
done
log "${B}${NC} ${SR}${F2}${FQ}..."
for p in "vbmeta" "vbmeta_system" "vbmeta_vendor"; do
fs "$p"
done
# 重启到fastbootd
log "${B}${NC} ${CQ}${R1}${R4}${MS}..."
run "fastboot reboot fastboot" "${CQ}${R1}${R4}${MS}"
if ! wd "fastbootd" 9 "${YI}${JR}" "${DD}${R4}${CS}"; then
log "${R}${D}${R3}${JR}${R4}${NC}"; exit 1;
fi
log "${B}${NC} ${SC}${C1}${FQ}..."
for p in $cows;do for s in a b;do run "fastboot delete-logical-partition ${p}_${s}-cow" "${SC} ${C}${p}_${s}-cow${NC}" "-";done;done
if [ -n "$ns" ]; then
log "${B}${NC} ${SR}${DL}${FQ}...${NC}"
for p in $ns; do
f "$p" ""
done
fi #如 跳过
log "${B}${NC} ${SR}${F3}${FQ}..."
for p in $fd; do
fs "$p"
done
log "${G}${OK}${SR}${CG}${GE}${FQ}${NC}"
log "${B}${NC} ${CQ}${R1}${BL}${MS}..."
run "fastboot reboot bootloader" "${CQ}${R1}${BL}${MS}"
if ! wd "bootloader" 9 "${YI}${JR}" "${DD}${BL}${CS}"; then
log "${R}${D}${R3}${JR}${BL}${NC}"; exit 1;
fi
log "${G}${AH}${CQ}${NC}"
read var
run "fastboot reboot" "${CQ}${S1}" "-"
log "${Y}${W}${DD}${NC}"
}
main