1 Commits

Author SHA1 Message Date
Yawasau
e6e8da1184 feat: 性能與穩定性大改進,新增功能與防呆
性能優化:
- 主迴圈 fork 量降低 5-10 倍
- 100 app 備份省 ~800 jq fork, ~100 pm fork
- 100 app 恢復省 ~300 pm fork, ~500 jq fork
- 大目錄 (OBB) 計算改 du -sb, 快 3-5 倍

新增功能:
- 主選單循環 (跑完非備份動作回選單,不用每次重啟)
- 工具版本啟動時記錄到 log/tools_version.log
- log 自動清理 (conf: log_max_size_mb)
- SMB 掃描自動抓主機名 (Server=[name])
- WebDAV PROPFIND 失敗時自動探測根目錄
- 啟動驗證新增 curl SHA-256

Bug 修復:
- mksh 兼容: here-string / 空陣列 / += 全改檔案
- 32-bit 整數溢位 (Calculate_size / Backup_data)
- versionCode 解析錯誤 (split apk 多行覆蓋導致誤判更新)
- appList.txt 同名 app 重複 (考慮舊清單已存在的記錄)
- WebDAV XML 解析 (兼容 D: 前綴 / 無前綴)
- WebDAV 下載遞迴掃描檔案丟失 (PID 共用暫存檔)
- 單獨備份覆蓋 appList.txt (改合併)
- 主選單循環不觸發 trap EXIT (backup 內主動呼叫 remote_cleanup)
- isBoolean 接受 true/false (避免循環選單二次校驗失敗)
- conf 驗證防呆 (webdav/smb 協議跟 URL scheme 不匹配警告)
- WebDAV 連線失敗識別 (WRONG_VERSION_NUMBER / DNS / SSL)
- 小米 libc 雜訊 (用 command -v 先查 magisk 才呼叫)
- KernelSU smbclient 缺失改非致命

新增 helper:
- app_details_read / release_details_read (jq 多欄位一次抓)
- prepare_pkg_uid_map / prepare_pkg_ver_map / prepare_installed_pkgs_map
- get_app_uid (uid 三層 fallback)
- _dns_resolve + curl wrapper (繞過 ARM curl DNS 解析失敗)
- jq_inplace / tar_compress_dir / ts_inplace 等
2026-05-18 19:39:33 +08:00
5 changed files with 1866 additions and 3243 deletions

View File

@@ -19,12 +19,6 @@ setDisplayPowerMode=0
#自定義備份文件輸出位置 支持相對路徑(留空則默認當前路徑)
Output_path=""
#自定義備份目錄後綴(留空則不添加後綴)
#支持日期時間變量:%yyyymmdd %hhmmss %yyyymmddhhmmss %yyyy %mm %dd
#例_daily → Backup_zstd_0_daily
#例_%yyyymmdd → Backup_zstd_0_20260522
Backup_suffix=\""$Backup_suffix"\"
#自定義applist.txt位置 支持相對路徑(留空則默認當前路徑)
list_location=""
@@ -148,13 +142,3 @@ remote_pass=
#1保留本地檔案(上傳後不刪除) 0上傳成功後刪除本地檔案
remote_keep_local=0
#邊備份邊上傳 (每備份完一個應用立即上傳,然後刪除本機檔案再備份下一個,以節省本機空間)
#1 開啟 0 關閉
#開啟後:每個應用備份完成 → 立即上傳遠端 → 上傳成功後刪除本機檔案 → 繼續備份下一個
#關閉後:先備份所有應用 → 全部備份完再統一上傳
remote_upload_per_app=0
#log 目錄大小上限 (單位 MB), 達到上限會在啟動時自動清空 log/
#留空或設 0 = 關閉自動清理
log_max_size_mb=

View File

@@ -158,11 +158,7 @@
"2512BPNDAI" "Xiaomi 17 Ultra 印度版"
"25128PNA1C" "Xiaomi 17 Ultra by Leica 國行版 (衛星通訊)"
"25128PNA1G" "Leica Leitzphone powered by Xiaomi 國際版"
"2605EPN8EC" "Xiaomi 17 Max"
"M531DA" "Xiaomi 17T 國行版"
"2602DPT53G" "Xiaomi 17T 國際版"
"2602DPT53I" "Xiaomi 17T 印度版"
"M025EC" "Xiaomi 17T Pro 國行版"
"2602EPTC0G" "Xiaomi 17T Pro 國際版"
"2602EPTC0R" "Xiaomi 17T Pro 日本版 (無鎖)"
"2014616" "小米 Note 雙網通版"
@@ -638,8 +634,7 @@
"24069RA21C" "Redmi Turbo 3"
"24129RT7CC" "REDMI Turbo 4"
"25053RT47C" "REDMI Turbo 4 Pro"
"2511FRT34C" "REDMI Turbo 5 國行版"
"2606FRT34I" "REDMI Turbo 5 印度版"
"2511FRT34C" "REDMI Turbo 5"
"2602BRT18C" "REDMI Turbo 5 Max"
"M1903F10A" "Redmi K20 全網通版"
"M1903F10C" "Redmi K20 運營商全網通版"
@@ -856,7 +851,7 @@
"2410FPCC5G" "POCO C75 國際版"
"2410FPCC5I" "POCO C75 印度版"
"24116PCC1I" "POCO C75 5G 印度版"
"25128PC17Y" "POCO C81 Pro 國際版"
"25128PC17G" "POCO C81 Pro 國際版"
"25128PC17L" "POCO C81 Pro 拉美版"
"25128PC17I" "POCO C81 印度版"
"26020PCB4I" "POCO C81x 印度版"
@@ -868,12 +863,11 @@
"24074PCD2I" "POCO Pad 5G 印度版"
"25099RP08G" "POCO Pad X1 國際版"
"2509ARPBDG" "POCO Pad M1 國際版"
"2603APC14G" "POCO Pad C1 國際版"
"FYJ01QP" "小米米家翻譯機"
"21051191C" "CyberDog 仿生四足機器人"
"2405AVPB7C" "小米澎湃智能座艙 (第一代 SU7/SU7 Ultra)"
"25033VP3FC" "小米澎湃智能座艙 (YU7/新一代 SU7)"
"2503CVPC6C" "小米汽車後排移動控制屏"
"2503CVPC6C" "Xiaomi YU7 後排移動控制屏"
"MI-ONE" "Mi 1 Lite"
"2109119BC" "Xiaomi Civi China"
"2109119BC" "Xiaomi Civi 1S China"
@@ -2905,7 +2899,6 @@
"RMX5171" "realme 16 5G"
"RMX5120" "realme 16 Pro 5G"
"RMX5131" "realme 16 Pro+ 5G"
"RMX5268" "realme 16T 5G"
"RMX1921" "realme XT Global"
"RMX1922" "realme XT India"
"RMX1992" "realme X2 India"
@@ -3135,8 +3128,6 @@
"V2465A" "vivo S30 Pro mini"
"V2528A" "vivo S50 / vivo S50t"
"V2527A" "vivo S50 Pro mini"
"V2571A" "vivo S60"
"V2572A" "vivo S60 元氣版"
"V1901A" "vivo Y3 全網通版"
"V1901T" "vivo Y3 移動全網通版"
"V1930A" "vivo Y3 標準版 全網通版"
@@ -3182,7 +3173,6 @@
"V2164A" "vivo Y55s 5G"
"V2559A" "vivo Y60 5G / vivo Y6t 5G"
"V2559BA" "vivo Y60m 5G"
"V2532BA" "vivo Y6m"
"V1731CA" "vivo Y71s"
"V2102A" "vivo Y71t 5G"
"V2164PA" "vivo Y73t 5G"
@@ -3219,7 +3209,6 @@
"V2516A" "vivo Y500 Pro"
"V2531A" "vivo Y500i / vivo Y500s / vivo Y6"
"V2561A" "vivo Y600 Pro"
"V2553A" "vivo Y600 Turbo"
"V2115A" "vivo T1"
"V2199GA" "vivo T2"
"V2188A" "vivo T2x"
@@ -3427,6 +3416,7 @@
"V2418" "vivo V40 Lite 5G Indonesia"
"V2337" "vivo V40 SE 5G"
"V2451" "vivo V50"
"V2504" "vivo V50 Pro"
"V2428" "vivo V50e"
"V2441" "vivo V50 Lite"
"V2453" "vivo V50 Lite 5G"
@@ -3437,7 +3427,6 @@
"V2540" "vivo V70"
"V2548" "vivo V70 Elite"
"V2558" "vivo V70 FE"
"V2637" "vivo V70 Lite 5G"
"vivo 1920_20" "vivo S1 Pro"
"V2168" "vivo T1"
"V2157" "vivo T1 5G"
@@ -3457,7 +3446,6 @@
"V2509" "vivo T4 Lite 5G"
"V2518" "vivo T4R 5G"
"V2510" "vivo T4 Pro"
"V2504" "vivo T4 Ultra"
"V2568" "vivo T5 Pro"
"V2545" "vivo T5x 5G"
"V2603" "vivo T5 Lite 5G"
@@ -3539,8 +3527,7 @@
"V2036_21" "vivo Y31"
"V2521" "vivo Y31 5G"
"V2534" "vivo Y31 Pro 5G"
"V2636" "vivo Y31d"
"V2543" "vivo Y31d Pro"
"V2611" "vivo Y31d"
"V2533" "vivo Y31e 5G"
"V2057" "vivo Y33"
"V2109-EG" "vivo Y33A"
@@ -3731,8 +3718,6 @@
"PLW110" "OPPO Reno15"
"PLV110" "OPPO Reno15 Pro"
"PMD110" "OPPO Reno15c"
"PMM110" "OPPO Reno16"
"PMK110" "OPPO Reno16 Pro"
"PCLM10" "OPPO Reno Ace"
"PDHM00" "OPPO Ace2"
"PACM00" "OPPO R15 全網通版"
@@ -3817,7 +3802,7 @@
"PLT120" "OPPO A6s / OPPO A6i+ / OPPO A6k"
"PMT110" "OPPO A6s Pro"
"PLT130" "OPPO A6v"
"PLT140" "OPPO A6x / OPPO A6m"
"PLT140" "OPPO A6x"
"PMC110" "OPPO A6c"
"PBCM30" "OPPO K1"
"PCGM00" "OPPO K3 全網通版"
@@ -3854,7 +3839,6 @@
"OPD2501" "OPPO Pad Air5"
"OPD2511" "OPPO Pad 5 Pro"
"OPD2515" "OPPO Pad Mini"
"OPD2601" "OPPO Pad 6"
"OB19O1" "OPPO Band 運動版"
"OB19O3" "OPPO Band 運動版 (國際版)"
"OB19O7" "OPPO Band 活力版"

BIN
tools/bc Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff