This commit is contained in:
Yawasau
2025-08-02 19:51:41 +08:00
parent b767cd8208
commit 51726db049
3 changed files with 144 additions and 143 deletions

View File

@@ -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.

View File

@@ -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