Backup_script 數據備份腳本

May 16, 2026 · View on GitHub


📖 概述

一款專為 Android 設計的完整應用數據備份/恢復 Shell 腳本,支援 SSAID、運行時權限、OBB 數據包、WiFi 設定等完整備份,讓你換機換系統後能無縫還原所有應用狀態。

新版增加完整的遠端備份系統,支援 WebDAV / SMB 上傳到 NAS / 雲端 / 區網電腦,並可從遠端下載備份回手機直接恢復。

作者為台灣人,預設發布繁體版本。CN 系統環境下腳本將自動翻譯為簡體中文。

系統需求: Android 8+ · arm64 架構 · Root 權限(Magisk / KernelSU)


✨ 功能特色

功能說明
📦 完整數據備份換機換系統後原有數據完整保留,無需重新登入或下載額外數據包
🔑 SSAID 備份支援 SSAID 備份,可完美備份 LINE 等依賴設備識別碼的應用
🛡️ 權限備份支援備份運行時權限(Runtime Permission)與 ops 權限
📂 Split APK支援備份與恢復 Split APK 格式
🎮 OBB 數據包可選備份外部 OBB 數據(如原神、王者榮耀等大型遊戲)
📡 WiFi 備份支援備份與恢復 WiFi 設定
📁 自定義資料夾備份可備份 DCIM、Download、Music 等任意自定義目錄
🗜️ 多種壓縮算法支援 tar(僅打包)與 zstd(高壓縮率高速度)
⚡ 高速壓縮zstd 壓縮速率快速,優於鈦備份、Swift Backup
🔒 完整性校驗內建 tools SHA-256 校驗與壓縮包完整性驗證
🔄 增量備份比對上次備份大小,無變化則跳過,節省時間
🖥️ 後台執行支援後台執行模式,可完全關閉終端,log 持續刷新
💡 偽裝亮屏備份/恢復期間可偽裝亮屏,避免 IO 因息屏降速
🌐 自動更新聯網偵測最新版本,支援 CDN 節點(適合中國大陸用戶)
🌏 多語言自動識別系統語言環境,支援繁體中文/簡體中文自動切換
👥 多用戶支援支援多用戶環境(user 0、999 等),可手動或自動選擇用戶
⬛ 黑名單模式黑名單應用可選「完全忽略」或「僅備份安裝包」
⬜ 白名單支援支援預裝應用白名單與系統應用白名單,可指定備份範圍
📱 進程偵測可設定忽略正在運行中的應用,避免備份數據不一致
☁️ 遠程備份上傳支援 WebDAV / SMB 兩種協議,備份完成自動上傳,智能範圍與失敗重試
📥 遠程下載恢復可從遠端直接下載備份回手機,點 start.sh 即可恢復
🔍 區網掃描自動掃描區網內所有 SMB 主機,免去手動找 IP
🧪 連線測試三層測試(TCP / 認證 / 路徑),設定不需備份就能驗證

🗂️ 主選單功能

備份模式

選項功能
生成應用列表掃描已安裝的第三方應用並生成 appList.txt
備份應用根據列表與設定完整備份應用數據
備份已更新應用僅備份自上次備份以來有版本更新的應用
備份自定義資料夾備份 backup_settings.conf 內設定的自定義目錄
備份 WiFi備份當前設備的 WiFi 設定
測試遠端連線驗證 WebDAV / SMB 設定,三層測試(TCP / 認證 / 路徑)
單獨上傳當前備份上傳現有本地備份到遠端,不重新跑備份流程
列出遠端備份連線遠端、產生 appList_network.txt 讓你勾選要下載哪些 app
從遠端下載備份依清單下載備份到本地,可直接執行恢復
殺死運行中腳本安全終止正在執行的備份腳本

恢復模式

選項功能
重新生成應用列表刷新恢復資料夾內的 appList.txt
恢復備份根據列表完整恢復應用與數據
僅恢復包含 SSAID 應用(含數據)只恢復有 SSAID 的應用及其完整數據
僅恢復包含 SSAID 應用(不含數據)只套用 SSAID,不覆蓋現有數據
恢復自定義資料夾恢復備份的自定義目錄
恢復 WiFi恢復已備份的 WiFi 設定
壓縮檔完整性檢查驗證備份壓縮包是否完整無損
轉換文件夾名稱將備份資料夾名稱格式轉換(用於跨版本相容)
殺死運行中腳本安全終止正在執行的恢復腳本

📁 目錄結構

backup_script.zip

├── tools/
│   ├── busybox          # 核心工具集
│   ├── zstd             # zstd 壓縮工具
│   ├── tar              # tar 打包工具
│   ├── curl             # 遠程傳輸工具 (WebDAV)
│   ├── smbclient        # SMB 遠程傳輸
│   ├── jq               # JSON 處理
│   ├── bc               # 數學計算
│   ├── find             # 文件搜索
│   ├── keycheck         # 音量鍵監聽
│   ├── cmd              # 系統指令橋接
│   ├── classes.dex      # Java 功能擴展(詳見下方說明)
│   ├── soc.json         # 處理器資料庫
│   ├── Device_List      # 設備型號資料庫
│   └── tools.sh         # 核心腳本

├── backup_settings.conf  # 備份行為設定檔
└── start.sh              # 主執行腳本

⚠️ 重要: 無論備份或恢復,都必須確保 tools/ 目錄完整存在,否則腳本將無法正常運作。

備份完成後,每個 app 子目錄會額外生成 upload.sh,可單獨上傳該 app 到遠端,不需要重新備份。


⚙️ 設定檔說明(backup_settings.conf)

設定項說明預設值
Lo操作方式:0 音量鍵 / 1 音量鍵(強制) / 2 鍵盤輸入0
background_execution後台執行:1 可關閉終端 / 0 需保持終端開啟0
setDisplayPowerMode備份期間偽裝亮屏防止 IO 降速0
Shell_LANG語言:0 繁體中文 / 1 簡體中文(留空自動偵測)自動
Output_path自定義備份輸出路徑,支援相對路徑(留空使用當前目錄)
list_location自定義 appList.txt 位置(留空使用當前目錄)
update自動更新:1 開啟 / 0 關閉1
cdn更新 CDN 節點:0 直連 / 1 ghfast.top / 2 workers.dev1
mount_point屏蔽外部掛載點(OTG、虛擬 SD 等),多個用 | 分隔rannki|0000-1
user指定用戶 ID(留空自動選擇)
Backup_Mode備份模式:1 應用+數據 / 0 僅安裝包1
Backup_user_data備份 user 數據:1 是 / 01
Backup_obb_data備份 OBB 外部數據:1 是 / 01
backup_media備份完成後一併備份自定義資料夾0
Background_apps_ignore忽略正在運行中的應用:1 忽略 / 0 備份0
Custom_path自定義備份目錄列表(絕對路徑,每行一個)DCIM / Download 等
blacklist_mode黑名單模式:1 完全忽略 / 0 僅備份安裝包0
blacklist黑名單應用包名列表
whitelist預裝應用白名單包名列表小米系列預裝
system系統應用白名單包名列表Google 系列
Compression_method壓縮算法:zstdtarzstd
rgb_a / rgb_b / rgb_c終端輸出主色/輔色1/輔色2(256 色代碼)220 / 51 / 213
remote_type遠程備份協議:webdav / smb(留空不啟用)
remote_url遠程伺服器地址(見下方格式說明)
remote_user遠程認證用戶名
remote_pass遠程認證密碼
remote_keep_local上傳成功後本地檔案:1 保留 / 0 刪除0

🚀 使用方式

推薦使用 MT 管理器 執行腳本。若使用 Termux,請勿使用 tsu

備份流程

Step 1 — 生成應用列表

解壓腳本後執行 start.sh,選擇「生成應用列表」。執行完畢後,當前目錄會生成 appList.txt,內含所有已安裝的第三方應用(預裝應用預設屏蔽,可於 backup_settings.conf 加入白名單)。

Step 2 — 編輯應用列表

打開 appList.txt,根據需求調整:

  • 行首加 #:注釋掉該應用,不備份
  • 行首加 !:僅備份安裝包,不備份數據

Step 3 — 設置備份選項

打開 backup_settings.conf,根據上方設定說明調整各選項後儲存。

Step 4 — 執行備份

執行 start.sh,選擇「備份應用」。備份完成後,當前目錄會生成 Backup_<壓縮算法>_<用戶ID>/ 資料夾,將此資料夾完整保存至安全位置。


恢復流程

Step 1 — 編輯恢復列表

進入備份資料夾,打開 appList.txt,刪除或注釋不需要恢復的應用行。

Step 2 — 執行恢復

執行備份資料夾內的 start.sh,選擇「恢復備份」,等待腳本完成。

Step 3 — 注意 SSAID

若恢復結束後提示應用存在 SSAID,請立刻重啟後再開啟應用。若先開啟應用,Android 會生成新的 SSAID,導致應用白屏或需要重新登入。

💡 備份資料夾內每個應用子目錄都有獨立的 backup.shrecover.shupload.sh,可單獨備份、恢復或上傳單一應用。


☁️ 遠程備份

備份完成後自動將備份檔案上傳到遠端伺服器,支援 WebDAV 與 SMB:

協議remote_url 格式適用場景
WebDAVhttp://192.168.1.100:8080/dav/backup/NAS / Nextcloud / 雲端 / rclone serve
SMBsmb://192.168.1.100/share/Windows 共享 / Samba 伺服器 / NAS

設定方式: 編輯 backup_settings.conf:

remote_type=smb
remote_url=smb://192.168.1.100/Backup
remote_user=用戶名
remote_pass=密碼
remote_keep_local=0

遠端目錄結構:

腳本會自動在 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.shrestore_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.shrestore_settings.conf(讓遠端能獨立恢復)

🔄 腳本更新方式

支援以下四種更新方式:

  1. ZIP 放置更新:將下載的 .zip 不解壓,直接放到腳本任意目錄(tools/ 除外),執行任何腳本即自動更新。
  2. 聯網自動更新:腳本執行時自動連線 GitHub API 檢查版本,發現新版本時提示下載(需設置 update=1)。
  3. Download 目錄:將 .zip 放置於 /storage/emulated/0/Download/,腳本自動偵測並更新。
  4. QQ 群下載:從 QQ 群下載的腳本不解壓,直接放置後執行即可自動更新。

🔒 腳本聯網僅用於檢查更新,無任何資料收集或非法操作。


❓ 常見問題

Q1:批量備份/恢復大量提示失敗?

退出腳本,刪除 /data/backup_tools/ 目錄後重新執行。若問題持續,請建立 Issue 並附上截圖與 log。

Q2:微信/QQ 能完美備份恢復嗎?

無法保證。建議同時使用其他你信賴的備份工具針對微信/QQ 額外備份,以防丟失重要數據。

Q3:為什麼部分應用備份很久?

腳本會一同備份應用的 OBB 數據包,例如原神數據包超過 9GB,備份與恢復時間自然較長。可在 backup_settings.conf 設置 Backup_obb_data=0 跳過 OBB 備份。

Q4:腳本每次都是全量備份嗎?

否。腳本會比對上次備份的檔案大小,若無差異則跳過該應用,節省時間與空間。

Q5:為什麼腳本內包含 .dex 檔案?

classes.dex 用於實現 Shell 腳本難以達成的功能,包含:

  • SSAID 備份與恢復
  • 運行時權限(Runtime Permission)與 ops 權限備份恢復
  • GitHub API 更新版本檢查與下載
  • 應用名稱與包名查詢
  • 繁體中文 ↔ 簡體中文自動翻譯
  • 後台執行模式的推送通知

感謝 XayahSuSuSuAndroid-DataBackup 提供 App 支持。

Q6:息屏後備份速度變慢?

這是 Android 內核的 IO 節能機制導致的。建議在 backup_settings.conf 設置 setDisplayPowerMode=1 開啟偽裝亮屏,或在備份期間保持螢幕常亮。

Q7:如何單獨備份/恢復/上傳單一應用?

進入備份資料夾內對應的應用子目錄,直接執行:

  • backup.sh — 單獨備份該 app
  • recover.sh — 單獨恢復該 app
  • upload.sh — 單獨上傳該 app 到遠端(新)
Q8:WebDAV 上傳顯示 HTTP 423 Locked?

某些雲端網盤(例如 123 網盤)的 WebDAV 對大檔有單檔大小限制,失敗會把路徑標記為 locked。建議改用以下方案:

  • 自家 NAS / Windows SMB(無限制)
  • rclone serve webdav(無限制)
  • 群暉 / Nextcloud(無限制)
Q9:WebDAV 上傳顯示 HTTP 404?

腳本已強制 curl 使用 HTTP/1.1(--http1.1),避開部分 openresty / nginx 對 HTTP/2 PUT 的相容問題。如果仍 404,請檢查:

  • remote_url 路徑是否含正確的 webdav 端點(例如 /dav//remote.php/webdav/)
  • 帳號是否有寫入權限
Q10:SMB 提示「找不到 share」?
  • Windows 端確認 SMB 共享已開啟,且網路設成「私人」而非「公用」
  • 防火牆放行 445 port
  • 主選單啟動時的 scan_smb 會自動列出區網 SMB 主機與 share 名,可對照確認
Q11:沒網路會影響備份嗎?

不會。腳本啟動時會做 TCP 預檢(3 秒內判斷),沒網路時自動停用遠端上傳但完整保留本地備份,流程繼續跑完。


📬 問題反饋

遇到問題請攜帶截圖與 log 檔,透過以下方式反饋:


☕ 支持作者

備份腳本耗費了大量時間與精力,如果你覺得好用,歡迎贊助支持!

Donate


🙏 銘謝貢獻

貢獻者貢獻內容
kmou424(臭批老k)提供部分驗證函數思路
雄氏老方(屑老方)提供自動更新腳本方案
sakuradairong(雨季騷年/胖子老陳)新增 WebDAV / SMB 功能與測試
XayahSuSuSu提供 App 支持與 dex 功能支持

文檔編輯:Petit-Abba, YuKongA


GPL-3.0 Licensed · Made with ❤️ by YAWAsau