feat: 新增遠端備份系統 (WebDAV / SMB)

主要功能:
- 遠端上傳:備份完自動上傳到 NAS / 雲端,支援 WebDAV / SMB
- 遠端下載:從遠端拉回備份,可直接執行恢復
- 連線測試:三層測試 (TCP / 認證 / 路徑) 驗證設定
- 區網掃描:啟動時自動掃描區網 SMB 主機
- 單獨上傳:每個 app 子目錄生成 upload.sh,可獨立補傳

優化:
- WebDAV 並行下載 (curl -Z, 4 路同時)
- SMB 批次傳輸 (每目錄一次連線)
- 完整 UTF-8 中文路徑支援

修復:
- 強制 curl HTTP/1.1 避開 nginx PUT 404 問題
- WebDAV 預建初始目錄
- trap EXIT 不再誤觸發上傳
- 失敗檔案完整 log,不再中途中斷

詳見 CHANGELOG.md
This commit is contained in:
Yawasau
2026-05-16 10:59:58 +08:00
parent ff47576425
commit 8509e3ec2b
6 changed files with 1171 additions and 446 deletions

307
README.md
View File

@@ -12,11 +12,13 @@
## 📖 概述 ## 📖 概述
一款專為 Android 設計的完整應用數據備份/恢復 Shell 腳本支援 SSAID、運行時權限、OBB 數據包、WiFi 設定等完整備份讓你換機換系統後能無縫還原所有應用狀態。 一款專為 Android 設計的完整應用數據備份/恢復 Shell 腳本,支援 SSAID、運行時權限、OBB 數據包、WiFi 設定等完整備份,讓你換機換系統後能無縫還原所有應用狀態。
> 作者為台灣人預設發布繁體版本。CN 系統環境下腳本將自動翻譯為簡體中文 新版增加**完整的遠端備份系統**,支援 WebDAV / SMB 上傳到 NAS / 雲端 / 區網電腦,並可從遠端下載備份回手機直接恢復
**系統需求:** `Android 8+` · `arm64 架構` · `Root 權限Magisk / KernelSU` > 作者為台灣人,預設發布繁體版本。CN 系統環境下腳本將自動翻譯為簡體中文。
**系統需求:** `Android 8+` · `arm64 架構` · `Root 權限(Magisk / KernelSU)`
--- ---
@@ -24,26 +26,29 @@
| 功能 | 說明 | | 功能 | 說明 |
|------|------| |------|------|
| 📦 完整數據備份 | 換機換系統後原有數據完整保留無需重新登入或下載額外數據包 | | 📦 完整數據備份 | 換機換系統後原有數據完整保留,無需重新登入或下載額外數據包 |
| 🔑 SSAID 備份 | 支援 SSAID 備份可完美備份 LINE 等依賴設備識別碼的應用 | | 🔑 SSAID 備份 | 支援 SSAID 備份,可完美備份 LINE 等依賴設備識別碼的應用 |
| 🛡️ 權限備份 | 支援備份運行時權限Runtime Permission與 ops 權限 | | 🛡️ 權限備份 | 支援備份運行時權限(Runtime Permission)與 ops 權限 |
| 📂 Split APK | 支援備份與恢復 Split APK 格式 | | 📂 Split APK | 支援備份與恢復 Split APK 格式 |
| 🎮 OBB 數據包 | 可選備份外部 OBB 數據如原神、王者榮耀等大型遊戲 | | 🎮 OBB 數據包 | 可選備份外部 OBB 數據(如原神、王者榮耀等大型遊戲) |
| 📡 WiFi 備份 | 支援備份與恢復 WiFi 設定 | | 📡 WiFi 備份 | 支援備份與恢復 WiFi 設定 |
| 📁 自定義資料夾備份 | 可備份 DCIM、Download、Music 等任意自定義目錄 | | 📁 自定義資料夾備份 | 可備份 DCIM、Download、Music 等任意自定義目錄 |
| 🗜️ 多種壓縮算法 | 支援 `tar`僅打包`zstd`高壓縮率高速度 | | 🗜️ 多種壓縮算法 | 支援 `tar`(僅打包)`zstd`(高壓縮率高速度) |
| ⚡ 高速壓縮 | zstd 壓縮速率快速優於鈦備份、Swift Backup | | ⚡ 高速壓縮 | zstd 壓縮速率快速,優於鈦備份、Swift Backup |
| 🔒 完整性校驗 | 內建 tools SHA-256 校驗與壓縮包完整性驗證 | | 🔒 完整性校驗 | 內建 tools SHA-256 校驗與壓縮包完整性驗證 |
| 🔄 增量備份 | 比對上次備份大小無變化則跳過節省時間 | | 🔄 增量備份 | 比對上次備份大小,無變化則跳過,節省時間 |
| 🖥️ 後台執行 | 支援後台執行模式可完全關閉終端log 持續刷新 | | 🖥️ 後台執行 | 支援後台執行模式,可完全關閉終端,log 持續刷新 |
| 💡 偽裝亮屏 | 備份恢復期間可偽裝亮屏避免 IO 因息屏降速 | | 💡 偽裝亮屏 | 備份/恢復期間可偽裝亮屏,避免 IO 因息屏降速 |
| 🌐 自動更新 | 聯網偵測最新版本支援 CDN 節點適合中國大陸用戶 | | 🌐 自動更新 | 聯網偵測最新版本,支援 CDN 節點(適合中國大陸用戶) |
| 🌏 多語言 | 自動識別系統語言環境支援繁體中文簡體中文自動切換 | | 🌏 多語言 | 自動識別系統語言環境,支援繁體中文/簡體中文自動切換 |
| 👥 多用戶支援 | 支援多用戶環境user 0、999 等可手動或自動選擇用戶 | | 👥 多用戶支援 | 支援多用戶環境(user 0、999 等),可手動或自動選擇用戶 |
| ⬛ 黑名單模式 | 黑名單應用可選「完全忽略」或「僅備份安裝包」 | | ⬛ 黑名單模式 | 黑名單應用可選「完全忽略」或「僅備份安裝包」 |
| ⬜ 白名單支援 | 支援預裝應用白名單與系統應用白名單可指定備份範圍 | | ⬜ 白名單支援 | 支援預裝應用白名單與系統應用白名單,可指定備份範圍 |
| 📱 進程偵測 | 可設定忽略正在運行中的應用避免備份數據不一致 | | 📱 進程偵測 | 可設定忽略正在運行中的應用,避免備份數據不一致 |
| ☁️ 遠程備份 | 支援 WebDAV / FTP / SMB / SCP 四種協議備份完成自動上傳到遠端伺服器 | | ☁️ 遠程備份上傳 | 支援 WebDAV / SMB 兩種協議,備份完成自動上傳,智能範圍與失敗重試 |
| 📥 遠程下載恢復 | 可從遠端直接下載備份回手機,點 start.sh 即可恢復 |
| 🔍 區網掃描 | 自動掃描區網內所有 SMB 主機,免去手動找 IP |
| 🧪 連線測試 | 三層測試(TCP / 認證 / 路徑),設定不需備份就能驗證 |
--- ---
@@ -58,6 +63,10 @@
| 備份已更新應用 | 僅備份自上次備份以來有版本更新的應用 | | 備份已更新應用 | 僅備份自上次備份以來有版本更新的應用 |
| 備份自定義資料夾 | 備份 `backup_settings.conf` 內設定的自定義目錄 | | 備份自定義資料夾 | 備份 `backup_settings.conf` 內設定的自定義目錄 |
| 備份 WiFi | 備份當前設備的 WiFi 設定 | | 備份 WiFi | 備份當前設備的 WiFi 設定 |
| 測試遠端連線 | 驗證 WebDAV / SMB 設定,三層測試(TCP / 認證 / 路徑) |
| 單獨上傳當前備份 | 上傳現有本地備份到遠端,不重新跑備份流程 |
| 列出遠端備份 | 連線遠端、產生 `appList_network.txt` 讓你勾選要下載哪些 app |
| 從遠端下載備份 | 依清單下載備份到本地,可直接執行恢復 |
| 殺死運行中腳本 | 安全終止正在執行的備份腳本 | | 殺死運行中腳本 | 安全終止正在執行的備份腳本 |
### 恢復模式 ### 恢復模式
@@ -66,12 +75,12 @@
|------|------| |------|------|
| 重新生成應用列表 | 刷新恢復資料夾內的 `appList.txt` | | 重新生成應用列表 | 刷新恢復資料夾內的 `appList.txt` |
| 恢復備份 | 根據列表完整恢復應用與數據 | | 恢復備份 | 根據列表完整恢復應用與數據 |
| 僅恢復包含 SSAID 應用含數據 | 只恢復有 SSAID 的應用及其完整數據 | | 僅恢復包含 SSAID 應用(含數據) | 只恢復有 SSAID 的應用及其完整數據 |
| 僅恢復包含 SSAID 應用不含數據 | 只套用 SSAID不覆蓋現有數據 | | 僅恢復包含 SSAID 應用(不含數據) | 只套用 SSAID,不覆蓋現有數據 |
| 恢復自定義資料夾 | 恢復備份的自定義目錄 | | 恢復自定義資料夾 | 恢復備份的自定義目錄 |
| 恢復 WiFi | 恢復已備份的 WiFi 設定 | | 恢復 WiFi | 恢復已備份的 WiFi 設定 |
| 壓縮檔完整性檢查 | 驗證備份壓縮包是否完整無損 | | 壓縮檔完整性檢查 | 驗證備份壓縮包是否完整無損 |
| 轉換文件夾名稱 | 將備份資料夾名稱格式轉換用於跨版本相容 | | 轉換文件夾名稱 | 將備份資料夾名稱格式轉換(用於跨版本相容) |
| 殺死運行中腳本 | 安全終止正在執行的恢復腳本 | | 殺死運行中腳本 | 安全終止正在執行的恢復腳本 |
--- ---
@@ -85,14 +94,14 @@ backup_script.zip
│ ├── busybox # 核心工具集 │ ├── busybox # 核心工具集
│ ├── zstd # zstd 壓縮工具 │ ├── zstd # zstd 壓縮工具
│ ├── tar # tar 打包工具 │ ├── tar # tar 打包工具
│ ├── curl # 遠程傳輸工具 (WebDAV/FTP/SMB) │ ├── curl # 遠程傳輸工具 (WebDAV)
│ ├── scp / ssh # SCP 遠程傳輸 │ ├── smbclient # SMB 遠程傳輸
│ ├── jq # JSON 處理 │ ├── jq # JSON 處理
│ ├── bc # 數學計算 │ ├── bc # 數學計算
│ ├── find # 文件搜索 │ ├── find # 文件搜索
│ ├── keycheck # 音量鍵監聽 │ ├── keycheck # 音量鍵監聽
│ ├── cmd # 系統指令橋接 │ ├── cmd # 系統指令橋接
│ ├── classes.dex # Java 功能擴展詳見下方說明 │ ├── classes.dex # Java 功能擴展(詳見下方說明)
│ ├── soc.json # 處理器資料庫 │ ├── soc.json # 處理器資料庫
│ ├── Device_List # 設備型號資料庫 │ ├── Device_List # 設備型號資料庫
│ └── tools.sh # 核心腳本 │ └── tools.sh # 核心腳本
@@ -101,66 +110,69 @@ backup_script.zip
└── start.sh # 主執行腳本 └── start.sh # 主執行腳本
``` ```
> ⚠️ **重要** 無論備份或恢復都必須確保 `tools/` 目錄完整存在否則腳本將無法正常運作。 > ⚠️ **重要:** 無論備份或恢復,都必須確保 `tools/` 目錄完整存在,否則腳本將無法正常運作。
備份完成後,每個 app 子目錄會額外生成 `upload.sh`,可單獨上傳該 app 到遠端,不需要重新備份。
--- ---
## ⚙️ 設定檔說明backup_settings.conf ## ⚙️ 設定檔說明(backup_settings.conf)
| 設定項 | 說明 | 預設值 | | 設定項 | 說明 | 預設值 |
|--------|------|--------| |--------|------|--------|
| `Lo` | 操作方式`0` 音量鍵 / `1` 音量鍵強制 / `2` 鍵盤輸入 | `0` | | `Lo` | 操作方式:`0` 音量鍵 / `1` 音量鍵(強制) / `2` 鍵盤輸入 | `0` |
| `background_execution` | 後台執行`1` 可關閉終端 / `0` 需保持終端開啟 | `0` | | `background_execution` | 後台執行:`1` 可關閉終端 / `0` 需保持終端開啟 | `0` |
| `setDisplayPowerMode` | 備份期間偽裝亮屏防止 IO 降速 | `0` | | `setDisplayPowerMode` | 備份期間偽裝亮屏防止 IO 降速 | `0` |
| `Shell_LANG` | 語言`0` 繁體中文 / `1` 簡體中文留空自動偵測 | 自動 | | `Shell_LANG` | 語言:`0` 繁體中文 / `1` 簡體中文(留空自動偵測) | 自動 |
| `Output_path` | 自定義備份輸出路徑支援相對路徑留空使用當前目錄 | 空 | | `Output_path` | 自定義備份輸出路徑,支援相對路徑(留空使用當前目錄) | 空 |
| `list_location` | 自定義 appList.txt 位置留空使用當前目錄 | 空 | | `list_location` | 自定義 appList.txt 位置(留空使用當前目錄) | 空 |
| `update` | 自動更新`1` 開啟 / `0` 關閉 | `1` | | `update` | 自動更新:`1` 開啟 / `0` 關閉 | `1` |
| `cdn` | 更新 CDN 節點`0` 直連 / `1` ghfast.top / `2` workers.dev | `1` | | `cdn` | 更新 CDN 節點:`0` 直連 / `1` ghfast.top / `2` workers.dev | `1` |
| `mount_point` | 屏蔽外部掛載點OTG、虛擬 SD 等多個用 `\|` 分隔 | `rannki\|0000-1` | | `mount_point` | 屏蔽外部掛載點(OTG、虛擬 SD 等),多個用 `\|` 分隔 | `rannki\|0000-1` |
| `user` | 指定用戶 ID留空自動選擇 | 空 | | `user` | 指定用戶 ID(留空自動選擇) | 空 |
| `Backup_Mode` | 備份模式`1` 應用+數據 / `0` 僅安裝包 | `1` | | `Backup_Mode` | 備份模式:`1` 應用+數據 / `0` 僅安裝包 | `1` |
| `Backup_user_data` | 備份 user 數據`1` 是 / `0` 否 | `1` | | `Backup_user_data` | 備份 user 數據:`1` 是 / `0` 否 | `1` |
| `Backup_obb_data` | 備份 OBB 外部數據`1` 是 / `0` 否 | `1` | | `Backup_obb_data` | 備份 OBB 外部數據:`1` 是 / `0` 否 | `1` |
| `backup_media` | 備份完成後一併備份自定義資料夾 | `0` | | `backup_media` | 備份完成後一併備份自定義資料夾 | `0` |
| `Background_apps_ignore` | 忽略正在運行中的應用`1` 忽略 / `0` 備份 | `0` | | `Background_apps_ignore` | 忽略正在運行中的應用:`1` 忽略 / `0` 備份 | `0` |
| `Custom_path` | 自定義備份目錄列表絕對路徑每行一個 | DCIM / Download 等 | | `Custom_path` | 自定義備份目錄列表(絕對路徑,每行一個) | DCIM / Download 等 |
| `blacklist_mode` | 黑名單模式`1` 完全忽略 / `0` 僅備份安裝包 | `0` | | `blacklist_mode` | 黑名單模式:`1` 完全忽略 / `0` 僅備份安裝包 | `0` |
| `blacklist` | 黑名單應用包名列表 | 空 | | `blacklist` | 黑名單應用包名列表 | 空 |
| `whitelist` | 預裝應用白名單包名列表 | 小米系列預裝 | | `whitelist` | 預裝應用白名單包名列表 | 小米系列預裝 |
| `system` | 系統應用白名單包名列表 | Google 系列 | | `system` | 系統應用白名單包名列表 | Google 系列 |
| `Compression_method` | 壓縮算法`zstd``tar` | `zstd` | | `Compression_method` | 壓縮算法:`zstd``tar` | `zstd` |
| `rgb_a` / `rgb_b` / `rgb_c` | 終端輸出主色輔色256 色代碼 | `226` / `123` / `177` | | `rgb_a` / `rgb_b` / `rgb_c` | 終端輸出主色/輔色1/輔色2(256 色代碼) | `220` / `51` / `213` |
| `remote_type` | 遠程備份協議`webdav` / `ftp` / `smb` / `scp`留空不啟用 | 空 | | `remote_type` | 遠程備份協議:`webdav` / `smb`(留空不啟用) | 空 |
| `remote_url` | 遠程伺服器地址見下方格式說明 | 空 | | `remote_url` | 遠程伺服器地址(見下方格式說明) | 空 |
| `remote_user` | 遠程認證用戶名 | 空 | | `remote_user` | 遠程認證用戶名 | 空 |
| `remote_pass` | 遠程認證密碼 | 空 | | `remote_pass` | 遠程認證密碼 | 空 |
| `remote_keep_local` | 上傳成功後本地檔案:`1` 保留 / `0` 刪除 | `0` |
--- ---
## 🚀 使用方式 ## 🚀 使用方式
> 推薦使用 [MT 管理器](https://www.coolapk.com/apk/bin.mt.plus) 執行腳本。若使用 Termux請勿使用 `tsu`。 > 推薦使用 [MT 管理器](https://www.coolapk.com/apk/bin.mt.plus) 執行腳本。若使用 Termux,請勿使用 `tsu`。
### 備份流程 ### 備份流程
**Step 1 — 生成應用列表** **Step 1 — 生成應用列表**
解壓腳本後執行 `start.sh`選擇「**生成應用列表**」。執行完畢後當前目錄會生成 `appList.txt`內含所有已安裝的第三方應用預裝應用預設屏蔽可於 `backup_settings.conf` 加入白名單 解壓腳本後執行 `start.sh`,選擇「**生成應用列表**」。執行完畢後,當前目錄會生成 `appList.txt`,內含所有已安裝的第三方應用(預裝應用預設屏蔽,可於 `backup_settings.conf` 加入白名單)
**Step 2 — 編輯應用列表** **Step 2 — 編輯應用列表**
打開 `appList.txt`根據需求調整 打開 `appList.txt`,根據需求調整:
- 行首加 `#`注釋掉該應用不備份 - 行首加 `#`:注釋掉該應用,不備份
- 行首加 `!`僅備份安裝包不備份數據 - 行首加 `!`:僅備份安裝包,不備份數據
**Step 3 — 設置備份選項** **Step 3 — 設置備份選項**
打開 `backup_settings.conf`根據上方設定說明調整各選項後儲存。 打開 `backup_settings.conf`,根據上方設定說明調整各選項後儲存。
**Step 4 — 執行備份** **Step 4 — 執行備份**
執行 `start.sh`選擇「**備份應用**」。備份完成後當前目錄會生成 `Backup_<壓縮算法>_<用戶ID>/` 資料夾將此資料夾完整保存至安全位置。 執行 `start.sh`,選擇「**備份應用**」。備份完成後,當前目錄會生成 `Backup_<壓縮算法>_<用戶ID>/` 資料夾,將此資料夾完整保存至安全位置。
--- ---
@@ -168,91 +180,156 @@ backup_script.zip
**Step 1 — 編輯恢復列表** **Step 1 — 編輯恢復列表**
進入備份資料夾打開 `appList.txt`刪除或注釋不需要恢復的應用行。 進入備份資料夾,打開 `appList.txt`,刪除或注釋不需要恢復的應用行。
**Step 2 — 執行恢復** **Step 2 — 執行恢復**
執行備份資料夾內的 `start.sh`選擇「**恢復備份**」等待腳本完成。 執行備份資料夾內的 `start.sh`,選擇「**恢復備份**」,等待腳本完成。
**Step 3 — 注意 SSAID** **Step 3 — 注意 SSAID**
若恢復結束後提示應用存在 SSAID請**立刻重啟**後再開啟應用。若先開啟應用Android 會生成新的 SSAID導致應用白屏或需要重新登入。 若恢復結束後提示應用存在 SSAID,請**立刻重啟**後再開啟應用。若先開啟應用,Android 會生成新的 SSAID,導致應用白屏或需要重新登入。
> 💡 備份資料夾內每個應用子目錄都有獨立的 `backup.sh``recover.sh`可單獨備份恢復單一應用。 > 💡 備份資料夾內每個應用子目錄都有獨立的 `backup.sh``recover.sh`、`upload.sh`,可單獨備份恢復或上傳單一應用。
--- ---
### 遠程備份 ## ☁️ 遠程備份
備份完成後自動將備份檔案上傳到遠端伺服器支援四種協議: 備份完成後自動將備份檔案上傳到遠端伺服器,支援 WebDAV 與 SMB:
| 協議 | `remote_url` 格式 | | 協議 | `remote_url` 格式 | 適用場景 |
|------|-------------------| |------|-------------------|---------|
| WebDAV | `http://192.168.1.100:8080/dav/backup/` | | WebDAV | `http://192.168.1.100:8080/dav/backup/` | NAS / Nextcloud / 雲端 / rclone serve |
| FTP | `ftp://192.168.1.100/backup/` | | SMB | `smb://192.168.1.100/share/` | Windows 共享 / Samba 伺服器 / NAS |
| SMB | `smb://192.168.1.100/share/backup/` |
| SCP | `192.168.1.100:/home/user/backup/` | **設定方式:** 編輯 `backup_settings.conf`:
**設定方式:** 編輯 `backup_settings.conf`
```conf ```conf
remote_type=webdav remote_type=smb
remote_url=http://192.168.1.100:8080/dav/backup/ remote_url=smb://192.168.1.100/Backup
remote_user=用戶名 remote_user=用戶名
remote_pass=密碼 remote_pass=密碼
remote_keep_local=0
``` ```
**SCP 注意事項:** SCP 優先使用 `sshpass` 進行密碼認證,若不支援則自動嘗試 SSH 密鑰認證。需確保遠端已安裝 SSH 伺服器。 **遠端目錄結構:**
**上傳範圍:** 僅上傳備份數據應用檔案、WiFi、appList.txt排除 `tools/``start.sh``restore_settings.conf` 等腳本文件。 腳本會自動在 `remote_url` 後加 `Backup_<壓縮算法>_<用戶ID>/` 一層,結構與本地完全鏡像。例如 conf 設 `smb://NAS/Backup`,實際上傳到:
```
smb://NAS/Backup/
Backup_zstd_0/
8591遊戲交易/...
Animeko/...
wifi/wifi.json
tools/
start.sh
restore_settings.conf
```
不同用戶(0、999)會自動分開到 `Backup_zstd_0/``Backup_zstd_999/`,互不衝突。
**特性:**
- **智能範圍上傳** — 只上傳本次備份的 app,不是整個資料夾
- **進度與速度** — 每個目錄完成印「完成 X% (12.5 MB/s)」與總耗時
- **失敗處理** — 累積失敗清單,完整成功才會刪本地,部分失敗則本地全保留
- **連線預檢** — 沒網路時 3 秒內判斷並停用上傳,不卡死腳本
- **HTTP code 顯示** — WebDAV 失敗時顯示具體狀態(401 / 403 / 404 / 423 等)
---
### 從遠端下載備份
從 NAS / 雲端拉回備份,直接執行恢復:
**Step 1 — 列出遠端備份**
主選單選「**列出遠端備份**」。腳本會連線遠端,檢查必要檔案(`tools/``start.sh``restore_settings.conf`),產生 `appList_network.txt` 列出所有可下載的 app。
**Step 2 — 編輯下載清單**
打開 `appList_network.txt`,用 `#` 註解掉不要下載的 app。
**Step 3 — 下載**
主選單選「**從遠端下載備份**」。下載完成後會在當前目錄產生 `Backup_<壓縮算法>_<用戶ID>/`,可直接執行內附的 `start.sh` 恢復。
---
### 連線測試
設定完 `backup_settings.conf` 後,主選單選「**測試遠端連線**」可驗證設定:
```
—————— TCP 連線測試 ——————
目標: 192.168.1.100:445
TCP 連線通過
—————— 認證與列目錄測試 ——————
SMB 認證通過, share 可存取
全部測試通過, 可以開始備份
```
每個失敗階段都有對應錯誤訊息(認證失敗 / share 不存在 / 路徑不存在等)。
---
### 上傳範圍
每次備份自動上傳:
- 本次備份的 app(智能比對 appList.txt)
- WiFi 配置(若有)
- 自定義資料夾 Media/(若有設 Custom_path)
- 固定 3 項:`tools/``start.sh``restore_settings.conf`(讓遠端能獨立恢復)
--- ---
## 🔄 腳本更新方式 ## 🔄 腳本更新方式
支援以下四種更新方式 支援以下四種更新方式:
1. **ZIP 放置更新**將下載的 `.zip` 不解壓直接放到腳本任意目錄`tools/` 除外執行任何腳本即自動更新。 1. **ZIP 放置更新**:將下載的 `.zip` 不解壓,直接放到腳本任意目錄(`tools/` 除外),執行任何腳本即自動更新。
2. **聯網自動更新**腳本執行時自動連線 GitHub API 檢查版本發現新版本時提示下載需設置 `update=1` 2. **聯網自動更新**:腳本執行時自動連線 GitHub API 檢查版本,發現新版本時提示下載(需設置 `update=1`)
3. **Download 目錄**`.zip` 放置於 `/storage/emulated/0/Download/`腳本自動偵測並更新。 3. **Download 目錄**:`.zip` 放置於 `/storage/emulated/0/Download/`,腳本自動偵測並更新。
4. **QQ 群下載**從 QQ 群下載的腳本不解壓直接放置後執行即可自動更新。 4. **QQ 群下載**:從 QQ 群下載的腳本不解壓,直接放置後執行即可自動更新。
> 🔒 腳本聯網**僅用於檢查更新**無任何資料收集或非法操作。 > 🔒 腳本聯網**僅用於檢查更新**,無任何資料收集或非法操作。
--- ---
## ❓ 常見問題 ## ❓ 常見問題
<details> <details>
<summary><b>Q1批量備份恢復大量提示失敗</b></summary> <summary><b>Q1:批量備份/恢復大量提示失敗?</b></summary>
退出腳本刪除 `/data/backup_tools/` 目錄後重新執行。若問題持續請建立 [Issue](https://github.com/YAWAsau/backup_script/issues) 並附上截圖與 log。 退出腳本,刪除 `/data/backup_tools/` 目錄後重新執行。若問題持續,請建立 [Issue](https://github.com/YAWAsau/backup_script/issues) 並附上截圖與 log。
</details> </details>
<details> <details>
<summary><b>Q2微信QQ 能完美備份恢復嗎</b></summary> <summary><b>Q2:微信/QQ 能完美備份恢復嗎?</b></summary>
無法保證。建議同時使用其他你信賴的備份工具針對微信QQ 額外備份以防丟失重要數據。 無法保證。建議同時使用其他你信賴的備份工具針對微信/QQ 額外備份,以防丟失重要數據。
</details> </details>
<details> <details>
<summary><b>Q3為什麼部分應用備份很久</b></summary> <summary><b>Q3:為什麼部分應用備份很久?</b></summary>
腳本會一同備份應用的 OBB 數據包例如原神數據包超過 9GB備份與恢復時間自然較長。可在 `backup_settings.conf` 設置 `Backup_obb_data=0` 跳過 OBB 備份。 腳本會一同備份應用的 OBB 數據包,例如原神數據包超過 9GB,備份與恢復時間自然較長。可在 `backup_settings.conf` 設置 `Backup_obb_data=0` 跳過 OBB 備份。
</details> </details>
<details> <details>
<summary><b>Q4腳本每次都是全量備份嗎</b></summary> <summary><b>Q4:腳本每次都是全量備份嗎?</b></summary>
否。腳本會比對上次備份的檔案大小若無差異則跳過該應用節省時間與空間。 否。腳本會比對上次備份的檔案大小,若無差異則跳過該應用,節省時間與空間。
</details> </details>
<details> <details>
<summary><b>Q5為什麼腳本內包含 .dex 檔案</b></summary> <summary><b>Q5:為什麼腳本內包含 .dex 檔案?</b></summary>
`classes.dex` 用於實現 Shell 腳本難以達成的功能包含 `classes.dex` 用於實現 Shell 腳本難以達成的功能,包含:
- SSAID 備份與恢復 - SSAID 備份與恢復
- 運行時權限Runtime Permission與 ops 權限備份恢復 - 運行時權限(Runtime Permission)與 ops 權限備份恢復
- GitHub API 更新版本檢查與下載 - GitHub API 更新版本檢查與下載
- 應用名稱與包名查詢 - 應用名稱與包名查詢
- 繁體中文 ↔ 簡體中文自動翻譯 - 繁體中文 ↔ 簡體中文自動翻譯
@@ -262,33 +339,67 @@ remote_pass=密碼
</details> </details>
<details> <details>
<summary><b>Q6息屏後備份速度變慢</b></summary> <summary><b>Q6:息屏後備份速度變慢?</b></summary>
這是 Android 內核的 IO 節能機制導致的。建議在 `backup_settings.conf` 設置 `setDisplayPowerMode=1` 開啟偽裝亮屏或在備份期間保持螢幕常亮。 這是 Android 內核的 IO 節能機制導致的。建議在 `backup_settings.conf` 設置 `setDisplayPowerMode=1` 開啟偽裝亮屏,或在備份期間保持螢幕常亮。
</details> </details>
<details> <details>
<summary><b>Q7如何單獨備份恢復單一應用</b></summary> <summary><b>Q7:如何單獨備份/恢復/上傳單一應用?</b></summary>
進入備份資料夾內對應的應用子目錄直接執行 `backup.sh`(單獨備份)或 `recover.sh`(單獨恢復)即可。 進入備份資料夾內對應的應用子目錄,直接執行:
- `backup.sh` — 單獨備份該 app
- `recover.sh` — 單獨恢復該 app
- `upload.sh` — 單獨上傳該 app 到遠端(新)
</details>
<details>
<summary><b>Q8:WebDAV 上傳顯示 HTTP 423 Locked?</b></summary>
某些雲端網盤(例如 123 網盤)的 WebDAV 對大檔有單檔大小限制,失敗會把路徑標記為 locked。建議改用以下方案:
- 自家 NAS / Windows SMB(無限制)
- rclone serve webdav(無限制)
- 群暉 / Nextcloud(無限制)
</details>
<details>
<summary><b>Q9:WebDAV 上傳顯示 HTTP 404?</b></summary>
腳本已強制 curl 使用 HTTP/1.1(`--http1.1`),避開部分 openresty / nginx 對 HTTP/2 PUT 的相容問題。如果仍 404,請檢查:
- `remote_url` 路徑是否含正確的 webdav 端點(例如 `/dav/``/remote.php/webdav/`)
- 帳號是否有寫入權限
</details>
<details>
<summary><b>Q10:SMB 提示「找不到 share」?</b></summary>
- Windows 端確認 SMB 共享已開啟,且網路設成「私人」而非「公用」
- 防火牆放行 445 port
- 主選單啟動時的 `scan_smb` 會自動列出區網 SMB 主機與 share 名,可對照確認
</details>
<details>
<summary><b>Q11:沒網路會影響備份嗎?</b></summary>
不會。腳本啟動時會做 TCP 預檢(3 秒內判斷),沒網路時自動停用遠端上傳但**完整保留本地備份**,流程繼續跑完。
</details> </details>
--- ---
## 📬 問題反饋 ## 📬 問題反饋
遇到問題請攜帶截圖與 log 檔透過以下方式反饋 遇到問題請攜帶截圖與 log 檔,透過以下方式反饋:
- 🐛 [GitHub Issues](https://github.com/YAWAsau/backup_script/issues) - 🐛 [GitHub Issues](https://github.com/YAWAsau/backup_script/issues)
- 💬 [Telegram 頻道](https://t.me/yawasau_script) - 💬 [Telegram 頻道](https://t.me/yawasau_script)
- 🐧 QQ 群`976613477` - 🐧 QQ 群:`976613477`
- 🧊 酷安[@落葉淒涼TEL](http://www.coolapk.com/u/2277637) - 🧊 酷安:[@落葉淒涼TEL](http://www.coolapk.com/u/2277637)
--- ---
## ☕ 支持作者 ## ☕ 支持作者
備份腳本耗費了大量時間與精力如果你覺得好用歡迎贊助支持 備份腳本耗費了大量時間與精力,如果你覺得好用,歡迎贊助支持!
[![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg?style=flat-square&logo=paypal)](https://paypal.me/YAWAsau?country.x=TW&locale.x=zh_TW) [![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg?style=flat-square&logo=paypal)](https://paypal.me/YAWAsau?country.x=TW&locale.x=zh_TW)
@@ -298,12 +409,12 @@ remote_pass=密碼
| 貢獻者 | 貢獻內容 | | 貢獻者 | 貢獻內容 |
|--------|----------| |--------|----------|
| [kmou424](https://github.com/kmou424)臭批老k | 提供部分驗證函數思路 | | [kmou424](https://github.com/kmou424)(臭批老k) | 提供部分驗證函數思路 |
| [雄氏老方](http://www.coolapk.com/u/665894)屑老方 | 提供自動更新腳本方案 | | [雄氏老方](http://www.coolapk.com/u/665894)(屑老方) | 提供自動更新腳本方案 |
| 雨季騷年胖子老陳 | 協助測試 | | [sakuradairong](https://github.com/sakuradairong)(雨季騷年/胖子老陳) | 新增 WebDAV / SMB 功能與測試 |
| [XayahSuSuSu](https://github.com/XayahSuSuSu) | 提供 App 支持與 dex 功能支持 | | [XayahSuSuSu](https://github.com/XayahSuSuSu) | 提供 App 支持與 dex 功能支持 |
`文檔編輯Petit-Abba, YuKongA` `文檔編輯:Petit-Abba, YuKongA`
--- ---

View File

@@ -113,23 +113,23 @@ com.android.chrome"
#zstd擁有良好的壓縮率與速度 #zstd擁有良好的壓縮率與速度
Compression_method=zstd Compression_method=zstd
# #色彩設定 (256 色 ANSI 編號)
rgb_a=226 #常用值: 39藍 51青 82綠 196紅 208橘 213粉 220黃 165紫
#輔色 #主色 (一般資訊, 預設亮黃)
rgb_b=123 rgb_a=220
rgb_c=177 #輔色1 (提示/進度, 預設亮青)
rgb_b=51
#輔色2 (強調/變數值, 預設粉紅)
rgb_c=213
#遠程備份類型 (留空不啟用) #遠程備份類型 (留空不啟用)
#推薦 webdav (穩定) 或 ftp(可自動建目錄) #推薦 webdav (穩定)
#smb 僅支援 SMB1/CIFSWindows Server 需手動開啟 #smb 僅支援 SMB1/CIFSWindows Server 需手動開啟
#scp 需 SSH 服務器,支援密碼或密鑰認證
remote_type= remote_type=
#遠程地址 #遠程地址
#WebDAV例: http://192.168.1.100:8080/dav/ #WebDAV例: http://192.168.1.100:8080/dav/
#FTP例: ftp://192.168.1.100/backup/
#SMB例: smb://192.168.1.100/backup/ #SMB例: smb://192.168.1.100/backup/
#SCP例: 192.168.1.100:/home/user/backup/
remote_url= remote_url=
#遠程認證用戶名 #遠程認證用戶名

View File

@@ -1,19 +1,12 @@
#!/system/bin/sh #!/system/bin/sh
if [ ! -f "${0%/*}/tools/tools.sh" ]; then if [ -f "${0%/*}/tools/tools.sh" ]; then
echo "${0%/*}/tools/tools.sh遺失" MODDIR="${0%/*}"
exit 1 conf_path="${0%/*}/backup_settings.conf"
[ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh"
else
echo "${0%/*}/tools/tools.sh遺失"
fi fi
MODDIR="${0%/*}"
conf_path="${0%/*}/backup_settings.conf"
# 若配置文件不存在,啟動腳本自動生成默認配置後退出
if [ ! -f "$conf_path" ]; then
. "${0%/*}/tools/tools.sh"
exit 0
fi
mkdir -p "${0%/*}/log" 2>/dev/null mkdir -p "${0%/*}/log" 2>/dev/null
logfile="${0%/*}/log/log_$(date +%Y-%m-%d_%H-%M).txt" logfile="${0%/*}/log/log_$(date +%Y-%m-%d_%H-%M).txt"
. "${0%/*}/tools/tools.sh" | tee "$logfile" . "${0%/*}/tools/tools.sh" | tee "$logfile"
sed -i $'s/\033\[[0-9;]*m//g' "$logfile" sed -i "$(printf 's/\[[0-9;]*m//g')" "$logfile"

Binary file not shown.

BIN
tools/ssh

Binary file not shown.

File diff suppressed because it is too large Load Diff