bugfix
This commit is contained in:
@@ -878,12 +878,15 @@
|
|||||||
"SM-F9360" "Galaxy Z Fold4"
|
"SM-F9360" "Galaxy Z Fold4"
|
||||||
"SM-F9460" "Galaxy Z Fold5"
|
"SM-F9460" "Galaxy Z Fold5"
|
||||||
"SM-F9560" "Galaxy Z Fold6"
|
"SM-F9560" "Galaxy Z Fold6"
|
||||||
|
"SM-F9660" "Galaxy Z Fold7"
|
||||||
"SM-F7000" "Galaxy Z Flip"
|
"SM-F7000" "Galaxy Z Flip"
|
||||||
"SM-F7070" "Galaxy Z Flip 5G"
|
"SM-F7070" "Galaxy Z Flip 5G"
|
||||||
"SM-F7110" "Galaxy Z Flip3 5G"
|
"SM-F7110" "Galaxy Z Flip3 5G"
|
||||||
"SM-F7210" "Galaxy Z Flip4"
|
"SM-F7210" "Galaxy Z Flip4"
|
||||||
"SM-F7310" "Galaxy Z Flip5"
|
"SM-F7310" "Galaxy Z Flip5"
|
||||||
"SM-F7410" "Galaxy Z Flip6"
|
"SM-F7410" "Galaxy Z Flip6"
|
||||||
|
"SM-F7660" "Galaxy Z Flip7"
|
||||||
|
"SM-F7610" "Galaxy Z Flip7 FE"
|
||||||
"SM-A3000" "Galaxy A3 公開版"
|
"SM-A3000" "Galaxy A3 公開版"
|
||||||
"SM-A3009" "Galaxy A3 電信定制版"
|
"SM-A3009" "Galaxy A3 電信定制版"
|
||||||
"SM-A5000" "Galaxy A5 公開版"
|
"SM-A5000" "Galaxy A5 公開版"
|
||||||
@@ -1076,6 +1079,11 @@
|
|||||||
"SM-L310" "Galaxy Watch7 藍牙版 44mm"
|
"SM-L310" "Galaxy Watch7 藍牙版 44mm"
|
||||||
"SM-L3150" "Galaxy Watch7 LTE 44mm"
|
"SM-L3150" "Galaxy Watch7 LTE 44mm"
|
||||||
"SM-L7050" "Galaxy Watch Ultra LTE 47mm"
|
"SM-L7050" "Galaxy Watch Ultra LTE 47mm"
|
||||||
|
"SM-L320" "Galaxy Watch8 藍牙版 40mm"
|
||||||
|
"SM-L330" "Galaxy Watch8 藍牙版 44mm"
|
||||||
|
"SM-L3350" "Galaxy Watch8 LTE 44mm"
|
||||||
|
"SM-L500" "Galaxy Watch8 Classic 藍牙版 46mm"
|
||||||
|
"SM-L5050" "Galaxy Watch8 Classic LTE 46mm"
|
||||||
"SM-G970F" "Galaxy S10e Global"
|
"SM-G970F" "Galaxy S10e Global"
|
||||||
"SM-G970N" "Galaxy S10e South Korea"
|
"SM-G970N" "Galaxy S10e South Korea"
|
||||||
"SM-G970U" "Galaxy S10e US Carrier"
|
"SM-G970U" "Galaxy S10e US Carrier"
|
||||||
@@ -1351,6 +1359,13 @@
|
|||||||
"SCG28" "Galaxy Z Fold6 Japan (au)"
|
"SCG28" "Galaxy Z Fold6 Japan (au)"
|
||||||
"SC-55E" "Galaxy Z Fold6 Japan (NTT Docomo)"
|
"SC-55E" "Galaxy Z Fold6 Japan (NTT Docomo)"
|
||||||
"SM-F958N" "Galaxy Z Fold Special Edition South Korea"
|
"SM-F958N" "Galaxy Z Fold Special Edition South Korea"
|
||||||
|
"SM-F966B" "Galaxy Z Fold7 Global"
|
||||||
|
"SM-F966U" "Galaxy Z Fold7 US Carrier"
|
||||||
|
"SM-F966U1" "Galaxy Z Fold7 US Unlocked"
|
||||||
|
"SM-F966W" "Galaxy Z Fold7 Canada"
|
||||||
|
"SM-F966N" "Galaxy Z Fold7 South Korea"
|
||||||
|
"SM-F966Q" "Galaxy Z Fold7 Japan (SIM Free)"
|
||||||
|
"SM-F966Z" "Galaxy Z Fold7 Japan (SoftBank)"
|
||||||
"SM-F700F" "Galaxy Z Flip Global"
|
"SM-F700F" "Galaxy Z Flip Global"
|
||||||
"SM-F700U" "Galaxy Z Flip US Carrier"
|
"SM-F700U" "Galaxy Z Flip US Carrier"
|
||||||
"SM-F700U1" "Galaxy Z Flip US Unlocked"
|
"SM-F700U1" "Galaxy Z Flip US Unlocked"
|
||||||
@@ -1394,6 +1409,17 @@
|
|||||||
"SM-F741Q" "Galaxy Z Flip6 Japan (SIM Free)"
|
"SM-F741Q" "Galaxy Z Flip6 Japan (SIM Free)"
|
||||||
"SCG29" "Galaxy Z Flip6 Japan (au)"
|
"SCG29" "Galaxy Z Flip6 Japan (au)"
|
||||||
"SC-54E" "Galaxy Z Flip6 Japan (NTT Docomo)"
|
"SC-54E" "Galaxy Z Flip6 Japan (NTT Docomo)"
|
||||||
|
"SM-F766B" "Galaxy Z Flip7 Global"
|
||||||
|
"SM-F766U" "Galaxy Z Flip7 US Carrier"
|
||||||
|
"SM-F766U1" "Galaxy Z Flip7 US Unlocked"
|
||||||
|
"SM-F766W" "Galaxy Z Flip7 Canada"
|
||||||
|
"SM-F766N" "Galaxy Z Flip7 South Korea"
|
||||||
|
"SM-F766Q" "Galaxy Z Flip7 Japan (SIM Free)"
|
||||||
|
"SM-F766Z" "Galaxy Z Flip7 Japan (SoftBank)"
|
||||||
|
"SM-F761B" "Galaxy Z Flip7 FE Global"
|
||||||
|
"SM-F761U" "Galaxy Z Flip7 FE US Carrier"
|
||||||
|
"SM-F761U1" "Galaxy Z Flip7 FE US Unlocked"
|
||||||
|
"SM-F761N" "Galaxy Z Flip7 FE South Korea"
|
||||||
"SM-A015F" "Galaxy A01 Global"
|
"SM-A015F" "Galaxy A01 Global"
|
||||||
"SM-A015U" "Galaxy A01 US Carrier"
|
"SM-A015U" "Galaxy A01 US Carrier"
|
||||||
"SM-A015U1" "Galaxy A01 US Unlocked"
|
"SM-A015U1" "Galaxy A01 US Unlocked"
|
||||||
@@ -1958,6 +1984,7 @@
|
|||||||
"TB128FU" "小新 Pad 2022"
|
"TB128FU" "小新 Pad 2022"
|
||||||
"TB331FC" "小新 Pad 2024"
|
"TB331FC" "小新 Pad 2024"
|
||||||
"TB335FC" "小新平板 11"
|
"TB335FC" "小新平板 11"
|
||||||
|
"TB365FC" "小新平板 12.1"
|
||||||
"Lenovo TB-J607F" "小新 Pad Plus"
|
"Lenovo TB-J607F" "小新 Pad Plus"
|
||||||
"Lenovo TB-J607Z" "小新 Pad Plus 5G"
|
"Lenovo TB-J607Z" "小新 Pad Plus 5G"
|
||||||
"TB350XC" "小新 Pad Plus 2023"
|
"TB350XC" "小新 Pad Plus 2023"
|
||||||
@@ -1970,6 +1997,7 @@
|
|||||||
"TB371FC" "小新 Pad Pro 12.7 驍龍版"
|
"TB371FC" "小新 Pad Pro 12.7 驍龍版"
|
||||||
"TB370FU" "小新 Pad Pro 12.7 天璣版"
|
"TB370FU" "小新 Pad Pro 12.7 天璣版"
|
||||||
"TB375FC" "小新 Pad Pro 12.7 2025"
|
"TB375FC" "小新 Pad Pro 12.7 2025"
|
||||||
|
"TB710FU" "小新平板 Pro GT"
|
||||||
"TB351FU" "小新 Pad Studio"
|
"TB351FU" "小新 Pad Studio"
|
||||||
"Lenovo YT3-850F" "YOGA Tab 3 8” Wi-Fi 版"
|
"Lenovo YT3-850F" "YOGA Tab 3 8” Wi-Fi 版"
|
||||||
"Lenovo YT3-850L" "YOGA Tab 3 8” LTE 版"
|
"Lenovo YT3-850L" "YOGA Tab 3 8” LTE 版"
|
||||||
@@ -2793,6 +2821,9 @@
|
|||||||
"RMX5057" "realme 14 Pro 5G Global"
|
"RMX5057" "realme 14 Pro 5G Global"
|
||||||
"RMX5051" "realme 14 Pro+ 5G India"
|
"RMX5051" "realme 14 Pro+ 5G India"
|
||||||
"RMX5054" "realme 14 Pro+ 5G Global"
|
"RMX5054" "realme 14 Pro+ 5G Global"
|
||||||
|
"RMX5106" "realme 15 5G"
|
||||||
|
"RMX5101" "realme 15 Pro 5G"
|
||||||
|
"RMX5111" "realme 15T 5G"
|
||||||
"RMX1921" "realme XT Global"
|
"RMX1921" "realme XT Global"
|
||||||
"RMX1922" "realme XT India"
|
"RMX1922" "realme XT India"
|
||||||
"RMX1992" "realme X2 India"
|
"RMX1992" "realme X2 India"
|
||||||
@@ -2857,6 +2888,7 @@
|
|||||||
"RMX3963" "realme C75 5G Global"
|
"RMX3963" "realme C75 5G Global"
|
||||||
"RMX5020" "realme C75x"
|
"RMX5020" "realme C75x"
|
||||||
"RMX3938" "realme Note 60x"
|
"RMX3938" "realme Note 60x"
|
||||||
|
"RMX5313" "realme Note 70 / realme Note 70T"
|
||||||
"RMX1833" "realme U1"
|
"RMX1833" "realme U1"
|
||||||
"RMX3870" "realme P1 5G"
|
"RMX3870" "realme P1 5G"
|
||||||
"RMX3844" "realme P1 Pro 5G"
|
"RMX3844" "realme P1 Pro 5G"
|
||||||
@@ -3030,6 +3062,8 @@
|
|||||||
"V2442A" "vivo Y37c"
|
"V2442A" "vivo Y37c"
|
||||||
"V1965A" "vivo Y50"
|
"V1965A" "vivo Y50"
|
||||||
"V2023EA" "vivo Y50t"
|
"V2023EA" "vivo Y50t"
|
||||||
|
"V2443A" "vivo Y37t 5G / vivo Y50 5G"
|
||||||
|
"V2443BA" "vivo Y50m 5G"
|
||||||
"V2002A" "vivo Y51s 5G"
|
"V2002A" "vivo Y51s 5G"
|
||||||
"V2057A" "vivo Y52s 5G"
|
"V2057A" "vivo Y52s 5G"
|
||||||
"V2111A" "vivo Y53s 5G"
|
"V2111A" "vivo Y53s 5G"
|
||||||
@@ -3070,6 +3104,7 @@
|
|||||||
"V2445EA" "vivo Y300t 5G / vivo Y300+ 5G"
|
"V2445EA" "vivo Y300t 5G / vivo Y300+ 5G"
|
||||||
"V2452GA" "vivo Y300 GT 5G"
|
"V2452GA" "vivo Y300 GT 5G"
|
||||||
"V2115A" "vivo T1"
|
"V2115A" "vivo T1"
|
||||||
|
"V2199GA" "vivo T2"
|
||||||
"V2188A" "vivo T2x"
|
"V2188A" "vivo T2x"
|
||||||
"V1801A0" "vivo Z1"
|
"V1801A0" "vivo Z1"
|
||||||
"V1730DA" "vivo Z1i 全網通版"
|
"V1730DA" "vivo Z1i 全網通版"
|
||||||
@@ -3087,7 +3122,7 @@
|
|||||||
"V1963A" "vivo Z6 5G"
|
"V1963A" "vivo Z6 5G"
|
||||||
"V1928A" "vivo U3x 全網通版"
|
"V1928A" "vivo U3x 全網通版"
|
||||||
"V1928T" "vivo U3x 移動全網通版"
|
"V1928T" "vivo U3x 移動全網通版"
|
||||||
"V1962BA" "vivo G1 5G"
|
"V1962BA" "vivo G1"
|
||||||
"V1824BA" "iQOO (6GB+128GB)"
|
"V1824BA" "iQOO (6GB+128GB)"
|
||||||
"V1824A" "iQOO (8GB+128GB/8GB+256GB/12GB+128GB/12GB+256GB)"
|
"V1824A" "iQOO (8GB+128GB/8GB+256GB/12GB+128GB/12GB+256GB)"
|
||||||
"V1922A" "iQOO Pro 全網通版"
|
"V1922A" "iQOO Pro 全網通版"
|
||||||
@@ -3215,6 +3250,7 @@
|
|||||||
"V2415" "vivo X200"
|
"V2415" "vivo X200"
|
||||||
"V2413" "vivo X200 Pro"
|
"V2413" "vivo X200 Pro"
|
||||||
"V2505" "vivo X200 FE"
|
"V2505" "vivo X200 FE"
|
||||||
|
"V2429" "vivo X Fold5"
|
||||||
"vivo 1819" "vivo V15"
|
"vivo 1819" "vivo V15"
|
||||||
"vivo 1920" "vivo V17"
|
"vivo 1920" "vivo V17"
|
||||||
"vivo 1907" "vivo V17 Neo"
|
"vivo 1907" "vivo V17 Neo"
|
||||||
@@ -3277,6 +3313,7 @@
|
|||||||
"V2502" "vivo T4 5G"
|
"V2502" "vivo T4 5G"
|
||||||
"V2437" "vivo T4x 5G"
|
"V2437" "vivo T4x 5G"
|
||||||
"V2509" "vivo T4 Lite 5G"
|
"V2509" "vivo T4 Lite 5G"
|
||||||
|
"V2518" "vivo T4R 5G"
|
||||||
"vivo 2015_21" "vivo Y1s"
|
"vivo 2015_21" "vivo Y1s"
|
||||||
"V2044" "vivo Y3s"
|
"V2044" "vivo Y3s"
|
||||||
"vivo 1902" "vivo Y5"
|
"vivo 1902" "vivo Y5"
|
||||||
@@ -3379,6 +3416,8 @@
|
|||||||
"V2416" "vivo Y300 5G"
|
"V2416" "vivo Y300 5G"
|
||||||
"V2422" "vivo Y300+ 5G"
|
"V2422" "vivo Y300+ 5G"
|
||||||
"V2402" "vivo Y300 Pro 5G"
|
"V2402" "vivo Y300 Pro 5G"
|
||||||
|
"V2506" "vivo Y400 5G"
|
||||||
|
"V2439" "vivo Y400 Pro 5G"
|
||||||
"I1927" "iQOO 3 4G"
|
"I1927" "iQOO 3 4G"
|
||||||
"I1928" "iQOO 3 5G"
|
"I1928" "iQOO 3 5G"
|
||||||
"I2009" "iQOO 7 Global"
|
"I2009" "iQOO 7 Global"
|
||||||
@@ -3415,6 +3454,7 @@
|
|||||||
"I2407" "iQOO Z10 5G"
|
"I2407" "iQOO Z10 5G"
|
||||||
"I2404" "iQOO Z10x 5G"
|
"I2404" "iQOO Z10x 5G"
|
||||||
"I2409" "iQOO Z10 Lite 5G"
|
"I2409" "iQOO Z10 Lite 5G"
|
||||||
|
"I2410" "iQOO Z10R 5G"
|
||||||
"PAFM00" "OPPO Find X 標準版 全網通版"
|
"PAFM00" "OPPO Find X 標準版 全網通版"
|
||||||
"PAFT00" "OPPO Find X 標準版 移動版"
|
"PAFT00" "OPPO Find X 標準版 移動版"
|
||||||
"PAHM00" "OPPO Find X 超級閃充版/蘭博基尼版 全網通版"
|
"PAHM00" "OPPO Find X 超級閃充版/蘭博基尼版 全網通版"
|
||||||
@@ -3593,7 +3633,8 @@
|
|||||||
"PKS110" "OPPO K12 Plus"
|
"PKS110" "OPPO K12 Plus"
|
||||||
"PJT110" "OPPO K12x"
|
"PJT110" "OPPO K12x"
|
||||||
"PLD110" "OPPO K12s"
|
"PLD110" "OPPO K12s"
|
||||||
"PLM110" "OPPO K13"
|
"PLM110" "OPPO K13 Turbo"
|
||||||
|
"PLE110" "OPPO K13 Turbo Pro"
|
||||||
"OPD2101" "OPPO Pad"
|
"OPD2101" "OPPO Pad"
|
||||||
"OPD2102" "OPPO Pad Air"
|
"OPD2102" "OPPO Pad Air"
|
||||||
"OPD2201" "OPPO Pad 2"
|
"OPD2201" "OPPO Pad 2"
|
||||||
|
|||||||
Binary file not shown.
242
tools/tools.sh
242
tools/tools.sh
@@ -172,9 +172,6 @@ cdn=${cdn:-1}
|
|||||||
#恢復模式(1恢復未安裝應用 0全恢復)
|
#恢復模式(1恢復未安裝應用 0全恢復)
|
||||||
recovery_mode="${recovery_mode:-0}"
|
recovery_mode="${recovery_mode:-0}"
|
||||||
|
|
||||||
#恢復Magisk模塊
|
|
||||||
modules_recovery="${modules_recovery:-0}"
|
|
||||||
|
|
||||||
#恢復資料夾
|
#恢復資料夾
|
||||||
media_recovery="${media_recovery:-0}"
|
media_recovery="${media_recovery:-0}"
|
||||||
|
|
||||||
@@ -182,7 +179,7 @@ media_recovery="${media_recovery:-0}"
|
|||||||
Background_apps_ignore="${Background_apps_ignore:-0}"
|
Background_apps_ignore="${Background_apps_ignore:-0}"
|
||||||
|
|
||||||
#使用者(如0 999等用戶,留空如存在多個用戶強制音量鍵選擇,無多用戶則默認0不詢問)
|
#使用者(如0 999等用戶,留空如存在多個用戶強制音量鍵選擇,無多用戶則默認0不詢問)
|
||||||
user=
|
user="$user"
|
||||||
|
|
||||||
#主色
|
#主色
|
||||||
rgb_a="${rgb_a:-226}"
|
rgb_a="${rgb_a:-226}"
|
||||||
@@ -323,7 +320,7 @@ while read -r file expected_hash; do
|
|||||||
if [[ $computed_hash = $expected_hash ]]; then
|
if [[ $computed_hash = $expected_hash ]]; then
|
||||||
echoRgb "✅ $file: 驗證通過"
|
echoRgb "✅ $file: 驗證通過"
|
||||||
else
|
else
|
||||||
echoRgb "❌ $tools_path/$file: SHA-256 不一致"
|
echoRgb "❌ $tools_path/$file: SHA-256 不一致\n -\"$computed_hash\""
|
||||||
quit=2
|
quit=2
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@@ -335,7 +332,7 @@ while read -r file expected_hash; do
|
|||||||
done <<< "$(cat <<EOF
|
done <<< "$(cat <<EOF
|
||||||
zstd ab32aecb389c3ba5c1f7ab05d5eb6a861bad80261fd14ef9a8f4c283ac48c22c
|
zstd ab32aecb389c3ba5c1f7ab05d5eb6a861bad80261fd14ef9a8f4c283ac48c22c
|
||||||
tar 3c605b1e9eb8283555225dcad4a3bf1777ae39c5f19a2c8b8943140fd7555814
|
tar 3c605b1e9eb8283555225dcad4a3bf1777ae39c5f19a2c8b8943140fd7555814
|
||||||
classes.dex 99ed4bb2ea2ea4a57aa015d65811a81b44b60bf5b890879238d7308beab1d4b3
|
classes.dex 3d0630ed5698ab5d68b2544463fef132665eef40a4c392ce1507a2c350f12a81
|
||||||
bc b15d730591f6fb52af59284b87d939c5bea204f944405a3518224d8df788dc15
|
bc b15d730591f6fb52af59284b87d939c5bea204f944405a3518224d8df788dc15
|
||||||
busybox 4d60ab3f5a59ebb2ca863f2f514e6924401b581e9b64f602665c008177626651
|
busybox 4d60ab3f5a59ebb2ca863f2f514e6924401b581e9b64f602665c008177626651
|
||||||
find 7fa812e58aafa29679cf8b50fc617ecf9fec2cfb2e06ea491e0a2d6bf79b903b
|
find 7fa812e58aafa29679cf8b50fc617ecf9fec2cfb2e06ea491e0a2d6bf79b903b
|
||||||
@@ -353,9 +350,7 @@ if [[ $quit -ne 0 ]]; then
|
|||||||
fi
|
fi
|
||||||
sleep 1 && clear
|
sleep 1 && clear
|
||||||
TMPDIR="/data/local/tmp"
|
TMPDIR="/data/local/tmp"
|
||||||
if [[ ! -e $TMPDIR/scriptTMP ]]; then
|
rm -rf "$TMPDIR"/*
|
||||||
rm -rf "$TMPDIR"/*
|
|
||||||
fi
|
|
||||||
[[ ! -d $TMPDIR ]] && mkdir "$TMPDIR"
|
[[ ! -d $TMPDIR ]] && mkdir "$TMPDIR"
|
||||||
chmod 771 "$TMPDIR"
|
chmod 771 "$TMPDIR"
|
||||||
chown '2000:2000' "$TMPDIR"
|
chown '2000:2000' "$TMPDIR"
|
||||||
@@ -438,21 +433,24 @@ echo_log() {
|
|||||||
Set_back_1
|
Set_back_1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
process_name() {
|
|
||||||
pgrep -f "$1" | while read; do
|
|
||||||
kill -KILL "$REPLY" 2>/dev/null
|
|
||||||
done
|
|
||||||
}
|
|
||||||
kill_Serve() {
|
kill_Serve() {
|
||||||
if [[ -f $TMPDIR/scriptTMP ]]; then
|
LOCK_FILE="/tmp/my_backup.lock"
|
||||||
scriptname="$(cat "$TMPDIR/scriptTMP")"
|
if [[ -f $LOCK_FILE ]]; then
|
||||||
echoRgb "腳本殘留進程,將殺死後退出腳本,請重新執行一次\n -殺死$scriptname" "0"
|
OLD_PID="$(cat "$LOCK_FILE")"
|
||||||
rm -rf "$TMPDIR/scriptTMP"
|
if kill -0 "$OLD_PID" 2>/dev/null; then
|
||||||
process_name "$scriptname"
|
echo "發現先前的備份程序 (PID=$OLD_PID),將其終止"
|
||||||
exit
|
kill -KILL "$OLD_PID"
|
||||||
fi
|
echo "結束自身,避免重複執行"
|
||||||
wait
|
exit 1
|
||||||
|
else
|
||||||
|
echo "發現 lock 檔但程序已不存在,視為殘留 lock"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo $$ > "$LOCK_FILE"
|
||||||
|
trap "rm -f '$LOCK_FILE'" EXIT
|
||||||
}
|
}
|
||||||
|
echo $$
|
||||||
|
kill_Serve
|
||||||
Show_boottime() {
|
Show_boottime() {
|
||||||
awk -F '.' '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("%d天%d時%d分%d秒",run_days,run_hour,run_minute,run_second)}' /proc/uptime 2>/dev/null
|
awk -F '.' '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("%d天%d時%d分%d秒",run_days,run_hour,run_minute,run_second)}' /proc/uptime 2>/dev/null
|
||||||
}
|
}
|
||||||
@@ -502,7 +500,7 @@ else
|
|||||||
RAMINFO="RAM:null"
|
RAMINFO="RAM:null"
|
||||||
fi
|
fi
|
||||||
echoRgb "---------------------SpeedBackup---------------------"
|
echoRgb "---------------------SpeedBackup---------------------"
|
||||||
echoRgb "腳本路徑:$MODDIR\n -已開機:$(Show_boottime)\n -執行時間:$(date +"%Y-%m-%d %H:%M:%S")\n -busybox路徑:$(which busybox)\n -busybox版本:$(busybox | head -1 | awk '{print $2}')\n -腳本版本:$backup_version\n -管理器:$Manager_version\n -品牌:$(getprop ro.product.brand 2>/dev/null)\n -型號:$Device_name($(getprop ro.product.device 2>/dev/null))\n -閃存顆粒:$UFS_MODEL($ROM_TYPE)\n -$DEVICE_NAME\n -$RAMINFO\n -Android版本:$(getprop ro.build.version.release 2>/dev/null) SDK:$(getprop ro.build.version.sdk 2>/dev/null)\n -內核:$(uname -r)\n -Selinux狀態:$([[ $(getenforce) = Permissive ]] && echo "寬容" || echo "嚴格")\n -By@YAWAsau\n -Support: https://jq.qq.com/?_wv=1027&k=f5clPNC3"
|
echoRgb "腳本路徑:$MODDIR\n -已開機:$(Show_boottime)\n -執行時間:$(date +"%Y-%m-%d %H:%M:%S")\n -busybox路徑:$(which busybox)\n -busybox版本:$(busybox | head -1 | cut -d' ' -f2)\n -腳本版本:$backup_version\n -管理器:$Manager_version\n -品牌:$(getprop ro.product.brand 2>/dev/null)\n -型號:$Device_name($(getprop ro.product.device 2>/dev/null))\n -閃存顆粒:$UFS_MODEL($ROM_TYPE)\n -$DEVICE_NAME\n -$RAMINFO\n -Android版本:$(getprop ro.build.version.release 2>/dev/null) SDK:$(getprop ro.build.version.sdk 2>/dev/null)\n -內核:$(uname -r)\n -Selinux狀態:$([[ $(getenforce) = Permissive ]] && echo "寬容" || echo "嚴格")\n -By@YAWAsau\n -Support: https://jq.qq.com/?_wv=1027&k=f5clPNC3"
|
||||||
case $MODDIR in
|
case $MODDIR in
|
||||||
*Backup_*)
|
*Backup_*)
|
||||||
if [[ -f $MODDIR/app_details.json ]]; then
|
if [[ -f $MODDIR/app_details.json ]]; then
|
||||||
@@ -551,8 +549,8 @@ add_entry() {
|
|||||||
app_name="$1"
|
app_name="$1"
|
||||||
package_name="$2"
|
package_name="$2"
|
||||||
# 檢查是否已經存在同樣的應用名稱
|
# 檢查是否已經存在同樣的應用名稱
|
||||||
if [[ $(echo "$3" | awk '{print $1}' | grep -w "^$app_name$") = $app_name ]]; then
|
if [[ $(echo "$3" | cut -d' ' -f1 | grep -w "^$app_name$") = $app_name ]]; then
|
||||||
if [[ $(echo "$3" | awk '{print $2}' | grep -w "^$package_name$") != $package_name ]]; then
|
if [[ $(echo "$3" | cut -d' ' -f2 | grep -w "^$package_name$") != $package_name ]]; then
|
||||||
# 如果應用名稱存在但包名不同,則需要添加數字後綴
|
# 如果應用名稱存在但包名不同,則需要添加數字後綴
|
||||||
count=1
|
count=1
|
||||||
new_app_name="${app_name}_${count}"
|
new_app_name="${app_name}_${count}"
|
||||||
@@ -682,7 +680,7 @@ touch_shell () {
|
|||||||
MODDIR_Path1='${0%/*}'
|
MODDIR_Path1='${0%/*}'
|
||||||
conf_path='${0%/*/*}/restore_settings.conf' ;;
|
conf_path='${0%/*/*}/restore_settings.conf' ;;
|
||||||
esac
|
esac
|
||||||
[[ $Output_path = "" ]] && echo "#!/system/bin/sh
|
echo "#!/system/bin/sh
|
||||||
if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then
|
if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then
|
||||||
MODDIR=\"$MODDIR_Path1\"
|
MODDIR=\"$MODDIR_Path1\"
|
||||||
conf_path=\"$conf_path\"
|
conf_path=\"$conf_path\"
|
||||||
@@ -918,8 +916,8 @@ backup_path() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
PU=$(mount | awk '$3 ~ "/mnt/media_rw/[^/]+$" {print $3, $5}' | egrep -v "$mount_point")
|
PU=$(mount | awk '$3 ~ "/mnt/media_rw/[^/]+$" {print $3, $5}' | egrep -v "$mount_point")
|
||||||
OTGPATH="$(echo "$PU" | awk '{print $1}')"
|
OTGPATH="$(echo "$PU" | cut -d' ' -f1)"
|
||||||
OTGFormat="$(echo "$PU" | awk '{print $2}')"
|
OTGFormat="$(echo "$PU" | cut -d' ' -f2)"
|
||||||
if [[ -d $OTGPATH ]]; then
|
if [[ -d $OTGPATH ]]; then
|
||||||
if [[ $(echo "$MODDIR" | egrep -o "^${OTGPATH}") != "" ]]; then
|
if [[ $(echo "$MODDIR" | egrep -o "^${OTGPATH}") != "" ]]; then
|
||||||
hx="true"
|
hx="true"
|
||||||
@@ -1016,7 +1014,7 @@ Backup_apk() {
|
|||||||
apk_version="$(jq -r '.[] | select(.apk_version != null).apk_version' "$app_details")"
|
apk_version="$(jq -r '.[] | select(.apk_version != null).apk_version' "$app_details")"
|
||||||
apk_version2="$(pm list packages --show-versioncode --user "$user" "$name2" 2>/dev/null | cut -f3 -d ':' | head -n 1)"
|
apk_version2="$(pm list packages --show-versioncode --user "$user" "$name2" 2>/dev/null | cut -f3 -d ':' | head -n 1)"
|
||||||
if [[ $apk_version = $apk_version2 ]]; then
|
if [[ $apk_version = $apk_version2 ]]; then
|
||||||
[[ $(sed -e '/^$/d' "$txt2" | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2"
|
[[ $(sed -e '/^$/d' "$txt2" | cut -d' ' -f2 | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2"
|
||||||
unset xb
|
unset xb
|
||||||
let osj++
|
let osj++
|
||||||
result=0
|
result=0
|
||||||
@@ -1055,7 +1053,7 @@ Backup_apk() {
|
|||||||
if [[ $result = 0 ]]; then
|
if [[ $result = 0 ]]; then
|
||||||
Validation_file "$Backup_folder/apk.tar"*
|
Validation_file "$Backup_folder/apk.tar"*
|
||||||
if [[ $result = 0 ]]; then
|
if [[ $result = 0 ]]; then
|
||||||
[[ $(sed -e '/^$/d' "$txt2" 2>/dev/null | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2"
|
[[ $(sed -e '/^$/d' "$txt2" 2>/dev/null | cut -d' ' -f2 | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2"
|
||||||
[[ $apk_version != "" ]] && {
|
[[ $apk_version != "" ]] && {
|
||||||
echoRgb "覆蓋app_details"
|
echoRgb "覆蓋app_details"
|
||||||
jq --arg apk_version "$apk_version2" --arg software "$name1" '.[$software].apk_version = $apk_version' "$app_details" > "$TMPDIR/temp.json" && cat "$TMPDIR/temp.json" > "$app_details" && rm "$TMPDIR/temp.json"
|
jq --arg apk_version "$apk_version2" --arg software "$name1" '.[$software].apk_version = $apk_version' "$app_details" > "$TMPDIR/temp.json" && cat "$TMPDIR/temp.json" > "$app_details" && rm "$TMPDIR/temp.json"
|
||||||
@@ -1096,7 +1094,7 @@ Backup_apk() {
|
|||||||
}
|
}
|
||||||
Backup_ssaid() {
|
Backup_ssaid() {
|
||||||
Ssaid="$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")"
|
Ssaid="$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")"
|
||||||
ssaid="$(get_ssaid "$name2")"
|
ssaid="$(awk -v pkg="$name2" '$1 == pkg {print $2}'<<<"$ssaid_info")"
|
||||||
[[ $ssaid != null ]] && echoRgb "SSAID:$ssaid"
|
[[ $ssaid != null ]] && echoRgb "SSAID:$ssaid"
|
||||||
if [[ $ssaid != null && $ssaid != $Ssaid ]]; then
|
if [[ $ssaid != null && $ssaid != $Ssaid ]]; then
|
||||||
echoRgb "備份ssaid"
|
echoRgb "備份ssaid"
|
||||||
@@ -1599,8 +1597,8 @@ get_name(){
|
|||||||
i=1
|
i=1
|
||||||
r="$(egrep -v '#|#' "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
r="$(egrep -v '#|#' "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||||
while [[ $i -le $r ]]; do
|
while [[ $i -le $r ]]; do
|
||||||
name1="$(egrep -v '#|#' "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
name1="$(egrep -v '#|#' "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f1)"
|
||||||
name2="$(egrep -v '#|#' "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
name2="$(egrep -v '#|#' "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f2)"
|
||||||
Backup_folder="$MODDIR/$name1"
|
Backup_folder="$MODDIR/$name1"
|
||||||
[[ -d $Backup_folder ]] && rm -rf "$Backup_folder"
|
[[ -d $Backup_folder ]] && rm -rf "$Backup_folder"
|
||||||
echo "$(sed -e "s/$name1 $name2//g ; /^$/d" "$txt" 2>/dev/null)" >"$txt"
|
echo "$(sed -e "s/$name1 $name2//g ; /^$/d" "$txt" 2>/dev/null)" >"$txt"
|
||||||
@@ -1726,7 +1724,6 @@ Background_application_list() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
backup() {
|
backup() {
|
||||||
kill_Serve
|
|
||||||
self_test
|
self_test
|
||||||
case $MODDIR in
|
case $MODDIR in
|
||||||
/storage/emulated/0/Android/* | /data/media/0/Android/* | /sdcard/Android/*) echoRgb "請勿在$MODDIR內備份" "0" && exit 2 ;;
|
/storage/emulated/0/Android/* | /data/media/0/Android/* | /sdcard/Android/*) echoRgb "請勿在$MODDIR內備份" "0" && exit 2 ;;
|
||||||
@@ -1940,7 +1937,6 @@ backup() {
|
|||||||
[[ ! -f $txt2 ]] && echo "#不需要恢復還原的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market">"$txt2"
|
[[ ! -f $txt2 ]] && echo "#不需要恢復還原的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market">"$txt2"
|
||||||
[[ ! -d $Backup/tools ]] && cp -r "$tools_path" "$Backup"
|
[[ ! -d $Backup/tools ]] && cp -r "$tools_path" "$Backup"
|
||||||
[[ ! -f $Backup/start.sh ]] && touch_shell "2" "$Backup/start.sh"
|
[[ ! -f $Backup/start.sh ]] && touch_shell "2" "$Backup/start.sh"
|
||||||
[[ ! -d $Backup/modules ]] && mkdir -p "$Backup/modules" && echoRgb "$Backup/modules已創建成功\n -請按需要自行放置需要恢復時刷入的模塊在內將自動批量刷入" "1"
|
|
||||||
[[ ! -f $Backup/restore_settings.conf ]] && update_Restore_settings_conf>"$Backup/restore_settings.conf"
|
[[ ! -f $Backup/restore_settings.conf ]] && update_Restore_settings_conf>"$Backup/restore_settings.conf"
|
||||||
if [[ -d $Backup/tools ]]; then
|
if [[ -d $Backup/tools ]]; then
|
||||||
find "$Backup/tools" -maxdepth 1 -type f | while read; do
|
find "$Backup/tools" -maxdepth 1 -type f | while read; do
|
||||||
@@ -1960,14 +1956,14 @@ backup() {
|
|||||||
#開始循環$txt內的資料進行備份
|
#開始循環$txt內的資料進行備份
|
||||||
#記錄開始時間
|
#記錄開始時間
|
||||||
en=118
|
en=118
|
||||||
echo "$script">"$TMPDIR/scriptTMP"
|
|
||||||
osn=0; osj=0; osk=0
|
osn=0; osj=0; osk=0
|
||||||
#獲取已經開啟的無障礙
|
#獲取已經開啟的無障礙
|
||||||
var="$(settings get secure enabled_accessibility_services 2>/dev/null)"
|
var="$(settings get secure enabled_accessibility_services 2>/dev/null)"
|
||||||
#獲取預設鍵盤
|
#獲取預設鍵盤
|
||||||
keyboard="$(settings get secure default_input_method 2>/dev/null)"
|
keyboard="$(settings get secure default_input_method 2>/dev/null)"
|
||||||
Set_screen_pause_seconds on
|
Set_screen_pause_seconds on
|
||||||
[[ $(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${keyboard%/*}$") != ${keyboard%/*} ]] && unset keyboard
|
[[ $(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | cut -d' ' -f2 | grep -w "^${keyboard%/*}$") != ${keyboard%/*} ]] && unset keyboard
|
||||||
|
ssaid_info="$(get_ssaid "$(egrep -v '#|#' "$txt" | awk '{printf "%s ", $2}')")"
|
||||||
starttime1="$(date -u "+%s")"
|
starttime1="$(date -u "+%s")"
|
||||||
TIME="$starttime1"
|
TIME="$starttime1"
|
||||||
notification "101" "開始備份"
|
notification "101" "開始備份"
|
||||||
@@ -1975,8 +1971,8 @@ backup() {
|
|||||||
[[ $en -ge 229 ]] && en=118
|
[[ $en -ge 229 ]] && en=118
|
||||||
unset name1 name2 apk_path apk_path2
|
unset name1 name2 apk_path apk_path2
|
||||||
if [[ ! -f ${0%/*}/app_details.json ]]; then
|
if [[ ! -f ${0%/*}/app_details.json ]]; then
|
||||||
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f1)"
|
||||||
name2="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
name2="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f2)"
|
||||||
else
|
else
|
||||||
ChineseName="$(jq -r 'to_entries[] | select(.key != null).key' "${0%/*}/app_details.json" | head -n 1)"
|
ChineseName="$(jq -r 'to_entries[] | select(.key != null).key' "${0%/*}/app_details.json" | head -n 1)"
|
||||||
PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "${0%/*}/app_details.json")"
|
PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "${0%/*}/app_details.json")"
|
||||||
@@ -2141,7 +2137,6 @@ backup() {
|
|||||||
done
|
done
|
||||||
Set_screen_pause_seconds off
|
Set_screen_pause_seconds off
|
||||||
[[ $user != 0 ]] && am stop-user "$user"
|
[[ $user != 0 ]] && am stop-user "$user"
|
||||||
rm -rf "$TMPDIR/scriptTMP"
|
|
||||||
Calculate_size "$Backup"
|
Calculate_size "$Backup"
|
||||||
echoRgb "批量備份完成"
|
echoRgb "批量備份完成"
|
||||||
echoRgb "備份結束時間$(date +"%Y-%m-%d %H:%M:%S")"
|
echoRgb "備份結束時間$(date +"%Y-%m-%d %H:%M:%S")"
|
||||||
@@ -2166,7 +2161,6 @@ check_file() {
|
|||||||
Check_archive "$MODDIR"
|
Check_archive "$MODDIR"
|
||||||
}
|
}
|
||||||
Restore() {
|
Restore() {
|
||||||
kill_Serve
|
|
||||||
self_test
|
self_test
|
||||||
disable_verify
|
disable_verify
|
||||||
[[ ! -d $path2 ]] && echoRgb "設備不存在user目錄" "0" && exit 1
|
[[ ! -d $path2 ]] && echoRgb "設備不存在user目錄" "0" && exit 1
|
||||||
@@ -2180,7 +2174,6 @@ Restore() {
|
|||||||
r="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
r="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||||
[[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了\n -請執行start.sh獲取應用列表再來恢復" "0" && exit 1
|
[[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了\n -請執行start.sh獲取應用列表再來恢復" "0" && exit 1
|
||||||
Backup_folder2="$MODDIR/Media"
|
Backup_folder2="$MODDIR/Media"
|
||||||
Backup_folder3="$MODDIR/modules"
|
|
||||||
#校驗選填是否正確
|
#校驗選填是否正確
|
||||||
case $Lo in
|
case $Lo in
|
||||||
0)
|
0)
|
||||||
@@ -2203,12 +2196,6 @@ Restore() {
|
|||||||
get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch"
|
get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch"
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
if [[ -d $Backup_folder3 && $(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l) != 0 ]]; then
|
|
||||||
[[ $modules_recovery != "" ]] && isBoolean "$modules_recovery" "modules_recovery" && modules_recovery="$nsx" || {
|
|
||||||
echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2"
|
|
||||||
get_version "刷入模塊" "跳過刷入模塊" && modules_recovery="$branch"
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
[[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || {
|
[[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || {
|
||||||
echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2"
|
echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2"
|
||||||
get_version "忽略" "恢復" && Background_apps_ignore="$branch"
|
get_version "忽略" "恢復" && Background_apps_ignore="$branch"
|
||||||
@@ -2225,8 +2212,6 @@ Restore() {
|
|||||||
fi
|
fi
|
||||||
echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2"
|
echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2"
|
||||||
get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch"
|
get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch"
|
||||||
echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2"
|
|
||||||
get_version "刷入模塊" "跳過刷入模塊" && modules_recovery="$branch"
|
|
||||||
echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2"
|
echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2"
|
||||||
get_version "忽略" "恢復" && Background_apps_ignore="$branch" ;;
|
get_version "忽略" "恢復" && Background_apps_ignore="$branch" ;;
|
||||||
2)
|
2)
|
||||||
@@ -2253,11 +2238,6 @@ Restore() {
|
|||||||
} || {
|
} || {
|
||||||
isBoolean "$media_recovery" "media_recovery" && media_recovery="$nsx"
|
isBoolean "$media_recovery" "media_recovery" && media_recovery="$nsx"
|
||||||
}
|
}
|
||||||
[[ $modules_recovery = "" ]] && {
|
|
||||||
Enter_options "是否刷入Magisk模塊\n -輸入1刷入 0不刷入" "刷入模塊" "跳過刷入模塊" && isBoolean "$parameter" "modules_recovery" && modules_recovery="$nsx"
|
|
||||||
} || {
|
|
||||||
isBoolean "$modules_recovery" "modules_recovery" && modules_recovery="$nsx"
|
|
||||||
}
|
|
||||||
[[ $Background_apps_ignore = "" ]] && {
|
[[ $Background_apps_ignore = "" ]] && {
|
||||||
Enter_options "存在進程忽略恢復\n -輸入1不恢復,0恢復" "忽略" "恢復" && isBoolean "$parameter" "Background_apps_ignore" && Background_apps_ignore="$nsx"
|
Enter_options "存在進程忽略恢復\n -輸入1不恢復,0恢復" "忽略" "恢復" && isBoolean "$parameter" "Background_apps_ignore" && Background_apps_ignore="$nsx"
|
||||||
} || {
|
} || {
|
||||||
@@ -2278,9 +2258,9 @@ Restore() {
|
|||||||
while read -r ; do
|
while read -r ; do
|
||||||
if [[ $(echo "$REPLY" | sed 's/^[ \t]*//') != \#* ]]; then
|
if [[ $(echo "$REPLY" | sed 's/^[ \t]*//') != \#* ]]; then
|
||||||
app=($REPLY $REPLY)
|
app=($REPLY $REPLY)
|
||||||
[[ ${app[1]} != "" && ${app[2]} != "" ]] && {
|
if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then
|
||||||
[[ $(echo "$Apk_info" | egrep -o "${app[1]}") = "" ]] && Tmplist="$Tmplist\n$REPLY"
|
[[ $(echo "$Apk_info" | grep -Fx "${app[1]}") = "" ]] && Tmplist="$Tmplist\n$REPLY"
|
||||||
}
|
fi
|
||||||
fi
|
fi
|
||||||
done < "$txt"
|
done < "$txt"
|
||||||
r="$(echo "$Tmplist" | awk 'NF != 0 { count++ } END { print count }')"
|
r="$(echo "$Tmplist" | awk 'NF != 0 { count++ } END { print count }')"
|
||||||
@@ -2329,7 +2309,6 @@ Restore() {
|
|||||||
TIME="$starttime1"
|
TIME="$starttime1"
|
||||||
Set_screen_pause_seconds on
|
Set_screen_pause_seconds on
|
||||||
en=118
|
en=118
|
||||||
echo "$script">"$TMPDIR/scriptTMP"
|
|
||||||
notification "105" "開始恢復app"
|
notification "105" "開始恢復app"
|
||||||
while [[ $i -le $r ]]; do
|
while [[ $i -le $r ]]; do
|
||||||
[[ $en -ge 229 ]] && en=118
|
[[ $en -ge 229 ]] && en=118
|
||||||
@@ -2339,12 +2318,12 @@ Restore() {
|
|||||||
恢復 $name1"
|
恢復 $name1"
|
||||||
if [[ ! -f $txt ]]; then
|
if [[ ! -f $txt ]]; then
|
||||||
[[ $(echo "$txt") != "" ]] && {
|
[[ $(echo "$txt") != "" ]] && {
|
||||||
name1="$(echo "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
name1="$(echo "$txt" | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f1)"
|
||||||
name2="$(echo "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
name2="$(echo "$txt" | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f2)"
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f1)"
|
||||||
name2="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
name2="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | cut -d' ' -f2)"
|
||||||
fi
|
fi
|
||||||
unset No_backupdata apk_version Permissions
|
unset No_backupdata apk_version Permissions
|
||||||
if [[ $name1 = *! || $name1 = *! ]]; then
|
if [[ $name1 = *! || $name1 = *! ]]; then
|
||||||
@@ -2406,20 +2385,17 @@ Restore() {
|
|||||||
endtime 1 "應用恢復" "2"
|
endtime 1 "應用恢復" "2"
|
||||||
[[ $SSAID_Package2 != "" ]] && {
|
[[ $SSAID_Package2 != "" ]] && {
|
||||||
echoRgb "開始恢復saaid" "0"
|
echoRgb "開始恢復saaid" "0"
|
||||||
|
set_ssaid "$(echo "$SSAID_Package2" | awk '{printf "%s %s ", $2, $3}')"
|
||||||
|
ssaid_info="$(get_ssaid "$(echo "$SSAID_Package2" | awk '{printf "%s ", $2}')")"
|
||||||
echo "$SSAID_Package2" | while read; do
|
echo "$SSAID_Package2" | while read; do
|
||||||
Ssaid="$(echo "$REPLY" | awk '{print $3}')"
|
Ssaid="$(echo "$REPLY" | cut -d' ' -f3)"
|
||||||
name1="$(echo "$REPLY" | awk '{print $1}')"
|
name1="$(echo "$REPLY" | cut -d' ' -f1)"
|
||||||
name2="$(echo "$REPLY" | awk '{print $2}')"
|
name2="$(echo "$REPLY" | cut -d' ' -f2)"
|
||||||
set_ssaid "$name2" "$Ssaid"
|
if [[ $(awk -v pkg="$name2" '$1 == pkg {print $2}'<<<"$ssaid_info") = $Ssaid ]]; then
|
||||||
if [[ $(get_ssaid "$name2") = $Ssaid ]]; then
|
echoRgb "$name1 SSAID恢復成功" "1"
|
||||||
echoRgb "$name1 SSAID恢復成功" "1"
|
else
|
||||||
SSAID_Package0="$(echo "$name1 \"$name2\"")"
|
echoRgb "$name1 SSAID恢復失敗" "0"
|
||||||
SSAID_Package1="$(echo "$SSAID_Package0\n$SSAID_Package1")"
|
fi
|
||||||
else
|
|
||||||
echoRgb "$name1 SSAID恢復失敗" "0"
|
|
||||||
SSAID_Package3="$(echo "$name1 \"$name2\"")"
|
|
||||||
SSAID_Package4="$(echo "$SSAID_Package3\n$SSAID_Package4")"
|
|
||||||
fi
|
|
||||||
unset Ssaid
|
unset Ssaid
|
||||||
done
|
done
|
||||||
echoRgb "SSAID恢復後必須重新開機套用,否則應用閃退,如果沒有應用恢復ssaid則無須重啟" "0"
|
echoRgb "SSAID恢復後必須重新開機套用,否則應用閃退,如果沒有應用恢復ssaid則無須重啟" "0"
|
||||||
@@ -2446,21 +2422,6 @@ Restore() {
|
|||||||
endtime 1 "自定義恢復" "2"
|
endtime 1 "自定義恢復" "2"
|
||||||
notification "106" "Media恢復完成 $(endtime 1 "Media恢復" "2")"
|
notification "106" "Media恢復完成 $(endtime 1 "Media恢復" "2")"
|
||||||
fi
|
fi
|
||||||
if [[ $modules_recovery = true ]]; then
|
|
||||||
A=1
|
|
||||||
B="$(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l)"
|
|
||||||
starttime1="$(date -u "+%s")"
|
|
||||||
notification "108" "Module恢復開始"
|
|
||||||
find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | while read; do
|
|
||||||
starttime2="$(date -u "+%s")"
|
|
||||||
echoRgb "刷入第$A/$B個模塊 剩下$((B - A))個" "3"
|
|
||||||
echoRgb "刷入${REPLY##*/}" "2"
|
|
||||||
[[ $ksu != ksu ]] && magisk --install-module "$REPLY" || ksud module install "$REPLY"
|
|
||||||
endtime 2 "${REPLY##*/}刷入" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++
|
|
||||||
done
|
|
||||||
endtime 1 "刷入模塊" "2"
|
|
||||||
notification "108" "Module恢復完成 $(endtime 1 "Module恢復" "2")"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
let i++ en++ nskg++
|
let i++ en++ nskg++
|
||||||
@@ -2473,7 +2434,6 @@ Restore() {
|
|||||||
rm -rf "$TMPDIR"/*
|
rm -rf "$TMPDIR"/*
|
||||||
}
|
}
|
||||||
Restore3() {
|
Restore3() {
|
||||||
kill_Serve
|
|
||||||
self_test
|
self_test
|
||||||
case $Lo in
|
case $Lo in
|
||||||
0|1)
|
0|1)
|
||||||
@@ -2504,7 +2464,6 @@ Restore3() {
|
|||||||
B="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
B="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||||
Set_screen_pause_seconds on
|
Set_screen_pause_seconds on
|
||||||
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行start.sh獲取列表再來恢復" "0" && exit 1
|
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行start.sh獲取列表再來恢復" "0" && exit 1
|
||||||
echo "$script">"$TMPDIR/scriptTMP"
|
|
||||||
notification "108" "Media恢復開始"
|
notification "108" "Media恢復開始"
|
||||||
while [[ $A -le $B ]]; do
|
while [[ $A -le $B ]]; do
|
||||||
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')"
|
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')"
|
||||||
@@ -2516,7 +2475,6 @@ Restore3() {
|
|||||||
Set_screen_pause_seconds off
|
Set_screen_pause_seconds off
|
||||||
endtime 1 "恢復結束"
|
endtime 1 "恢復結束"
|
||||||
notification "108" "Media恢復完成 $(endtime 1 "Media恢復")"
|
notification "108" "Media恢復完成 $(endtime 1 "Media恢復")"
|
||||||
rm -rf "$TMPDIR/scriptTMP"
|
|
||||||
}
|
}
|
||||||
Getlist() {
|
Getlist() {
|
||||||
case $MODDIR in
|
case $MODDIR in
|
||||||
@@ -2558,7 +2516,7 @@ Getlist() {
|
|||||||
Apk_info="$(echo "$(echo "$Apk_info" | awk '$3 != "system" {print $1, $2}')\n$Pre_installed_apps" | sort -u)"
|
Apk_info="$(echo "$(echo "$Apk_info" | awk '$3 != "system" {print $1, $2}')\n$Pre_installed_apps" | sort -u)"
|
||||||
[[ $Apk_info = "" ]] && {
|
[[ $Apk_info = "" ]] && {
|
||||||
echoRgb "appinfo輸出失敗,請截圖畫面回報作者" "0"
|
echoRgb "appinfo輸出失敗,請截圖畫面回報作者" "0"
|
||||||
exit 2 ; } || Apk_info2="$(echo "$Apk_info" | awk '{print $2}')"
|
exit 2 ; } || Apk_info2="$(echo "$Apk_info" | cut -d' ' -f2)"
|
||||||
Apk_Quantity="$(echo "$Apk_info" | wc -l)"
|
Apk_Quantity="$(echo "$Apk_info" | wc -l)"
|
||||||
LR="1"
|
LR="1"
|
||||||
echoRgb "列出第三方應用......." "2"
|
echoRgb "列出第三方應用......." "2"
|
||||||
@@ -2675,7 +2633,6 @@ Getlist() {
|
|||||||
echoRgb "輸出包名結束 請查看$MODDIR/appList.txtt"
|
echoRgb "輸出包名結束 請查看$MODDIR/appList.txtt"
|
||||||
}
|
}
|
||||||
backup_media() {
|
backup_media() {
|
||||||
kill_Serve
|
|
||||||
self_test
|
self_test
|
||||||
backup_path
|
backup_path
|
||||||
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊start.sh選擇終止腳本,否則腳本將繼續執行直到結束" "0"
|
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊start.sh選擇終止腳本,否則腳本將繼續執行直到結束" "0"
|
||||||
@@ -2693,7 +2650,6 @@ backup_media() {
|
|||||||
filesize="$(find "$Backup_folder" -type f -printf "%s\n" 2>/dev/null | awk '{s+=$1} END {print s}')"
|
filesize="$(find "$Backup_folder" -type f -printf "%s\n" 2>/dev/null | awk '{s+=$1} END {print s}')"
|
||||||
mediatxt="$Backup/mediaList.txt"
|
mediatxt="$Backup/mediaList.txt"
|
||||||
[[ ! -f $mediatxt ]] && echo "#不需要恢復的資料夾請在開頭使用#注釋 比如:#Download" > "$mediatxt"
|
[[ ! -f $mediatxt ]] && echo "#不需要恢復的資料夾請在開頭使用#注釋 比如:#Download" > "$mediatxt"
|
||||||
echo "$script">"$TMPDIR/scriptTMP"
|
|
||||||
Set_screen_pause_seconds on
|
Set_screen_pause_seconds on
|
||||||
notification "109" "Media備份開始"
|
notification "109" "Media備份開始"
|
||||||
echo "$Custom_path" | sed -e '/^#/d; /^$/d; s/\/$//' | while read; do
|
echo "$Custom_path" | sed -e '/^#/d; /^$/d; s/\/$//' | while read; do
|
||||||
@@ -2714,7 +2670,6 @@ backup_media() {
|
|||||||
Set_screen_pause_seconds off
|
Set_screen_pause_seconds off
|
||||||
endtime 1 "自定義備份"
|
endtime 1 "自定義備份"
|
||||||
notification "109" "Media備份完成 $(endtime 1 "自定義備份")"
|
notification "109" "Media備份完成 $(endtime 1 "自定義備份")"
|
||||||
rm -rf "$TMPDIR/scriptTMP"
|
|
||||||
else
|
else
|
||||||
echoRgb "自定義路徑為空 無法備份" "0"
|
echoRgb "自定義路徑為空 無法備份" "0"
|
||||||
fi
|
fi
|
||||||
@@ -2791,7 +2746,6 @@ if [[ $start != "" ]]; then
|
|||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
if [[ -f $MODDIR/backup_settings.conf ]]; then
|
if [[ -f $MODDIR/backup_settings.conf ]]; then
|
||||||
echoRgb "音量鍵上下選擇對應功能,上鍵選擇下鍵跳過"
|
|
||||||
steps=(
|
steps=(
|
||||||
"生成應用列表"
|
"生成應用列表"
|
||||||
"備份應用"
|
"備份應用"
|
||||||
@@ -2804,50 +2758,56 @@ else
|
|||||||
"backup"
|
"backup"
|
||||||
"backup_update_apk"
|
"backup_update_apk"
|
||||||
"backup_media"
|
"backup_media"
|
||||||
"echoRgb "等待腳本停止中,請稍後....." ; kill_Serve && echoRgb "腳本終止" ;exit"
|
"echoRgb '等待腳本停止中,請稍後.....' && echoRgb '腳本終止'; exit"
|
||||||
|
)
|
||||||
|
elif [[ -f $MODDIR/restore_settings.conf ]]; then
|
||||||
|
steps=(
|
||||||
|
"恢復備份"
|
||||||
|
"恢復自定義資料夾"
|
||||||
|
"重新生成應用列表"
|
||||||
|
"壓縮檔完整性檢查"
|
||||||
|
"轉換文件夾名稱"
|
||||||
|
"殺死運行中腳本"
|
||||||
|
)
|
||||||
|
commands=(
|
||||||
|
"Restore"
|
||||||
|
"Restore3"
|
||||||
|
"dumpname"
|
||||||
|
"check_file"
|
||||||
|
"convert"
|
||||||
|
"echoRgb '等待腳本停止中,請稍後.....' && echoRgb '腳本終止'; exit"
|
||||||
)
|
)
|
||||||
else
|
|
||||||
if [[ -f $MODDIR/restore_settings.conf ]]; then
|
|
||||||
echoRgb "音量鍵上下選擇對應功能,上鍵選擇下鍵跳過"
|
|
||||||
steps=(
|
|
||||||
"恢復備份"
|
|
||||||
"恢復自定義資料夾"
|
|
||||||
"重新生成應用列表"
|
|
||||||
"壓縮檔完整性檢查"
|
|
||||||
"轉換文件夾名稱"
|
|
||||||
"殺死運行中腳本"
|
|
||||||
)
|
|
||||||
commands=(
|
|
||||||
"Restore"
|
|
||||||
"Restore3"
|
|
||||||
"dumpname"
|
|
||||||
"check_file"
|
|
||||||
"convert"
|
|
||||||
"echo "等待腳本停止中,請稍後....." ; kill_Serve && echoRgb "腳本終止" ;exit"
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
# 開始循環提示
|
while true; do
|
||||||
for i in "${!steps[@]}"; do
|
echoRgb "請選擇要執行的操作:"
|
||||||
while true; do
|
for i in "${!steps[@]}"; do
|
||||||
echoRgb "是否執行:${steps[$i]}?"
|
printf "%d) %s\n" "$((i+1))" "${steps[$i]}"
|
||||||
get_version "執行${steps[$i]}" "略過${steps[$i]}" && Select_Result="$branch"
|
|
||||||
case $Select_Result in
|
|
||||||
true)
|
|
||||||
case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in
|
|
||||||
0)
|
|
||||||
eval "${commands[$i]}" ;;
|
|
||||||
1)
|
|
||||||
{
|
|
||||||
eval "${commands[$i]}"
|
|
||||||
} & ;;
|
|
||||||
esac
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
false)
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
done
|
||||||
|
echo "x) 離開腳本"
|
||||||
|
echo -n "請輸入選項編號: "
|
||||||
|
read choice
|
||||||
|
case $choice in
|
||||||
|
x|X)
|
||||||
|
echoRgb "已退出腳本" "0"
|
||||||
|
exit 0 ;;
|
||||||
|
[1-9])
|
||||||
|
if (( choice >= 1 && choice <= ${#steps[@]} )); then
|
||||||
|
index=$((choice - 1))
|
||||||
|
echo "執行:${steps[$index]}"
|
||||||
|
background=$(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}')
|
||||||
|
if [[ "$background" == "1" ]]; then
|
||||||
|
eval "${commands[$index]}" &
|
||||||
|
else
|
||||||
|
eval "${commands[$index]}"
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echoRgb "超出功能選項範圍(1-${#steps[@]})" "0"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
break ;;
|
||||||
|
*)
|
||||||
|
echoRgb "輸入錯誤,請重新輸入有效的數字或輸入 x 離開。" "0" ;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
Reference in New Issue
Block a user