This commit is contained in:
Yawasau
2025-07-06 17:35:19 +08:00
parent 6fb9d0314b
commit bf58f2f7b2
12 changed files with 613 additions and 569 deletions

View File

@@ -1,7 +1,7 @@
#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
#2使用鍵盤輸入適用於無音量鍵可用設備選擇 (如選項未設置,則強制使用鍵盤輸入)
Lo=1
Lo=0
#後台執行腳本
0不能關閉當前終端有壓縮速率
@@ -30,7 +30,7 @@ update=1
#0 直鏈下載
#1 https://ghfast.top
#2 https://shrill-pond-3e81.hunsh.workers.dev
cdn=
cdn=1
#自定義屏蔽外部掛載點 例OTG 虛擬SD等 多個掛載點請使用 | 區隔
#屏蔽後不會提示音量鍵選擇不影響Output_path指定外置存儲位置
@@ -45,7 +45,7 @@ user=0
#此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表)
Backup_Mode=1
#執行生成應用列表.sh時輸出用於recovery救援的卡刷包
#執行start.sh時輸出用於recovery救援的卡刷包
#1輸出 0不輸出
recovery_flash=0
@@ -57,14 +57,11 @@ Backup_obb_data=1
#是否在應用數據備份完成後備份自定義目錄
#1開啟 0關閉
backup_media=1
backup_media=0
#存在進程忽略備份(1忽略0備份)
Background_apps_ignore=0
#假設你遇到列表輸出異常問題請將此設為1
debug_list=0
#添加自定義備份路徑 例Download DCIM等文件夾 請使用絕對路徑,請勿刪除""
Custom_path="
#/storage/emulated/0/Pictures/

9
start.sh Normal file
View File

@@ -0,0 +1,9 @@
#!/system/bin/sh
if [ -f "${0%/*}/tools/tools.sh" ]; then
MODDIR="${0%/*}"
conf_path="${0%/*}/backup_settings.conf"
[ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh"
else
echo "${0%/*}/tools/tools.sh遺失"
fi
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt"

View File

@@ -145,6 +145,9 @@
"25010PN30G" "Xiaomi 15 Ultra 國際版"
"25010PN30I" "Xiaomi 15 Ultra 印度版"
"25042PN24C" "Xiaomi 15S Pro"
"25069PTEBG" "Xiaomi 15T 國際版"
"2506BPN68G" "Xiaomi 15T Pro 國際版"
"2506BPN68R" "Xiaomi 15T Pro 日本版 (無鎖)"
"2014616" "小米 Note 雙網通版"
"2014619" "小米 Note 全網通版"
"2014618" "小米 Note 移動合約版"
@@ -179,6 +182,8 @@
"24072PX77C" "Xiaomi MIX Fold 4"
"2405CPX3DC" "Xiaomi MIX Flip 國行版"
"2405CPX3DG" "Xiaomi MIX Flip 國際版"
"2505APX7BC" "Xiaomi MIX Flip 2 國行版"
"2505APX7BG" "Xiaomi MIX Flip 2 國際版"
"2016001" "小米 Max 標準版 全網通版"
"2016002" "小米 Max 標準版 國際版"
"2016007" "小米 Max 高配版"
@@ -197,6 +202,7 @@
"2209129SC" "Xiaomi Civi 2"
"23046PNC9C" "Xiaomi Civi 3"
"24053PY09C" "Xiaomi Civi 4 Pro"
"25067PYE3C" "Xiaomi Civi 5 Pro"
"M1901F9E" "小米 Play 全網通版"
"M1901F9T" "小米 Play 移動 4G+ 版"
"MDG2" "小米 A1 國際版"
@@ -228,6 +234,8 @@
"2410CRP4CG" "Xiaomi Pad 7 國際版"
"24091RPADC" "Xiaomi Pad 7 Pro 國行版"
"24091RPADG" "Xiaomi Pad 7 Pro 國際版"
"25032RP42C" "Xiaomi Pad 7 Ultra"
"25053RP5CC" "Xiaomi Pad 7S Pro 12.5"
"2013022" "紅米手機 移動版"
"2013023" "紅米手機 聯通版"
"2013029" "紅米 1S 聯通版"
@@ -366,7 +374,7 @@
"22126RN91Y" "Redmi 12C 國際版 (NFC)"
"2404ARN45A" "Redmi 13 國際版 / REDMI 13x 國際版"
"2404ARN45I" "Redmi 13 印度版"
"24049RN28L" "Redmi 13 拉美版"
"24049RN28L" "Redmi 13 拉美版 / REDMI 13x 拉美版"
"24040RN64Y" "Redmi 13 國際版 (NFC)"
"2406ERN9CI" "Redmi 13 5G 印度版"
"23106RN0DA" "Redmi 13C 國際版"
@@ -566,6 +574,7 @@
"M2003J15SC" "Redmi 10X 4G"
"24069RA21C" "Redmi Turbo 3"
"24129RT7CC" "REDMI Turbo 4"
"25053RT47C" "REDMI Turbo 4 Pro"
"M1903F10A" "Redmi K20 全網通版"
"M1903F10C" "Redmi K20 運營商全網通版"
"M1903F10I" "Redmi K20 印度版"
@@ -603,6 +612,7 @@
"24117RK2CC" "REDMI K80"
"24122RKC7C" "REDMI K80 Pro"
"24127RK2CC" "REDMI K80 Pro 冠軍版"
"25060RK16C" "REDMI K80 至尊版"
"2016020" "紅米 Pro 標準版"
"2016021" "紅米 Pro 高配版 / 尊享版"
"M1803E6E" "紅米 S2 全網通版"
@@ -651,6 +661,16 @@
"24075RP89G" "Redmi Pad SE 8.7 Wi-Fi 國際版"
"24076RP19G" "Redmi Pad SE 8.7 4G 國際版"
"24076RP19I" "Redmi Pad SE 4G 印度版"
"25040RP0AC" "REDMI Pad 2 國行版"
"25040RP0AG" "REDMI Pad 2 國際版"
"25040RP0AI" "REDMI Pad 2 印度版"
"25040RP0AE" "REDMI Pad 2 歐洲版"
"25040RP0AL" "REDMI Pad 2 拉美版"
"2505DRP06C" "REDMI Pad 2 4G 國行版"
"2505DRP06G" "REDMI Pad 2 4G 國際版"
"2505DRP06I" "REDMI Pad 2 4G 印度版"
"2505DRP06E" "REDMI Pad 2 4G 歐洲版"
"25079RPDCC" "REDMI K Pad"
"M1805E10A" "POCO F1"
"M2004J11G" "POCO F2 Pro 國際版"
"M2012K11AG" "POCO F3 國際版"
@@ -1216,6 +1236,7 @@
"SM-S721U1" "Galaxy S24 FE US Unlocked"
"SM-S721W" "Galaxy S24 FE Canada"
"SM-S7210" "Galaxy S24 FE HK & TW"
"SM-S721Q" "Galaxy S24 FE Japan (SIM Free)"
"SCG30" "Galaxy S24 FE Japan (au)"
"SM-S721N" "Galaxy S24 FE South Korea"
"SM-S931B" "Galaxy S25 Global"
@@ -1241,6 +1262,11 @@
"SM-S938Z" "Galaxy S25 Ultra Japan (SoftBank)"
"SCG32" "Galaxy S25 Ultra Japan (au)"
"SC-52F" "Galaxy S25 Ultra Japan (NTT Docomo)"
"SM-S937B" "Galaxy S25 Edge Global"
"SM-S937U" "Galaxy S25 Edge US Carrier"
"SM-S937U1" "Galaxy S25 Edge US Unlocked"
"SM-S937W" "Galaxy S25 Edge Canada"
"SM-S937N" "Galaxy S25 Edge South Korea"
"SM-N960F" "Galaxy Note9 Global"
"SM-N960U" "Galaxy Note9 US Carrier"
"SM-N960U1" "Galaxy Note9 US Unlocked"
@@ -1673,6 +1699,7 @@
"SC-53E" "Galaxy A55 5G Japan (NTT Docomo)"
"SM-A566E" "Galaxy A56 5G Global"
"SM-A566B" "Galaxy A56 5G EU"
"SM-A566S" "Galaxy A56 5G South Korea"
"SM-A606F" "Galaxy A60 Global"
"SM-A606Y" "Galaxy A60 TW"
"SM-A705FN" "Galaxy A70 Global"
@@ -1748,6 +1775,7 @@
"SM-M346B1" "Galaxy M34 5G Southeast Asia"
"SM-M346B2" "Galaxy M34 5G Global"
"SM-M356B" "Galaxy M35 5G"
"SM-M366B" "Galaxy M36 5G"
"SM-M405F" "Galaxy M40"
"SM-M426B" "Galaxy M42 5G"
"SM-M515F" "Galaxy M51"
@@ -1772,6 +1800,7 @@
"SM-E225F" "Galaxy F22"
"SM-E236B" "Galaxy F23 5G"
"SM-E346B" "Galaxy F34 5G"
"SM-E366B" "Galaxy F36 5G"
"SM-F415F" "Galaxy F41"
"SM-E426B" "Galaxy F42 5G"
"SM-E546B" "Galaxy F54 5G"
@@ -1928,6 +1957,7 @@
"Lenovo TB-J606F" "小新 Pad"
"TB128FU" "小新 Pad 2022"
"TB331FC" "小新 Pad 2024"
"TB335FC" "小新平板 11"
"Lenovo TB-J607F" "小新 Pad Plus"
"Lenovo TB-J607Z" "小新 Pad Plus 5G"
"TB350XC" "小新 Pad Plus 2023"
@@ -1950,11 +1980,13 @@
"Lenovo YT3-X90F" "YOGA Tab 3 PRO 10” Wi-Fi 版"
"Lenovo YT3-X90L" "YOGA Tab 3 PRO 10” LTE 版"
"Lenovo YT-K606F" "YOGA Pad Pro"
"TB520FU" "YOGA Pad Pro AI 元啟版"
"TB520FU" "YOGA Pad Pro 12.7 / YOGA Pad Pro AI 元啟版"
"TB571FU" "YOGA Pad Pro 14.5 AI 元啟版"
"SP101FU" "YOGA Paper 墨水平板"
"Lenovo TB-9707F" "拯救者平板 Y700 (2022)"
"TB320FC" "拯救者平板 Y700 2023"
"TB321FU" "拯救者平板 Y700 2025"
"TB322FC" "拯救者平板 Y700 四代"
"TB570ZU" "拯救者平板 Y900"
"Lenovo TB-J616N" "聯想天驕平板電腦"
"Lenovo TB-8504F" "聯想 TAB4 8 英寸 Wi-Fi 版"
@@ -1996,15 +2028,25 @@
"TB230XC" "聯想啟天 K11 Gen2 11.5 英寸 LTE 版"
"TB240FC" "聯想啟天 K12 12.7 英寸 Wi-Fi 版"
"SP523FC" "聯想啟天 SmartPaper 10.3 英寸 Wi-Fi 版"
"TB305FU" "聯想昭陽 K9 8.7 英寸 Wi-Fi 版"
"TB305XC" "聯想昭陽 K9 8.7 英寸 LTE 版"
"TB330FU" "聯想昭陽 K10 10.95 英寸 Wi-Fi 版"
"TB330XC" "聯想昭陽 K10 10.95 英寸 LTE 版"
"TB311FU" "聯想昭陽 K10c 10.1 英寸 Wi-Fi 版"
"TB311XC" "聯想昭陽 K10c 10.1 英寸 LTE 版"
"TB352FC" "聯想昭陽 K11 11.5 英寸 Wi-Fi 版"
"TB352XC" "聯想昭陽 K11 11.5 英寸 LTE 版"
"TB336FU" "聯想昭陽 K11 11 英寸 Wi-Fi 版"
"TB336ZC" "聯想昭陽 K11 11 英寸 5G 版"
"TB337FU" "聯想昭陽 K11c 10.95 英寸 Wi-Fi 版"
"TB373FU" "聯想昭陽 K12 (二代) 12.7 英寸 Wi-Fi 版"
"TB373ZC" "聯想昭陽 K12 (二代) 12.7 英寸 5G 版"
"Lenovo TB-J606N" "Lenovo Tab K11 11 英寸 LTE 版"
"TB-X802F" "聯想昭陽 G11 10.95 英寸 Wi-Fi 版"
"TB-X903F" "聯想昭陽 G12 11.5 英寸 Wi-Fi 版"
"TBY11" "聯想昭陽 Y11 10.95 英寸 Wi-Fi 版"
"Lenovo TB-J606N" "聯想平板電腦 K11 11 英寸 LTE 版"
"QBH10" "聯想平板電腦 S11 10.95 英寸 Wi-Fi 版"
"QBH11" "聯想平板電腦 S11 Pro 11.5 英寸 Wi-Fi 版"
"TB610FU" "ThinkBook Plus Hybrid 2024 (平板)"
"M8" "魅族 M8"
"M8SE" "魅族 M8 SE"
@@ -2086,6 +2128,7 @@
"M461Q" "魅族 21 公開版"
"M461H" "魅族 21 國際版"
"M481Q" "魅族 21 PRO"
"M481S" "魅族 21 PRO Flyme 鈦好用版"
"M468Q" "魅族 21 Note 公開版"
"M468H" "魅族 21 Note 國際版"
"M431Q" "魅族 Lucky 08 公開版"
@@ -2099,6 +2142,8 @@
"M822H" "魅族 Note8 國際版"
"M923Q" "魅族 Note9 公開版"
"M923H" "魅族 Note9 國際版"
"M521Q" "魅族 Note 16"
"M531Q" "魅族 Note 16 Pro"
"M411L" "魅族 Note 21 國際版"
"M412H" "魅族 Note 21 Pro 國際版"
"M810H" "魅族 M8c 國際版"
@@ -2173,7 +2218,7 @@
"M811H" "魅族 M6T 國際版"
"M2112" "魅藍 10"
"M2111" "魅藍 10s"
"M421Q" "魅藍 20 / 魅族 M20"
"M421Q" "魅藍 200 / 魅藍 20C / 魅族 M20"
"M416L" "魅族 MBLU 21"
"S685Q" "魅藍 Max 公開版"
"S685M" "魅藍 Max 移動版"
@@ -2193,7 +2238,6 @@
"M57AC" "魅藍 metal 電信版"
"M710M" "魅藍 A5 移動定制版"
"M710H" "魅族 M5c 國際版"
"M481S" "Lync & Co Phone Pro"
"M481R" "HongQi Wonder"
"M8" "MEIZU M8"
"M570Q" "MEIZU PRO 6 China"
@@ -2248,6 +2292,12 @@
"XT2451-4" "moto razr 50 Ultra"
"XT2435-3" "moto g55"
"XT2437-4" "moto g75"
"XT2505-4" "moto edge 60"
"XT2503-3" "moto edge 60s"
"XT2507-5" "moto edge 60 Pro"
"XT2553-2" "moto razr 60"
"XT2557-1" "moto razr 60 Pro"
"XT2551-3" "moto razr 60 Ultra"
"TA-1000" "Nokia 6"
"TA-1054" "Nokia 6 (第二代)"
"TA-1041" "Nokia 7"
@@ -2273,6 +2323,7 @@
"A059" "Nothing Phone (3a)"
"A059P" "Nothing Phone (3a) Plus"
"A015" "CMF Phone 1"
"A001" "CMF Phone 2 Pro"
"NX501" "nubia Z5"
"NX402" "nubia Z5 mini"
"NX503J" "nubia Z5S"
@@ -2336,6 +2387,7 @@
"nubia 8150N" "nubia Neo 5G"
"Z2352N" "nubia Neo 2 5G"
"Z2461" "nubia Neo 3"
"Z2464N" "nubia Neo 3 5G"
"Z2465N" "nubia Neo 3 GT 5G"
"Z2353" "nubia Music"
"Z2460" "nubia Music 2"
@@ -2353,6 +2405,7 @@
"LPD-20W" "nubia Pad 3D"
"NP02J" "nubia Pad 3D II"
"K99J" "nubia Pad SE"
"NT01" "nubia Pad Pro"
"NX609J" "紅魔電競遊戲手機"
"NX619J" "紅魔 Mars 電競手機"
"NX629J" "紅魔 3"
@@ -2372,173 +2425,182 @@
"NX779J" "紅魔 10 Air"
"NP01J" "紅魔電競平板 5G"
"NP03J" "紅魔電競平板 Pro"
"ONE A0001" "OnePlus One 全網通版 / 移動版 / 國際版"
"ONE A1001" "OnePlus One 聯通版"
"ONE A2001" "OnePlus 2"
"ONE A2003" "OnePlus 2 國際版"
"ONE A2005" "OnePlus 2 北美版"
"ONE E1000" "OnePlus X 全網通版"
"ONE E1001" "OnePlus X 移動版 / 聯通版"
"ONE E1003" "OnePlus X 國際版"
"ONE E1005" "OnePlus X 北美版"
"ONEPLUS A3000" "OnePlus 3 國行版"
"ONEPLUS A3003" "OnePlus 3 國版"
"ONEPLUS A3010" "OnePlus 3T版"
"ONEPLUS A3013" "OnePlus 3T 國版"
"ONEPLUS A5000" "OnePlus 5"
"ONEPLUS A5010" "OnePlus 5T"
"ONEPLUS A6000" "OnePlus 6 國行版"
"ONEPLUS A6003" "OnePlus 6 國版"
"ONEPLUS A6010" "OnePlus 6T版"
"ONEPLUS A6013" "OnePlus 6T 國版"
"GM1900" "OnePlus 7版"
"GM1901" "OnePlus 7 印度版"
"GM1903" "OnePlus 7 歐洲版"
"GM1905" "OnePlus 7 北美版 / 國際版"
"GM1910" "OnePlus 7 Pro版"
"GM1911" "OnePlus 7 Pro 印度版"
"GM1913" "OnePlus 7 Pro 歐洲版"
"GM1915" "OnePlus 7 Pro 北美版 / 國際版"
"GM1917" "OnePlus 7 Pro T-Mobile 版"
"GM1920" "OnePlus 7 Pro 5G 歐洲版"
"GM1925" "OnePlus 7 Pro 5G Sprint 版"
"HD1900" "OnePlus 7T 國行版"
"HD1901" "OnePlus 7T 印度版"
"HD1903" "OnePlus 7T 歐洲版"
"HD1905" "OnePlus 7T 北美版 / 國際版"
"HD1907" "OnePlus 7T T-Mobile 版"
"HD1910" "OnePlus 7T Pro 國行版"
"HD1911" "OnePlus 7T Pro 印度版"
"HD1913" "OnePlus 7T Pro 歐洲版 / 國際版"
"HD1925" "OnePlus 7T Pro 5G T-Mobile 版 / OnePlus Concept One"
"IN2010" "OnePlus 8 國行版"
"IN2011" "OnePlus 8 印度版"
"IN2013" "OnePlus 8 歐洲版"
"IN2015" "OnePlus 8 北美版 / 國際版"
"IN2017" "OnePlus 8 T-Mobile 版"
"IN2019" "OnePlus 8 Visible 版 / Verizon 版"
"IN2020" "OnePlus 8 Pro 國行版"
"IN2021" "OnePlus 8 Pro 印度版"
"IN2023" "OnePlus 8 Pro 歐洲版"
"IN2025" "OnePlus 8 Pro 北美版 / 國際版"
"KB2000" "OnePlus 8T版"
"KB2001" "OnePlus 8T 印度版"
"KB2003" "OnePlus 8T 歐洲版"
"KB2005" "OnePlus 8T 北美版 / 國際版 / OnePlus 8T Concept"
"KB2007" "OnePlus 8T+ T-Mobile 版"
"LE2100" "OnePlus 9R 國行版"
"LE2101" "OnePlus 9R 印度版"
"LE2110" "OnePlus 9 國行版"
"LE2111" "OnePlus 9 印度版"
"LE2113" "OnePlus 9 歐洲版"
"LE2115" "OnePlus 9 北美版 / 國際版"
"LE2117" "OnePlus 9 T-Mobile 版"
"LE2119" "OnePlus 9 Verzion 版"
"LE2120" "OnePlus 9 Pro 國行版"
"LE2121" "OnePlus 9 Pro 印度版"
"LE2123" "OnePlus 9 Pro 歐洲版"
"LE2125" "OnePlus 9 Pro 北美版 / 國際版"
"LE2127" "OnePlus 9 Pro T-Mobile 版"
"MT2110" "OnePlus 9RT 國行版"
"MT2111" "OnePlus 9RT 印度版"
"NE2210" "OnePlus 10 Pro 國行版"
"NE2211" "OnePlus 10 Pro 印度版"
"NE2213" "OnePlus 10 Pro 歐洲版 / 國際版"
"NE2215" "OnePlus 10 Pro 北美版"
"NE2217" "OnePlus 10 Pro T-Mobile 版"
"PGKM10" "OnePlus Ace 國行版"
"CPH2423" "OnePlus 10R 印度版"
"CPH2411" "OnePlus 10R 長壽版 印度版"
"PGZ110" "OnePlus Ace 競速版 國行版"
"PGP110" "OnePlus Ace Pro 國行版 / 原神限定版"
"CPH2413" "OnePlus 10T 印度版"
"CPH2415" "OnePlus 10T 歐洲版 / 國際版"
"CPH2417" "OnePlus 10T 北美版"
"CPH2419" "OnePlus 10T T-Mobile 版"
"PHB110" "OnePlus 11 國行版"
"CPH2447" "OnePlus 11 印度版"
"CPH2449" "OnePlus 11 歐洲版 / 國際版 / OnePlus 11 Concept"
"CPH2451" "OnePlus 11 北美版"
"PHK110" "OnePlus Ace 2 國行版 / 原神定制禮盒"
"CPH2487" "OnePlus 11R 印度版"
"PHP110" "OnePlus Ace 2V 國行版"
"CPH2491" "OnePlus Nord 3 印度版"
"CPH2493" "OnePlus Nord 3 歐洲版"
"PJA110" "OnePlus Ace 2 Pro 國行版 / 原神派蒙主題禮盒"
"PJD110" "OnePlus 12 國行版"
"CPH2573" "OnePlus 12 印度版"
"CPH2581" "OnePlus 12 歐洲版 / 國際版"
"CPH2583" "OnePlus 12 北美版"
"PJE110" "OnePlus Ace 3 國行版 / 原神刻晴定制機"
"CPH2585" "OnePlus 12R 印度版 / 原神刻晴定制機"
"CPH2609" "OnePlus 12R 歐洲版 / 國際版 / 原神刻晴定制機"
"CPH2611" "OnePlus 12R 北美版 / 原神刻晴定制機"
"PJF110" "OnePlus Ace 3V 國行版"
"PJX110" "OnePlus Ace 3 Pro 國行版"
"PJZ110" "OnePlus 13 國行版"
"CPH2649" "OnePlus 13 印度版"
"CPH2653" "OnePlus 13 歐洲版 / 國際版"
"CPH2655" "OnePlus 13 北美版"
"PKG110" "OnePlus Ace 5 國行版"
"CPH2645" "OnePlus 13R 歐洲版 /版"
"CPH2647" "OnePlus 13R 北美版"
"CPH2691" "OnePlus 13R 印度版"
"PKR110" "OnePlus Ace 5 Pro 國行版"
"PKX110" "OnePlus 13T 國行版"
"CPH2723" "OnePlus 13T 國版"
"AC2001" "OnePlus Nord 印度版"
"AC2003" "OnePlus Nord 歐洲版 / 國際版"
"DN2101" "OnePlus Nord 2 印度版"
"DN2103" "OnePlus Nord 2 歐洲版"
"CPH2399" "OnePlus Nord 2T 國際版"
"CPH2401" "OnePlus Nord 2T 印度版"
"CPH2661" "OnePlus Nord 4 印度版"
"CPH2663" "OnePlus Nord 4 歐洲版 / 國際版"
"EB2101" "OnePlus Nord CE 印度版"
"EB2103" "OnePlus Nord CE 歐洲版 / 國際版"
"IV2201" "OnePlus Nord CE 2 印度版"
"CPH2381" "OnePlus Nord CE 2 Lite 印度版"
"CPH2409" "OnePlus Nord CE 2 Lite 歐洲版 / 國際版"
"CPH2569" "OnePlus Nord CE 3 印度版"
"CPH2465" "OnePlus Nord CE 3 Lite 國際版"
"CPH2467" "OnePlus Nord CE 3 Lite 印度版"
"CPH2513" "OnePlus Nord N30 北美版"
"CPH2515" "OnePlus Nord N30 T-Mobile 版"
"CPH2613" "OnePlus Nord CE 4 印度版"
"CPH2619" "OnePlus Nord CE 4 Lite 印度版"
"CPH2621" "OnePlus Nord CE 4 Lite 歐洲版 / 國際版"
"BE2025" "OnePlus Nord N10 Metro 版"
"BE2026" "OnePlus Nord N10 北美版"
"BE2029" "OnePlus Nord N10 歐洲版 / 國際版"
"BE2028" "OnePlus Nord N10 T-Mobile 版"
"BE2011" "OnePlus Nord N100 北美版"
"BE2012" "OnePlus Nord N100 T-Mobile 版"
"BE2013" "OnePlus Nord N100 國際版"
"BE2015" "OnePlus Nord N100 Metro 版"
"GN2200" "OnePlus Nord N20"
"CPH2459" "OnePlus Nord N20"
"CPH2469" "OnePlus Nord N20 SE"
"CPH2605" "OnePlus Nord N30 SE 歐洲版"
"DE2117" "OnePlus Nord N200 北美版"
"DE2118" "OnePlus Nord N200 T-Mobile 版"
"CPH2389" "OnePlus Nord N300"
"CPH2551" "OnePlus Open"
"OPD2203" "OnePlus Pad (2023)"
"OPD2304" "OnePlus Pad Go LTE"
"OPD2305" "OnePlus Pad Go Wi-Fi"
"OPD2407" "OnePlus Pad (2024)"
"OPD2404" "OnePlus Pad Pro"
"OPD2403" "OnePlus Pad 2"
"W101IN" "OnePlus Band 印度版"
"OPBBE221" "OnePlus Nord Watch "
"W301CN" "OnePlus Watch 國行版 / Cyberpunk 2077 限定版"
"W501CN" "OnePlus Watch 鈷合金限定版 (國行)"
"W301GB" "OnePlus Watch 國際版 / 鈷合金限定版 (國際) / 哈利波特限定版"
"OPWW234" "OnePlus Watch 2 (國行)"
"OPWWE234" "OnePlus Watch 2R"
"OPWWE231" "OnePlus Watch 2 (國際)"
"OPWW251" "OnePlus Watch 3 (國行)~"
"OPWWE251" "OnePlus Watch 3 (國際)"
"NP05J" "紅魔電競平板 3 Pro"
"ONE A0001" "一加手機 全網通版 / 移動版 / 國際版"
"ONE A1001" "一加手機 聯通版"
"ONE A2001" "一加手機 2"
"ONE A2003" "一加手機 2 國際版"
"ONE A2005" "一加手機 2 北美版"
"ONE E1000" "一加手機 X 全網通版"
"ONE E1001" "一加手機 X 移動版 / 聯通版"
"ONE E1003" "一加手機 X 國際版"
"ONE E1005" "一加手機 X 北美版"
"ONEPLUS A3000" "一加手機 3 國版"
"ONEPLUS A3003" "一加手機 3 國版"
"ONEPLUS A3010" "一加手機 3T 國版"
"ONEPLUS A3013" "一加手機 3T 國際版"
"ONEPLUS A5000" "一加 5"
"ONEPLUS A5010" "一加 5T"
"ONEPLUS A6000" "一加 6 國版"
"ONEPLUS A6003" "一加 6 國版"
"ONEPLUS A6010" "一加 6T 國版"
"ONEPLUS A6013" "一加 6T版"
"GM1900" "一加 7 國行版"
"GM1901" "一加 7 印度版"
"GM1903" "一加 7 歐洲版"
"GM1905" "一加 7 北美版 /版"
"GM1910" "一加 7 Pro 國行版"
"GM1911" "一加 7 Pro 印度版"
"GM1913" "一加 7 Pro 歐洲版"
"GM1915" "一加 7 Pro 北美版 / 國際版"
"GM1917" "一加 7 Pro T-Mobile 版"
"GM1920" "一加 7 Pro 5G 歐洲版"
"GM1925" "一加 7 Pro 5G Sprint 版"
"HD1900" "一加 7T 國行版"
"HD1901" "一加 7T 印度版"
"HD1903" "一加 7T 歐洲版"
"HD1905" "一加 7T 北美版 / 國際版"
"HD1907" "一加 7T T-Mobile 版"
"HD1910" "一加 7T Pro 國行版"
"HD1911" "一加 7T Pro 印度版"
"HD1913" "一加 7T Pro 歐洲版 / 國際版"
"HD1925" "一加 7T Pro 5G T-Mobile 版 / 一加 Concept One"
"IN2010" "一加 8 國行版"
"IN2011" "一加 8 印度版"
"IN2013" "一加 8 歐洲版"
"IN2015" "一加 8 北美版 / 國際版"
"IN2017" "一加 8 T-Mobile 版"
"IN2019" "一加 8 Visible 版 / Verizon 版"
"IN2020" "一加 8 Pro 國行版"
"IN2021" "一加 8 Pro 印度版"
"IN2023" "一加 8 Pro 歐洲版"
"IN2025" "一加 8 Pro 北美版 /版"
"KB2000" "一加 8T 國行版"
"KB2001" "一加 8T 印度版"
"KB2003" "一加 8T 歐洲版"
"KB2005" "一加 8T 北美版 / 國際版 / 一加 8T Concept"
"KB2007" "一加 8T+ T-Mobile 版"
"LE2100" "一加 9R 國行版"
"LE2101" "一加 9R 印度版"
"LE2110" "一加 9 國行版"
"LE2111" "一加 9 印度版"
"LE2113" "一加 9 歐洲版"
"LE2115" "一加 9 北美版 / 國際版"
"LE2117" "一加 9 T-Mobile 版"
"LE2119" "一加 9 Verzion 版"
"LE2120" "一加 9 Pro 國行版"
"LE2121" "一加 9 Pro 印度版"
"LE2123" "一加 9 Pro 歐洲版"
"LE2125" "一加 9 Pro 北美版 / 國際版"
"LE2127" "一加 9 Pro T-Mobile 版"
"MT2110" "一加 9RT 國行版"
"MT2111" "一加 9RT 印度版"
"NE2210" "一加 10 Pro 國行版"
"NE2211" "一加 10 Pro 印度版"
"NE2213" "一加 10 Pro 歐洲版 / 國際版"
"NE2215" "一加 10 Pro 北美版"
"NE2217" "一加 10 Pro T-Mobile 版"
"PGKM10" "一加 Ace 國行版"
"CPH2423" "一加 10R 印度版"
"CPH2411" "一加 10R 長壽版 印度版"
"PGZ110" "一加 Ace 競速版 國行版"
"PGP110" "一加 Ace Pro 國行版 / 原神限定版"
"CPH2413" "一加 10T 印度版"
"CPH2415" "一加 10T 歐洲版 / 國際版"
"CPH2417" "一加 10T 北美版"
"CPH2419" "一加 10T T-Mobile 版"
"PHB110" "一加 11 國行版"
"CPH2447" "一加 11 印度版"
"CPH2449" "一加 11 歐洲版 / 國際版 / 一加 11 Concept"
"CPH2451" "一加 11 北美版"
"PHK110" "一加 Ace 2 國行版 / 原神定制禮盒"
"CPH2487" "一加 11R 印度版"
"PHP110" "一加 Ace 2V 國行版"
"CPH2491" "一加 Nord 3 印度版"
"CPH2493" "一加 Nord 3 歐洲版"
"PJA110" "一加 Ace 2 Pro 國行版 / 原神派蒙主題禮盒"
"PJD110" "一加 12 國行版"
"CPH2573" "一加 12 印度版"
"CPH2581" "一加 12 歐洲版 / 國際版"
"CPH2583" "一加 12 北美版"
"PJE110" "一加 Ace 3 國行版 / 原神刻晴定制機"
"CPH2585" "一加 12R 印度版 / 原神刻晴定制機"
"CPH2609" "一加 12R 歐洲版 / 國際版 / 原神刻晴定制機"
"CPH2611" "一加 12R 北美版 / 原神刻晴定制機"
"PJF110" "一加 Ace 3V 國行版"
"PJX110" "一加 Ace 3 Pro 國行版"
"PJZ110" "一加 13 國行版"
"CPH2649" "一加 13 印度版"
"CPH2653" "一加 13 歐洲版 / 國際版"
"CPH2655" "一加 13 北美版"
"PKG110" "一加 Ace 5版"
"CPH2645" "一加 13R 歐洲版 / 國際版"
"CPH2647" "一加 13R 北美版"
"CPH2691" "一加 13R 印度版"
"PKR110" "一加 Ace 5 Pro 國行版"
"PKX110" "一加 13T 國版"
"CPH2723" "一加 13s 印度版"
"PLC110" "一加 Ace 5 至尊版 國行版"
"PLF110" "一加 Ace 5 競速版 國行版"
"AC2001" "一加 Nord 印度版"
"AC2003" "一加 Nord 歐洲版 / 國際版"
"DN2101" "一加 Nord 2 印度版"
"DN2103" "一加 Nord 2 歐洲版"
"CPH2399" "一加 Nord 2T 國際版"
"CPH2401" "一加 Nord 2T 印度版"
"CPH2661" "一加 Nord 4 印度版"
"CPH2663" "一加 Nord 4 歐洲版 / 國際版"
"CPH2707" "一加 Nord 5 印度版"
"CPH2709" "一加 Nord 5 國際版"
"EB2101" "一加 Nord CE 印度版"
"EB2103" "一加 Nord CE 歐洲版 / 國際版"
"IV2201" "一加 Nord CE 2 印度版"
"CPH2381" "一加 Nord CE 2 Lite 印度版"
"CPH2409" "一加 Nord CE 2 Lite 歐洲版 / 國際版"
"CPH2569" "一加 Nord CE 3 印度版"
"CPH2465" "一加 Nord CE 3 Lite 國際版"
"CPH2467" "一加 Nord CE 3 Lite 印度版"
"CPH2513" "一加 Nord N30 北美版"
"CPH2515" "一加 Nord N30 T-Mobile 版"
"CPH2613" "一加 Nord CE 4 印度版"
"CPH2619" "一加 Nord CE 4 Lite 印度版"
"CPH2621" "一加 Nord CE 4 Lite 歐洲版 / 國際版"
"CPH2717" "一加 Nord CE 5 印度版"
"CPH2719" "一加 Nord CE 5 國際版"
"BE2025" "一加 Nord N10 Metro 版"
"BE2026" "一加 Nord N10 北美版"
"BE2029" "一加 Nord N10 歐洲版 / 國際版"
"BE2028" "一加 Nord N10 T-Mobile 版"
"BE2011" "一加 Nord N100 北美版"
"BE2012" "一加 Nord N100 T-Mobile 版"
"BE2013" "一加 Nord N100 國際版"
"BE2015" "一加 Nord N100 Metro 版"
"GN2200" "一加 Nord N20"
"CPH2459" "一加 Nord N20"
"CPH2469" "一加 Nord N20 SE"
"CPH2605" "一加 Nord N30 SE 歐洲版"
"DE2117" "一加 Nord N200 北美版"
"DE2118" "一加 Nord N200 T-Mobile 版"
"CPH2389" "一加 Nord N300"
"CPH2551" "一加 Open"
"OPD2203" "一加平板 (2023) 國際版"
"OPD2304" "一加平板 Go LTE"
"OPD2305" "一加平板 Go Wi-Fi"
"OPD2407" "一加平板 (2024) 國行版"
"OPD2404" "一加平板 Pro 國行"
"OPD2403" "一加平板 2 國際版"
"OPD2413" "一加平板 2 Pro 國行版"
"OPD2415" "一加平板 3 國際版"
"W101IN" "一加 Band 印度版"
"OPBBE221" "一加 Nord Watch"
"W301CN" "一加手表 國行版 / Cyberpunk 2077 限定版"
"W501CN" "一加手表 鈷合金限定版 (國行)"
"W301GB" "一加手表 國際版 / 鈷合金限定版 (國際) / 哈利波特限定版"
"OPWW234" "一加手表 2 國行版"
"OPWWE234" "一加手表 2R 國際版"
"OPWWE231" "一加手表 2 國際版"
"OPWW251" "一加手表 3 國行版~"
"OPWWE251" "一加手表 3 國際版"
"E6683" "Xperia Z5 dual"
"E6883" "Xperia Z5 Premium"
"F8332" "Xperia XZ"
@@ -2606,6 +2668,7 @@
"RMX3852" "真我 GT Neo6"
"RMX3850" "真我 GT Neo6 SE"
"RMX5060" "真我 Neo7"
"RMX5062" "真我 Neo7 Turbo"
"RMX5080" "真我 Neo7 SE"
"RMX5071" "真我 Neo7x"
"RMX1971" "真我 Q"
@@ -2709,6 +2772,7 @@
"RMX3785" "realme 11x 5G"
"RMX3771" "realme 11 Pro 5G"
"RMX3741" "realme 11 Pro+ 5G"
"RMX3871" "realme 12 4G"
"RMX3999" "realme 12 5G"
"RMX3998" "realme 12x 5G"
"RMX3867" "realme 12+ 5G"
@@ -2718,10 +2782,15 @@
"RMX5000" "realme 13+ 5G"
"RMX3990" "realme 13 Pro 5G / realme 14 Pro Lite 5G"
"RMX3921" "realme 13 Pro+ 5G"
"RMX5070" "realme 14 5G"
"RMX3940" "realme 14x 5G"
"RMX5056" "realme 14 Pro 5G"
"RMX5051" "realme 14 Pro+ 5G"
"RMX5070" "realme 14 5G Global"
"RMX3940" "realme 14x 5G India"
"RMX3943" "realme 14x 5G Global"
"RMX5074" "realme 14T 5G Global"
"RMX5078" "realme 14T 5G India"
"RMX5056" "realme 14 Pro 5G India"
"RMX5057" "realme 14 Pro 5G Global"
"RMX5051" "realme 14 Pro+ 5G India"
"RMX5054" "realme 14 Pro+ 5G Global"
"RMX1921" "realme XT Global"
"RMX1922" "realme XT India"
"RMX1992" "realme X2 India"
@@ -2742,6 +2811,8 @@
"RMX3709" "realme GT 3 240W"
"RMX3851" "realme GT 6"
"RMX3853" "realme GT 6T"
"RMX5061" "realme GT 7"
"RMX5085" "realme GT 7T"
"RMX5011" "realme GT 7 Pro"
"RMX1946" "realme C2"
"RMX2022" "realme C3 Global"
@@ -2769,6 +2840,7 @@
"RMX3760" "realme C53 Global"
"RMX3762" "realme C53 India"
"RMX3710" "realme C55"
"RMX3834" "realme C60"
"RMX3930" "realme C61 Global"
"RMX3933" "realme C61 India"
"RMX3939" "realme C63"
@@ -2777,17 +2849,21 @@
"RMX3997" "realme C65 5G"
"RMX3890" "realme C67"
"RMX3782" "realme C67 5G"
"RMX5303" "realme C71"
"RMX3945" "realme C73 5G"
"RMX3941" "realme C75"
"RMX3834" "realme Note 50"
"RMX3963" "realme C75 5G Global"
"RMX5020" "realme C75x"
"RMX3938" "realme Note 60x"
"RMX1833" "realme U1"
"RMX3870" "realme P1 5G"
"RMX3844" "realme P1 Pro 5G"
"RMX5004" "realme P1 Speed 5G"
"RMX3987" "realme P2 Pro 5G"
"RMX5079" "realme P3 5G"
"RMX3944" "realme P3x 5G"
"RMX5032" "realme P3 Pro 5G"
"RMX5030" "realme P3 Ultra 5G"
"RMX5031" "realme P3 Ultra 5G"
"RMX2020" "realme Narzo 10A India"
"RMX2191" "realme Narzo 20 Global"
"RMX2161" "realme Narzo 20 Pro India"
@@ -2881,6 +2957,7 @@
"V2458A" "vivo X200s"
"V2454A" "vivo X200 Ultra"
"V2454DA" "vivo X200 Ultra 衛星通信版"
"V2436A" "vivo X Fold5"
"V1831A" "vivo S1 全網通版"
"V1831T" "vivo S1 移動全網通版"
"V1832A" "vivo S1 Pro 全網通版"
@@ -2915,6 +2992,8 @@
"V2362A" "vivo S19 Pro"
"V2429A" "vivo S20"
"V2430A" "vivo S20 Pro"
"V2464A" "vivo S30"
"V2465A" "vivo S30 Pro mini"
"V1901A" "vivo Y3 全網通版"
"V1901T" "vivo Y3 移動全網通版"
"V1930A" "vivo Y3 標準版 全網通版"
@@ -2946,6 +3025,7 @@
"V2357A" "vivo Y36c 5G / vivo Y37 5G"
"V2357EA" "vivo Y37m 5G"
"V2354A" "vivo Y37 Pro 5G"
"V2442A" "vivo Y37c"
"V1965A" "vivo Y50"
"V2023EA" "vivo Y50t"
"V2002A" "vivo Y51s 5G"
@@ -2956,7 +3036,7 @@
"V2045A" "vivo Y54s 5G"
"V2164A" "vivo Y55s 5G"
"V1731CA" "vivo Y71s"
"V2102A" "vivo Y70t 5G"
"V2102A" "vivo Y71t 5G"
"V2164PA" "vivo Y73t 5G"
"V2009A" "vivo Y74s 5G"
"V2069BA" "vivo Y75s 5G"
@@ -2981,11 +3061,11 @@
"V2343A" "vivo Y200 5G"
"V2361GA" "vivo Y200 GT 5G / vivo Y200 Pro 企業定制版"
"V2353DA" "vivo Y200t 5G"
"V2435A" "vivo Y300 5G"
"V2435A" "vivo Y300 5G / vivo Y300c 5G"
"V2410A" "vivo Y300 Pro 5G"
"V2456A" "vivo Y300 Pro+ 5G"
"V2444A" "vivo Y300i 5G"
"V2445EA" "vivo Y300t 5G"
"V2445EA" "vivo Y300t 5G / vivo Y300+ 5G"
"V2452GA" "vivo Y300 GT 5G"
"V2115A" "vivo T1"
"V2188A" "vivo T2x"
@@ -3052,6 +3132,7 @@
"V2403A" "iQOO Neo9S Pro+"
"V2425A" "iQOO Neo10"
"V2426A" "iQOO Neo10 Pro"
"V2463A" "iQOO Neo10 Pro+"
"V1986A" "iQOO Z1"
"V2012A" "iQOO Z1x"
"V2073A" "iQOO Z3"
@@ -3069,7 +3150,6 @@
"V2352GA" "iQOO Z9 Turbo 長續航版"
"V2417A" "iQOO Z9 Turbo+"
"V2353A" "iQOO Z9x"
"V2436A" "iQOO Z10"
"V2452A" "iQOO Z10 Turbo"
"V2453A" "iQOO Z10 Turbo Pro"
"V2445A" "iQOO Z10x"
@@ -3086,12 +3166,32 @@
"PA2353" "vivo Pad Air"
"PA2455" "vivo Pad3"
"PA2473" "vivo Pad3 Pro"
"PA2553" "vivo Pad5"
"PA2573" "vivo Pad5 Pro"
"PA2535" "vivo Pad5e"
"PA2511" "vivo Pad SE"
"iPA2375" "iQOO Pad"
"iPA2451" "iQOO Pad Air"
"iPA2453" "iQOO Pad2"
"iPA2475" "iQOO Pad2 Pro"
"iPA2556" "iQOO Pad5"
"iPA2575" "iQOO Pad5 Pro"
"iPA2537" "iQOO Pad5e"
"WA2052" "vivo WATCH 42mm"
"WA2056" "vivo WATCH 46mm"
"WA2156A" "vivo WATCH 2 eSIM 版"
"WA2356A" "vivo WATCH 3 eSIM 版 / ECG 版"
"WA2356C" "vivo WATCH 3 藍牙版"
"WA2456A" "vivo WATCH GT eSIM 版"
"WA2456C" "vivo WATCH GT 藍牙版"
"WA2556A" "vivo WATCH 5 藍牙版"
"WA2556B" "vivo WATCH 5 eSIM 版"
"iWA2356A" "iQOO WATCH eSIM 版"
"iWA2356C" "iQOO WATCH 藍牙版"
"iWA2456A" "iQOO WATCH GT eSIM 版"
"iWA2456C" "iQOO WATCH GT 藍牙版"
"iWA2556A" "iQOO WATCH 5 藍牙版"
"iWA2556B" "iQOO WATCH 5 eSIM 版"
"vivo 2005" "vivo X50"
"V2006" "vivo X50 Pro"
"V1930" "vivo X50e 5G"
@@ -3138,7 +3238,7 @@
"V2303" "vivo V29e 5G India"
"V2244" "vivo V29 Lite 5G"
"V2318" "vivo V30"
"V2319" "vivo Y30 Pro"
"V2319" "vivo V30 Pro"
"V2340" "vivo V30e"
"V2342" "vivo V30 Lite"
"V2314" "vivo V30 Lite 5G Global"
@@ -3173,6 +3273,7 @@
"V2426" "vivo T3 Ultra 5G"
"V2502" "vivo T4 5G"
"V2437" "vivo T4x 5G"
"V2509" "vivo T4 Lite 5G"
"vivo 2015_21" "vivo Y1s"
"V2044" "vivo Y3s"
"vivo 1902" "vivo Y5"
@@ -3206,6 +3307,7 @@
"V2423" "vivo Y19s"
"V2454" "Jovi Y19s"
"V2519" "vivo Y19s Pro"
"V2526" "vivo Y19s GT 5G"
"V2431" "vivo Y19e"
"V2027" "vivo Y20"
"V2037" "vivo Y20G"
@@ -3235,6 +3337,7 @@
"V2445" "Jovi Y29"
"V2420" "vivo Y29 5G"
"V2446" "vivo Y29s 5G"
"V2527" "vivo Y29t 5G"
"V2160" "vivo Y30 5G"
"V2036_21" "vivo Y31"
"V2057" "vivo Y33"
@@ -3287,7 +3390,8 @@
"I2214" "iQOO Neo7"
"I2217" "iQOO Neo7 Pro"
"I2304" "iQOO Neo9 Pro"
"I2221" "iQOO Neo10R"
"I2405" "iQOO Neo 10"
"I2221" "iQOO Neo 10R"
"I2011" "iQOO Z3 5G"
"I2018" "iQOO Z5"
"I2127" "iQOO Z6 5G"
@@ -3306,6 +3410,7 @@
"I2305" "iQOO Z9s Pro 5G"
"I2407" "iQOO Z10 5G"
"I2404" "iQOO Z10x 5G"
"I2409" "iQOO Z10 Lite 5G"
"PAFM00" "OPPO Find X 標準版 全網通版"
"PAFT00" "OPPO Find X 標準版 移動版"
"PAHM00" "OPPO Find X 超級閃充版/蘭博基尼版 全網通版"
@@ -3387,6 +3492,8 @@
"PJW110" "OPPO Reno12 Pro"
"PKM110" "OPPO Reno13"
"PKK110" "OPPO Reno13 Pro"
"PLA110" "OPPO Reno14"
"PKZ110" "OPPO Reno14 Pro"
"PCLM10" "OPPO Reno Ace"
"PDHM00" "OPPO Ace2"
"PACM00" "OPPO R15 全網通版"
@@ -3461,6 +3568,7 @@
"PJY110" "OPPO A3 Pro"
"PKQ110" "OPPO A5 5G (2025)"
"PKV110" "OPPO A5 活力版"
"PKW110" "OPPO A5x"
"PKP110" "OPPO A5 Pro"
"PBCM30" "OPPO K1"
"PCGM00" "OPPO K3 全網通版"
@@ -3481,6 +3589,7 @@
"PKS110" "OPPO K12 Plus"
"PJT110" "OPPO K12x"
"PLD110" "OPPO K12s"
"PLM110" "OPPO K13"
"OPD2101" "OPPO Pad"
"OPD2102" "OPPO Pad Air"
"OPD2201" "OPPO Pad 2"
@@ -3488,11 +3597,13 @@
"OPD2405" "OPPO Pad 3"
"OPD2401" "OPPO Pad 3 Pro"
"OPD2409" "OPPO Pad 4 Pro"
"OB19B1" "OPPO Band 標準版 / 名偵探柯南限定版"
"OB19B3" "OPPO Band NFC 版"
"OB19O0" "OPPO Band 時尚版"
"OPD2417" "OPPO Pad SE"
"OB19O1" "OPPO Band 運動版"
"OB19O3" "OPPO Band 運動版 (國際版)"
"OB19O7" "OPPO Band 活力版"
"OB19O0" "OPPO Band 時尚版 (NFC 版)"
"OB19O2" "OPPO Band EVA 限定版"
"OB19O8" "OPPO Band 名偵探柯南限定版"
"OBB211" "OPPO Band 2 標準版"
"OBB213" "OPPO Band 2 NFC 版"
"OR19R1" "OPPO Watch RX / 英雄聯盟限定版"
@@ -3510,8 +3621,9 @@
"OWW211" "OPPO Watch 3 Pro"
"OWW221" "OPPO Watch 4 Pro"
"OWW231" "OPPO Watch X"
"OWW251" "OPPO Watch X2"
"OWW235" "OPPO Watch Sport"
"OWW242" "OPPO Watch X2 Mini"
"OWW251" "OPPO Watch X2"
"CPH1875" "OPPO Find X"
"CPH2023" "OPPO Find X2"
"CPH2025" "OPPO Find X2 Pro"
@@ -3589,7 +3701,10 @@
"CPH2689" "OPPO Reno13 5G"
"CPH2697" "OPPO Reno13 Pro 5G"
"CPH2701" "OPPO Reno13 F"
"CPH2699" "OPPO Reno13 F 5G"
"CPH2699" "OPPO Reno13 F 5G / OPPO Reno13 A"
"CPH2737" "OPPO Reno14"
"CPH2739" "OPPO Reno14 Pro"
"CPH2743" "OPPO Reno14 F 5G"
"CPH1821" "OPPO F7"
"CPH1859" "OPPO F7 Youth"
"CPH1881" "OPPO F9"
@@ -3625,6 +3740,9 @@
"CPH1851" "OPPO AX5"
"CPH1920" "OPPO AX5s"
"CPH1943" "OPPO A5 2020"
"CPH2751" "OPPO A5 5G"
"A502OP" "OPPO A5 5G (SoftBank)"
"CPH2727" "OPPO A5 (2025) / OPPO A5m"
"CPH2773" "OPPO A5i"
"CPH2711" "OPPO A5 Pro"
"CPH2695" "OPPO A5 Pro 5G"
@@ -3684,12 +3802,16 @@
"CPH1955" "OPPO K3"
"CPH2373" "OPPO K10"
"CPH2667" "OPPO K12x 5G"
"CPH2729" "OPPO K13 5G"
"CPH2753" "OPPO K13x 5G"
"OPD2102A" "OPPO Pad Air"
"OPD2202" "OPPO Pad 2"
"OPD2302" "OPPO Pad Neo Wi-Fi"
"OPD2303" "OPPO Pad Neo LTE"
"OPD2406" "OPPO Pad 3"
"OPD2402" "OPPO Pad 3 Pro"
"OPD2419" "OPPO Pad SE Wi-Fi"
"OPD2420" "OPPO Pad SE LTE"
"OBBE215" "OPPO Band 2 Japan"
"OWWE201" "OPPO Watch Free"
"OW19W6" "OPPO Watch 41mm"

Binary file not shown.

BIN
tools/cmd Normal file

Binary file not shown.

View File

@@ -59,7 +59,7 @@ user="$user"
#此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表)
Backup_Mode="${Backup_Mode:-1}"
#執行生成應用列表.sh時輸出用於recovery救援的卡刷包
#執行start.sh時輸出用於recovery救援的卡刷包
#1輸出 0不輸出
recovery_flash="${recovery_flash:-0}"
@@ -76,9 +76,6 @@ backup_media="${backup_media:-0}"
#存在進程忽略備份(1忽略0備份)
Background_apps_ignore="${Background_apps_ignore:-0}"
#假設你遇到列表輸出異常問題請將此設為1
debug_list="${debug_list:-0}"
#添加自定義備份路徑 例Download DCIM等文件夾 請使用絕對路徑,請勿刪除\"\"
Custom_path=\""${Custom_path:-
/storage/emulated/0/Pictures/
@@ -202,35 +199,29 @@ if [[ ! -d $tools_path ]]; then
[[ ! -d $tools_path ]] && echo "$tools_path二進制目錄遺失" && EXIT="true"
fi
if [[ ! -f $conf_path ]]; then
case $operate in
backup_media|backup|Getlist|Restore|Restore2|check_file|convert|Restore3|dumpname)
if [[ $conf_path != *restore_settings.conf && $conf_path = *backup_settings.conf ]]; then
update_backup_settings_conf>"$conf_path"
echo "因腳本找不到\n$conf_path\n故重新生成默認列表\n請重新配置後重新執行腳本" && exit 0
else
if [[ $conf_path = *restore_settings.conf && $conf_path != *backup_settings.conf ]]; then
update_Restore_settings_conf>"$conf_path"
echo "因腳本找不到\n$conf_path\n故重新生成默認列表\n請重新配置後重新執行腳本" && exit 0
else
echo "$conf_path配置遺失" && exit 1
fi
fi ;;
esac
fi
[[ ! -f $conf_path ]] && echo "$conf_path遺失" && exit 2
. "$conf_path" &>/dev/null
case $operate in
backup_media|backup|Getlist|Restore|Restore2|check_file|convert|Restore3|dumpname)
if [[ $conf_path != *restore_settings.conf && $conf_path = *backup_settings.conf ]]; then
update_backup_settings_conf>"$conf_path"
echo "因腳本找不到\n$conf_path\n故重新生成默認列表\n請重新配置後重新執行腳本" && exit 0
else
if [[ $conf_path = *restore_settings.conf && $conf_path != *backup_settings.conf ]]; then
update_Restore_settings_conf>"$conf_path"
echo "因腳本找不到\n$conf_path\n故重新生成默認列表\n請重新配置後重新執行腳本" && exit 0
else
echo "$conf_path配置遺失" && exit 1
fi
fi ;;
esac
fi
fi
[[ ! -f $conf_path ]] && echo "$conf_path遺失" && exit 2
. "$conf_path" &>/dev/null
if [[ $conf_path != *restore_settings.conf && $conf_path = *backup_settings.conf ]]; then
update_backup_settings_conf>"$conf_path"
else
if [[ $conf_path = *restore_settings.conf && $conf_path != *backup_settings.conf ]]; then
update_Restore_settings_conf>"$conf_path"
else
echo "$conf_path配置遺失" && exit 1
fi
fi
LANG="${LANG:="$(getprop "persist.sys.locale")"}"
echoRgb() {
#轉換echo顏色提高可讀性
@@ -274,7 +265,6 @@ else
[[ $(ksud -V 2>/dev/null) = "" ]] && echo "Magisk busybox Path does not exist"
fi
export PATH="$PATH"
#tools_path="${tools_path/'/storage/emulated/'/'/data/media/'}"
filepath="/data/backup_tools"
busybox="$filepath/busybox"
busybox2="$tools_path/busybox"
@@ -344,14 +334,15 @@ while read -r file expected_hash; do
break
fi
done <<< "$(cat <<EOF
zstd 2388211eb3960070c6b4528f68f7129a9ef5d165a0fef0113ac59e723006f4ca
zstd ab32aecb389c3ba5c1f7ab05d5eb6a861bad80261fd14ef9a8f4c283ac48c22c
tar 3c605b1e9eb8283555225dcad4a3bf1777ae39c5f19a2c8b8943140fd7555814
classes.dex ee8f70babbf30162a1ddae86930cc69d443eda0ecea177e36a9e1ae4681a4811
classes.dex 3d9372ac4a922808974bed039ca152d5741215976bedb20653e6e65e4bdcb37f
bc b15d730591f6fb52af59284b87d939c5bea204f944405a3518224d8df788dc15
busybox 4d60ab3f5a59ebb2ca863f2f514e6924401b581e9b64f602665c008177626651
find 7fa812e58aafa29679cf8b50fc617ecf9fec2cfb2e06ea491e0a2d6bf79b903b
jq 4dd2d8a0661df0b22f1bb9a1f9830f06b6f3b8f7d91211a1ef5d7c4f06a8b4a5
keycheck 50645ee0e0d2a7d64fb4a1286446df7a4445f3d11aefd49eeeb88515b314c363
cmd 08da8ac23b6e99788fd3ce6c19c7b5a083b2ad48be35963a48d01d6ee7f3bb6d
zip d9015b3c5d3376a4f9f2d204afd2aeaa4a86fd0174da1be090e41622e73be0ec
EOF)"
if [[ $background_execution = 1 || $setDisplayPowerMode = 1 ]]; then
@@ -422,7 +413,7 @@ get_version() {
continue
;;
esac
sleep 0.5
sleep 0.3
break
done
}
@@ -512,23 +503,6 @@ else
DEVICE_NAME="處理器:null"
RAMINFO="RAM:null"
fi
security_patch="$(getprop ro.build.version.security_patch 2>/dev/null)"
if [[ $security_patch != "" ]]; then
patch_date="$(date -d "$security_patch" +%s 2>/dev/null)"
if [[ -n $patch_date ]]; then
current_sec="$(date +%s)"
patch_age="$(( (current_sec - patch_date) / 86400 ))"
if (( patch_age > 90 )); then
echo "[!] 安全补丁日期: $security_patch (已过期${patch_age}天)"
else
echo "[√] 安全补丁日期: $security_patch (${patch_age}天前)"
fi
else
echo "[!] 无法解析安全补丁日期: $security_patch"
fi
else
echo "[!] 无法获取安全补丁日期"
fi
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"
case $MODDIR in
@@ -594,70 +568,68 @@ add_entry() {
fi
REPLY="$app_name $package_name"
}
case $operate in
backup|Restore|Restore2|Getlist|backup_media)
if [[ $backup_mode = "" ]]; then
if [[ $user = "" ]]; then
user_id="$(ls /data/user | tr ' ' '\n')"
if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
echo "$user_id" | while read ; do
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
done
echoRgb "設備存在多用戶,選擇操作目標用戶"
if [[ $(echo "$user_id" | wc -l) = 2 ]]; then
user1="$(echo "$user_id" | sed -n '1p')"
user2="$(echo "$user_id" | sed -n '2p')"
case $Lo in
0|1)
echoRgb "音量上選擇用戶:$user1,音量下選擇用戶:$user2" "2"
Select_user="true"
get_version "$user1" "$user2" && user="$branch"
unset Select_user ;;
2)
Enter_options "輸入1選擇用戶:$user1 0用戶:$user2" "$user1" "$user2"
case $parameter in
0) user="$user2" ;;
1) user="$user1" ;;
esac ;;
esac
else
while true ;do
if [[ $option != "" ]]; then
user="$option"
break
else
echoRgb "請輸入需要操作目標分區" "1"
read option
fi
done
fi
else
user="0"
if [[ ! -f ${0%/*}/app_details.json ]]; then
if [[ $user = "" ]]; then
user_id="$(ls /data/user | tr ' ' '\n')"
if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
echo "$user_id" | while read ; do
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
done
echoRgb "設備存在多用戶,選擇操作目標用戶"
if [[ $(echo "$user_id" | wc -l) = 2 ]]; then
user1="$(echo "$user_id" | sed -n '1p')"
user2="$(echo "$user_id" | sed -n '2p')"
case $Lo in
0|1)
echoRgb "音量上選擇用戶:$user1,音量下選擇用戶:$user2" "2"
Select_user="true"
get_version "$user1" "$user2" && user="$branch"
unset Select_user ;;
2)
Enter_options "輸入1選擇用戶:$user1 0用戶:$user2" "$user1" "$user2"
case $parameter in
0) user="$user2" ;;
1) user="$user1" ;;
esac ;;
esac
else
while true ;do
if [[ $option != "" ]]; then
user="$option"
break
else
echoRgb "請輸入需要操作目標分區" "1"
read option
fi
done
fi
else
user_id="$(ls /data/user | tr ' ' '\n')"
if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
echo "$user_id" | while read ; do
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
done
else
echoRgb "主用戶:$user_id" "2"
fi
fi
user="0"
fi
else
case $Compression_method in
tar | TAR | Tar) user="$(echo "${0%}" | sed 's/.*\/Backup_tar_\([0-9]*\).*/\1/')" ;;
zstd | Zstd | ZSTD) user="$(echo "${0%}" | sed 's/.*\/Backup_zstd_\([0-9]*\).*/\1/')" ;;
esac
fi
[[ $user != 0 ]] && am start-user "$user"
path="/data/media/$user/Android"
path2="/data/user/$user"
path3="/data/user_de/$user"
[[ ! -d $path2 ]] && echoRgb "$user分區不存在請將上方提示的用戶id按照需求填入\n -$conf_path配置項user=,一次只能填寫一個" "0" && exit 2
echoRgb "當前操作為用戶$user"
export USER_ID="$user" ;;
esac
user_id="$(ls /data/user | tr ' ' '\n')"
if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
echo "$user_id" | while read ; do
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
done
else
echoRgb "主用戶:$user_id" "2"
fi
fi
else
case $(echo "${0%}") in
*zstd*) user="$(echo "${0%}" | sed 's/.*\/Backup_zstd_\([0-9]*\).*/\1/')" ;;
*tar*) user="$(echo "${0%}" | sed 's/.*\/Backup_tar_\([0-9]*\).*/\1/')" ;;
*) echoRgb "請勿修改備份資料夾名稱保持原本的Backup_壓縮算法名稱_使用者id" "0" && exit 2 ;;
esac
fi
[[ $user != 0 ]] && am start-user "$user"
path="/data/media/$user/Android"
path2="/data/user/$user"
path3="/data/user_de/$user"
[[ ! -d $path2 ]] && echoRgb "$user分區不存在請將上方提示的用戶id按照需求填入\n -$conf_path配置項user=,一次只能填寫一個" "0" && exit 2
echoRgb "當前操作為用戶$user"
export USER_ID="$user"
unset LD_LIBRARY_PATH
#因接收USER_ID環境變量問題故將函數放在此處
alias appinfo="app_process /system/bin com.xayah.dex.HiddenApiUtil getInstalledPackagesAsUser $USER_ID $@"
@@ -675,97 +647,50 @@ find_tools_path="$(find "$path_hierarchy"/* -maxdepth 1 -name "tools" -type d !
Rename_script () {
HT="${HT:=0}"
find "$path_hierarchy" -maxdepth 3 -name "*.sh" -type f -not -name "tools.sh" | sort | while read ; do
Script_type="$(grep -o 'operate="[^"]*"' "$REPLY" 2>/dev/null | awk -F'=' '{print $2}' | tr -d '"' | head -1)"
MODDIR_NAME="${REPLY%/*}"
FILE_NAME="${REPLY##*/}"
case $Script_type in
backup|Getlist|backup_media|Restore|dumpname|check_file|convert|Restore3|Restore2)
if [[ -f ${REPLY%/*}/app_details.json || -f ${REPLY%/*}/app_details ]]; then
if [[ $FILE_NAME = backup.sh ]]; then
touch_shell "$Script_type" "$REPLY" "backup_mode" "backup_mode=\"1\""
else
touch_shell "$Script_type" "$REPLY"
fi
if [[ -f ${REPLY%/*}/app_details.json || -f ${REPLY%/*}/app_details ]]; then
if [[ $FILE_NAME = backup.sh ]]; then
touch_shell "1" "$REPLY"
else
if [[ -d ${REPLY%/*}/tools ]]; then
touch_shell "$Script_type" "$REPLY"
if [[ $Script_target_language != $shell_language ]]; then
[[ $HT = 0 && $K = "" ]] && echoRgb "腳本語言為$shell_language....轉換為$Script_target_language中,請稍後等待轉換...."
ts <"$REPLY">temp && cp temp "$REPLY" && rm temp
echo_log "$(echo "$REPLY" | sed "s|^$path_hierarchy/||")翻譯"
mv "$REPLY" "$MODDIR_NAME/$(ts "$FILE_NAME")"
fi
fi
let HT++
fi ;;
kill_script)
if [[ $Script_target_language != $shell_language ]]; then
[[ $HT = 0 && $K = "" ]] && echoRgb "腳本語言為$shell_language....轉換為$Script_target_language中,請稍後等待轉換...."
ts <"$REPLY">temp && cp temp "$REPLY" && rm temp
echo_log "$(echo "$REPLY" | sed "s|^$path_hierarchy/||")翻譯"
mv "$REPLY" "$MODDIR_NAME/$(ts "$FILE_NAME")"
let HT++
fi ;;
esac
touch_shell "3" "$REPLY"
fi
else
[[ -d ${REPLY%/*}/tools ]] && touch_shell "0" "$REPLY"
let HT++
fi
done
unset HT
}
touch_shell () {
unset conf_path MODDIR_Path Update_backup
MODDIR_Path='${0%/*}'
MODDIR_NAME2="${2%/*}"
MODDIR_NAME2="${MODDIR_NAME2##*/}"
conf_path='${0%/*}/backup_settings.conf'
unset conf_path MODDIR_Path
case $1 in
Restore2)
0)
MODDIR_Path='${0%/*}'
MODDIR_Path1="$MODDIR_Path"
conf_path='${0%/*}/backup_settings.conf' ;;
1)
MODDIR_Path='${0%/*/*/*}'
MODDIR_Path1="$MODDIR_Path"
conf_path='${0%/*/*/*}/backup_settings.conf' ;;
2)
MODDIR_Path='${0%/*}'
MODDIR_Path1="$MODDIR_Path"
conf_path='${0%/*}/restore_settings.conf' ;;
3)
MODDIR_Path='${0%/*/*}'
MODDIR_Path1='${0%/*}'
conf_path='${0%/*/*}/restore_settings.conf' ;;
backup)
if [[ $3 = backup_mode ]]; then
MODDIR_Path='${0%/*/*/*}'
conf_path='${0%/*/*/*}/backup_settings.conf'
else
[[ $(basename "$2" | awk '{print length($0)}') -gt 15 ]] && Update_backup=1
fi ;;
Restore|convert|dumpname|Restore3|check_file) conf_path='${0%/*}/restore_settings.conf' ;;
esac
if [[ $4 != "" ]]; then
[[ $Output_path = "" ]] && echo "if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then
MODDIR=\"$MODDIR_Path\"
operate=\"$1\"
$4
conf_path=\"$conf_path\"
case \$(grep -o 'background_execution=.*' \"\$conf_path\" | awk -F '=' '{print \$2}') in
0)
. \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\" ;;
1)
{
. \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\"
} & ;;
esac
else
echo \"$MODDIR_Path/tools/tools.sh遺失\"
fi" >"$2"
else
echo "[ \"\$(echo \"\${0%/*}\" | grep -o 'bin.mt.plus/temp')\" != \"\" ] && echo \"你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒\" && exit 2
[[ $Output_path = "" ]] && echo "#!/system/bin/sh
if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then
MODDIR=\"\${0%/*}\"
operate=\"$1\"
MODDIR=\"$MODDIR_Path1\"
conf_path=\"$conf_path\"
Update_backup=\"$Update_backup\"
[ ! -f \"$conf_path\" ] && . \"\${0%/*}/tools/tools.sh\"
case \$(grep -o 'background_execution=.*' \"\$conf_path\" | awk -F '=' '{print \$2}') in
0)
. \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\" ;;
1)
{
. \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\"
} & ;;
esac
[ ! -f \"$conf_path\" ] && . \"$MODDIR_Path/tools/tools.sh\"
else
echo \"$MODDIR_Path/tools/tools.sh遺失\"
fi" >"$2"
fi
fi
. \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\""> "$2"
}
update_script() {
[[ $zipFile = "" ]] && zipFile="$(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f 2>/dev/null)"
@@ -986,7 +911,7 @@ backup_path() {
outshow="使用自定義目錄($Directory_type)"
else
Backup="$MODDIR/Backup_${Compression_method}_$user"
if [[ $backup_mode = "" ]]; then
if [[ ! -f ${0%/*}/app_details.json ]]; then
outshow="使用當前路徑作為備份目錄"
else
[[ -d $Backup ]] && outshow="使用上層路徑作為備份目錄" || echoRgb "$Backup目錄不存在" "0"
@@ -1482,10 +1407,11 @@ installapk() {
INSTALL "$TMPDIR/nmsl.apk"
echo_log "nmsl.apk安裝"
fi
find "$TMPDIR" -maxdepth 1 -name "*.apk" -type f 2>/dev/null | grep -v 'nmsl.apk' | while read; do
pm install-write "$b" "${REPLY##*/}" "$REPLY" &>/dev/null
echo_log "${REPLY##*/}安裝"
done
apks=($(find "$TMPDIR" -maxdepth 1 -name "*.apk" -type f | grep -v 'nmsl.apk'))
for apk in "${apks[@]}"; do
pm install-write "$b" "${apk##*/}" "$apk" &>/dev/null
echo_log "${apk##*/}安裝"
done
pm install-commit "$b" &>/dev/null
echo_log "split Apk安裝"
;;
@@ -1529,9 +1455,9 @@ disable_verify() {
}
get_name(){
txt="$MODDIR/appList.txt"
txt="${txt/'/storage/emulated/'/'/data/media/'}"
txt2="$MODDIR/mediaList.txt"
txt3="$MODDIR/temp.txt"
txt="${txt/'/storage/emulated/'/'/data/media/'}"
if [[ $1 = Apkname ]]; then
rm -rf "$txt" "$txt2"
echoRgb "列出全部資料夾內應用名與自定義目錄壓縮包名稱" "3"
@@ -1547,6 +1473,7 @@ get_name(){
fi
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
starttime1="$(date -u "+%s")"
i=1
find "$MODDIR" -maxdepth 2 -name "apk.*" -type f 2>/dev/null | sort | while read; do
Folder="${REPLY%/*}"
[[ $rgb_a -ge 229 ]] && rgb_a=118
@@ -1617,9 +1544,10 @@ get_name(){
case $1 in
Apkname)
[[ -f $Folder/${PackageName}.sh ]] && rm -rf "$Folder/${PackageName}.sh"
[[ ! -f $Folder/recover.sh ]] && touch_shell "Restore2" "$Folder/recover.sh"
[[ ! -f $Folder/backup.sh ]] && touch_shell "backup" "$Folder/backup.sh" "backup_mode" "backup_mode=\"1\""
echoRgb "$ChineseName $PackageName" && echo "$ChineseName $PackageName" >>"$txt" ;;
[[ ! -f $Folder/recover.sh ]] && touch_shell "3" "$Folder/recover.sh"
[[ ! -f $Folder/backup.sh ]] && touch_shell "1" "$Folder/backup.sh"
echoRgb "$i:$ChineseName $PackageName" && echo "$ChineseName $PackageName" >>"$txt"
let i++ ;;
convert)
if [[ ${Folder##*/} = $PackageName ]]; then
DIR_NAME="${Folder%/*}/$ChineseName"
@@ -1791,8 +1719,7 @@ Background_application_list() {
}
fi
}
case $operate in
backup)
backup() {
kill_Serve
self_test
case $MODDIR in
@@ -1927,13 +1854,12 @@ backup)
txt="$list_location"
else
txt="$MODDIR/$list_location"
echoRgb "$txt"
fi
else
txt="$MODDIR/appList.txt"
fi
#txt="${txt/'/storage/emulated/'/'/data/media/'}"
[[ ! -f $txt ]] && echoRgb "請執行\"生成應用列表.sh\"獲取應用列表再來備份" "0" && exit 1
txt="${txt/'/storage/emulated/'/'/data/media/'}"
[[ ! -f $txt ]] && echoRgb "請執行start.sh獲取應用列表再來備份" "0" && exit 1
TXT_NAME="${txt##*/}"
case ${TXT_NAME##*.} in
txt) ;;
@@ -1942,7 +1868,7 @@ backup)
sort -u "$txt" -o "$txt" &>/dev/null
data="$MODDIR"
hx="本地"
echoRgb "腳本受到內核機制影響 息屏後IO性能嚴重影響\n -請勿關閉終端或是息屏備份 如需終止腳本\n -請執行終止腳本.sh即可停止" "3"
echoRgb "腳本受到內核機制影響 息屏後IO性能嚴重影響\n -請勿關閉終端或是息屏備份 如需終止腳本\n -請執行start.sh選擇終止腳本即可停止" "3"
backup_path
echoRgb "配置詳細:\n -壓縮方式:$Compression_method\n -音量鍵確認:$Lo\n -更新:$update\n -備份模式:$Backup_Mode\n -備份外部數據:$Backup_obb_data\n -備份user數據:$Backup_user_data\n -自定義目錄備份:$backup_media\n -存在進程忽略備份:$Background_apps_ignore\n -關閉螢幕:$setDisplayPowerMode"
D="1"
@@ -1953,9 +1879,10 @@ backup)
Apk_info="$(appinfo "user|system" "pkgName" 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
fi
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
[[ $backup_mode = "" ]] && {
[[ ! -f ${0%/*}/app_details.json ]] && {
echoRgb "檢查備份列表中是否存在已經卸載應用" "3"
echoRgb "檢查備份列表中已經更新應用" "3"
i1=1
r1="$(cat "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
while read -r ; do
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then
app=($REPLY $REPLY)
@@ -1963,17 +1890,6 @@ backup)
if [[ $(echo "$Apk_info" | egrep -o "${app[1]}") != "" ]]; then
[[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market僅忽略數據'
Tmplist="$Tmplist\n$REPLY"
if [[ $Update_backup != "" ]]; then
Backup_folder="$Backup/${app[2]}"
app_details="$Backup_folder/app_details.json"
if [[ -d $Backup_folder ]]; then
apk_version="$(jq -r '.[] | select(.apk_version != null).apk_version' "$app_details")"
apk_version2="$(pm list packages --show-versioncode --user "$user" "${app[1]}" 2>/dev/null | cut -f3 -d ':' | head -n 1)"
[[ $apk_version != $apk_version2 ]] && {
[[ $Tmplist2 = "" ]] && Tmplist2="$REPLY" || Tmplist2="$Tmplist2\n$REPLY"
}
fi
fi
else
echoRgb "$REPLY不存在系統,從列表中刪除" "0"
fi
@@ -1983,7 +1899,22 @@ backup)
fi
done < "$txt"
}
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$txt"
apks=($(cat "$txt" | grep -Ev '^[#!]' | awk '{print $1 ":" $2}'))
[[ $Update_backup = true ]] && {
echoRgb "檢查備份列表中已經更新應用" "3"
for apk in "${apks[@]}"; do
Backup_folder="$Backup/$(echo "$apk" | cut -d':' -f1)"
app_details="$Backup_folder/app_details.json"
if [[ -d $Backup_folder ]]; then
apk_version="$(jq -r '.[] | select(.apk_version != null).apk_version' "$app_details")"
apk_version2="$(pm list packages --show-versioncode --user "$user" "$(echo "$apk" | cut -d':' -f2)" 2>/dev/null | cut -f3 -d ':' | head -n 1)"
[[ $apk_version != $apk_version2 ]] && {
[[ $Tmplist2 = "" ]] && Tmplist2="${apk/:/ }" || Tmplist2="$Tmplist2\n${apk/:/ }"
}
fi
done
}
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$txt"
if [[ $Tmplist2 != "" ]]; then
if [[ $Update_backup != "" ]]; then
cat "$txt">"${txt%/*}/txt2"
@@ -1993,23 +1924,19 @@ backup)
[[ $Update_backup != "" ]] && echoRgb "應用目前無更新" "0" && exit 0
fi
r="$(egrep -v '#|' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
[[ $backup_mode != "" ]] && r=1
[[ $r = "" && $backup_mode = "" ]] && echoRgb "$MODDIR_NAME/appList.txt是空的或是包名被注釋備份個鬼\n -檢查是否注釋亦或者執行$MODDIR_NAME/生成應用列表.sh" "0" && exit 1
[[ -f ${0%/*}/app_details.json ]] && r=1
[[ $r = "" && ! -f ${0%/*}/app_details.json ]] && echoRgb "$MODDIR_NAME/appList.txt是空的或是包名被注釋備份個鬼\n -檢查是否注釋亦或者執行$MODDIR_NAME/start.sh" "0" && exit 1
if [[ $Backup_Mode = true ]]; then
[[ $Backup_user_data = false ]] && echoRgb "當前$MODDIR_NAME/backup_settings.conf的\n -Backup_user_data=0將不備份user數據" "0"
[[ $Backup_obb_data = false ]] && echoRgb "當前$MODDIR_NAME/backup_settings.conf的\n -Backup_obb_data=0將不備份外部數據" "0"
fi
[[ $backup_media = false ]] && echoRgb "當前$MODDIR_NAME/backup_settings.conf的\n -backup_media=0將不備份自定義資料夾" "0"
txt2="$Backup/appList.txt"
txt2="${txt2/'/storage/emulated/'/'/data/media/'}"
[[ ! -f $txt2 ]] && echo "#不需要恢復還原的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market">"$txt2"
[[ ! -d $Backup/tools ]] && cp -r "$tools_path" "$Backup"
[[ ! -f $Backup/恢復備份.sh ]] && touch_shell "Restore" "$Backup/恢復備份.sh"
[[ ! -f $Backup/終止腳本.sh ]] && cp -r "$MODDIR/終止腳本.sh" "$Backup/終止腳本.sh"
[[ ! -f $Backup/重新生成應用列表.sh ]] && touch_shell "dumpname" "$Backup/重新生成應用列表.sh"
[[ ! -f $Backup/轉換資料夾名稱.sh ]] && touch_shell "convert" "$Backup/轉換資料夾名稱.sh"
[[ ! -f $Backup/壓縮檔完整性檢查.sh ]] && touch_shell "check_file" "$Backup/壓縮檔完整性檢查.sh"
[[ ! -f $Backup/start.sh ]] && touch_shell "2" "$Backup/start.sh"
[[ ! -d $Backup/modules ]] && mkdir -p "$Backup/modules" && echoRgb "$Backup/modules已創建成功\n -請按需要自行放置需要恢復時刷入的模塊在內將自動批量刷入" "1"
[[ -d $Backup/Media ]] && touch_shell "Restore3" "$Backup/恢復自定義資料夾.sh"
[[ ! -f $Backup/restore_settings.conf ]] && update_Restore_settings_conf>"$Backup/restore_settings.conf"
if [[ -d $Backup/tools ]]; then
find "$Backup/tools" -maxdepth 1 -type f | while read; do
@@ -2042,7 +1969,7 @@ backup)
while [[ $i -le $r ]]; do
[[ $en -ge 229 ]] && en=118
unset name1 name2 apk_path apk_path2
if [[ $backup_mode = "" ]]; 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}')"
name2="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
else
@@ -2101,7 +2028,7 @@ backup)
if [[ $result = 0 && $No_backupdata = "" ]]; then
if [[ $Backup_Mode = true ]]; then
if [[ $Backup_obb_data = true ]]; then
if [[ $name2 != *mt* ]]; then
if [[ $name2 != bin.mt.plus ]]; then
#備份data數據
Backup_data "data"
#備份obb數據
@@ -2111,7 +2038,7 @@ backup)
fi
fi
#備份user數據
[[ $name2 != *mt* ]] && {
[[ $name2 != bin.mt.plus ]] && {
[[ $Backup_user_data = true ]] && {
Backup_data "user"
Backup_data "user_de"
@@ -2123,8 +2050,8 @@ backup)
fi
fi
[[ -f $Backup_folder/${name2}.sh ]] && rm -rf "$Backup_folder/${name2}.sh"
[[ ! -f $Backup_folder/recover.sh ]] && touch_shell "Restore2" "$Backup_folder/recover.sh"
[[ ! -f $Backup_folder/backup.sh ]] && touch_shell "backup" "$Backup_folder/backup.sh" "backup_mode" "backup_mode=\"1\""
[[ ! -f $Backup_folder/recover.sh ]] && touch_shell "3" "$Backup_folder/recover.sh"
[[ ! -f $Backup_folder/backup.sh ]] && touch_shell "1" "$Backup_folder/backup.sh"
fi
endtime 2 "$name1 備份" "3"
lxj="$(echo "$Occupation_status" | awk '{print $3}' | sed 's/%//g')"
@@ -2158,9 +2085,9 @@ backup)
add_app2="${add_app2:="暫無更新"}"
echoRgb "\n -已更新的apk=\"$osn\"\n -已新增的備份=\"$osk\"\n -apk版本號無變化=\"$osj\"\n -下列為版本號已變更的應用\n$update_apk2\n -新增的備份....\n$add_app2\n -包含SSAID的應用\n$SSAID_apk2" "3"
notification "101" "app備份完成 $(endtime 1 "應用備份" "3")"
echo "$(sort "$txt2" | sed -e '/^$/d')" >"$txt2"
sort "$txt2" | sed '/^$/d' >"${txt2}.tmp" && mv "${txt2}.tmp" "$txt2"
[[ -e ${txt%/*}/txt2 ]] && cat "${txt%/*}/txt2">"$txt" && rm -rf "${txt%/*}/txt2"
if [[ $backup_media = true && $backup_mode = "" ]]; then
if [[ $backup_media = true && ! -f ${0%/*}/app_details.json ]]; then
A=1
B="$(echo "$Custom_path" | egrep -v '#|' | awk 'NF != 0 { count++ } END { print count }')"
if [[ $B != "" ]]; then
@@ -2168,7 +2095,7 @@ backup)
notification "102" "Media備份開始"
starttime1="$(date -u "+%s")"
Backup_folder="$Backup/Media"
[[ ! -f $Backup/恢復自定義資料夾.sh ]] && touch_shell "Restore3" "$Backup/恢復自定義資料夾.sh"
[[ ! -f $Backup/start.sh ]] && touch_shell "2" "$Backup/start.sh"
[[ ! -d $Backup_folder ]] && mkdir -p "$Backup_folder"
app_details="$Backup_folder/app_details.json"
[[ ! -f $app_details ]] && echo "{\n}">"$app_details"
@@ -2215,32 +2142,38 @@ backup)
starttime1="$TIME"
endtime 1 "批量備份開始到結束"
notification "105" "備份完成 $(endtime 1 "批量備份開始到結束")"
chown "$(stat -c '%u:%g' '/data/media/0/Download')" "$txt"
chown "$(stat -c '%u:%g' '/data/media/0/Download')" "$txt2"
} &
wait && exit
;;
dumpname)
}
backup_update_apk() {
Update_backup='true'
backup
}
dumpname() {
get_name "Apkname"
;;
convert)
}
convert() {
get_name "convert"
;;
check_file)
}
check_file() {
Check_archive "$MODDIR"
;;
Restore|Restore2)
}
Restore() {
kill_Serve
self_test
disable_verify
[[ ! -d $path2 ]] && echoRgb "設備不存在user目錄" "0" && exit 1
if [[ $operate = Restore ]]; then
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊$MODDIR_NAME/終止腳本.sh\n -否則腳本將繼續執行直到結束" "0"
echoRgb "如果大量提示找不到資料夾請執行$MODDIR_NAME/轉換資料夾名稱.sh"
if [[ ! -f ${0%/*}/app_details.json ]]; then
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊$MODDIR_NAME/start.sh選擇終止腳本\n -否則腳本將繼續執行直到結束" "0"
echoRgb "如果大量提示找不到資料夾請執行$MODDIR_NAME/start.sh選擇轉換資料夾名稱"
txt="$MODDIR/appList.txt"
[[ ! -f $txt ]] && echoRgb "請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 2
[[ ! -f $txt ]] && echoRgb "請執行start.sh獲取應用列表再來恢復" "0" && exit 2
sort -u "$txt" -o "$txt" 2>/dev/null
i=1
r="$(egrep -v '#|' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
[[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 1
[[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了\n -請執行start.sh獲取應用列表再來恢復" "0" && exit 1
Backup_folder2="$MODDIR/Media"
Backup_folder3="$MODDIR/modules"
#校驗選填是否正確
@@ -2396,7 +2329,7 @@ Restore|Restore2)
{
while [[ $i -le $r ]]; do
[[ $en -ge 229 ]] && en=118
if [[ $operate = Restore ]]; then
if [[ ! -f ${0%/*}/app_details.json ]]; then
echoRgb "恢復第$i/$r個應用 剩下$((r - i))" "3"
notification "105" "恢復第$i/$r個應用 剩下$((r - i))
恢復 $name1"
@@ -2489,7 +2422,7 @@ Restore|Restore2)
notification "107" "SSAID恢復後必須重新開機套用,否則應用閃退,如果沒有應用恢復ssaid則無須重啟"
}
notification "105" "app恢復完成 $(endtime 1 "應用恢復" "2")"
[[ $operate != Restore2 ]] && {
[[ ! -f ${0%/*}/app_details.json ]] && {
if [[ $media_recovery = true ]]; then
starttime1="$(date -u "+%s")"
app_details="$Backup_folder2/app_details.json"
@@ -2497,7 +2430,7 @@ Restore|Restore2)
sort -u "$txt" -o "$txt" 2>/dev/null
A=1
B="$(egrep -v '#|' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && B=0
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行start.sh獲取列表再來恢復" "0" && B=0
notification "106" "Media恢復開始"
while [[ $A -le $B ]]; do
name1="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')"
@@ -2536,14 +2469,14 @@ Restore|Restore2)
rm -rf "$TMPDIR"/*
} &
wait && exit
;;
Restore3)
}
Restore3() {
kill_Serve
self_test
case $Lo in
0|1)
echoRgb "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -音量上繼續恢復自定義資料夾,音量下離開腳本" "2"
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0"
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊start.sh選擇終止腳本,否則腳本將繼續執行直到結束" "0"
get_version "恢復自定義資料夾" "離開腳本" && [[ $branch = false ]] && exit 0 ;;
2)
Enter_options "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -輸入1繼續恢復自定義資料夾輸入0離開腳本" "恢復" "退出腳本" && isBoolean "$parameter" "branch" && branch="$nsx" && [[ $branch = false ]] && exit 0 ;;
@@ -2553,7 +2486,7 @@ Restore3)
Backup_folder2="$mediaDir"
[[ ! -d $mediaDir ]] && echoRgb "媒體資料夾不存在" "0" && exit 2
txt="$MODDIR/mediaList.txt"
[[ ! -f $txt ]] && echoRgb "請執行\"重新生成應用列表.sh\"獲取媒體列表再來恢復" "0" && exit 2
[[ ! -f $txt ]] && echoRgb "請執行start.sh獲取媒體列表再來恢復" "0" && exit 2
sort -u "$txt" -o "$txt" 2>/dev/null
#記錄開始時間
starttime1="$(date -u "+%s")"
@@ -2568,7 +2501,7 @@ Restore3)
A=1
B="$(egrep -v '#|' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
Set_screen_pause_seconds on
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && exit 1
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行start.sh獲取列表再來恢復" "0" && exit 1
echo "$script">"$TMPDIR/scriptTMP"
notification "108" "Media恢復開始"
{
@@ -2584,13 +2517,12 @@ Restore3)
notification "108" "Media恢復完成 $(endtime 1 "Media恢復")"
rm -rf "$TMPDIR/scriptTMP"
} &
;;
Getlist)
}
Getlist() {
case $MODDIR in
/storage/emulated/0/Android/* | /data/media/0/Android/* | /sdcard/Android/*) echoRgb "請勿在$MODDIR內生成列表" "0" && exit 2 ;;
esac
#校驗選填是否正確
isBoolean "$debug_list" "debug_list" && debug_list="$nsx"
case $Lo in
0)
[[ $blacklist_mode != "" ]] && isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx" || {
@@ -2625,10 +2557,9 @@ Getlist)
} ;;
*) echoRgb "$conf_path Lo=$Lo填寫錯誤正確值0 1 2" "0" && exit 2 ;;
esac
txtpath="$MODDIR"
[[ $debug_list = true ]] && txtpath="${txtpath/'/storage/emulated/'/'/data/media/'}"
nametxt="$txtpath/appList.txt"
[[ ! -f $nametxt ]] && echo '#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market僅忽略數據' >"$nametxt"
txt="$MODDIR/appList.txt"
txt="${txt/'/storage/emulated/'/'/data/media/'}"
[[ ! -f $txt ]] && echo '#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market僅忽略數據' >"$txt"
echoRgb "請勿關閉腳本,等待提示結束"
rgb_a=118
starttime1="$(date -u "+%s")"
@@ -2650,12 +2581,12 @@ Getlist)
Q="0"
rb="0"
Output_list() {
if [[ $(cat "$nametxt" | cut -f2 -d ' ' | egrep -w "^${app_1[1]}$") != ${app_1[1]} ]]; then
[[ $REPLY2 = "" ]] && add_entry "${app_1[2]}" "${app_1[1]}" "$(cat "$nametxt" | grep -w "${app_1[2]}")" || add_entry "${app_1[2]}" "${app_1[1]}" "$REPLY2"
if [[ $(cat "$txt" | cut -f2 -d ' ' | egrep -w "^${app_1[1]}$") != ${app_1[1]} ]]; then
[[ $REPLY2 = "" ]] && add_entry "${app_1[2]}" "${app_1[1]}" "$(cat "$txt" | grep -w "${app_1[2]}")" || add_entry "${app_1[2]}" "${app_1[1]}" "$REPLY2"
case ${app_1[1]} in
*oneplus*|*miui*|*xiaomi*|*oppo*|*flyme*|*meizu*|com.android.soundrecorder|com.mfashiongallery.emag|com.mi.health|*coloros*|com.android.soundrecorder|com.duokan.phone.remotecontroller|com.android.calendar|com.android.deskclock|com.android.calendar|com.android.deskclock|com.google.android.safetycore|com.google.android.contactkeys)
*oneplus*|*miui*|*xiaomi*|*oppo*|*flyme*|*meizu*|com.android.soundrecorder|com.mfashiongallery.emag|com.mi.health|*coloros*|com.android.soundrecorder|com.duokan.phone.remotecontroller|com.android.calendar|com.android.deskclock|com.android.calendar|com.android.deskclock|com.google.android.safetycore|com.google.android.contactkeys|com.google.android.apps.messaging|com.google.android.calendar)
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
echoRgb "$app_name為Xposed模塊 進行添加" "0"
echoRgb "$((i+1)):$app_name為Xposed模塊 進行添加" "0"
if [[ $REPLY2 = "" ]]; then
REPLY2="$REPLY" && [[ $tmp = "" ]] && tmp="1"
else
@@ -2669,7 +2600,7 @@ Getlist)
else
REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1"
fi
echoRgb "$app_name ${app_1[1]}($rgb_a)"
echoRgb "$((i+1)):$app_name ${app_1[1]}($rgb_a)"
let i++
else
echoRgb "$app_name 預裝應用 忽略輸出" "0"
@@ -2689,10 +2620,10 @@ Getlist)
REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1"
fi
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
echoRgb "Xposed: $app_name ${app_1[1]}($rgb_a)"
echoRgb "$((i+1)):Xposed: $app_name ${app_1[1]}($rgb_a)"
let rd++
else
echoRgb "$app_name ${app_1[1]}($rgb_a)"
echoRgb "$((i+1)):$app_name ${app_1[1]}($rgb_a)"
fi
let i++
;;
@@ -2721,9 +2652,9 @@ Getlist)
Output_list
fi
if [[ $LR = $Apk_Quantity ]]; then
echo "$REPLY2">>"$nametxt"
if [[ $(cat "$nametxt" | wc -l | awk '{print $1-2}') -lt $i ]]; then
rm -rf "$nametxt"
echo "$REPLY2">>"$txt"
if [[ $(cat "$txt" | wc -l | awk '{print $1-2}') -lt $i ]]; then
rm -rf "$txt"
echoRgb "\n -輸出異常 請將$conf_path中的debug_list=\"0\"改為1或是重新執行本腳本" "0"
exit
fi
@@ -2732,7 +2663,7 @@ Getlist)
fi
let rgb_a++ LR++
done
if [[ -f $nametxt ]]; then
if [[ -f $txt ]]; then
rm -rf "$TMPDIR"/*
while read -r ; do
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then
@@ -2754,18 +2685,13 @@ Getlist)
else
Tmplist="$Tmplist\n$REPLY"
fi
done < "$nametxt"
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$nametxt"
done < "$txt"
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$txt"
if [[ $recovery_flash = true ]]; then
if [[ -f $tools_path/update-binary && -f $TMPDIR/appList.txt ]]; then
echoRgb "輸出用於recovery的備份卡刷包" ; rm -rf "$MODDIR/recovery卡刷備份.zip"
touch_shell "Restore" "$TMPDIR/恢復備份.sh"
cp -r "$MODDIR/終止腳本.sh" "$TMPDIR/終止腳本.sh"
touch_shell "dumpname" "$TMPDIR/重新生成應用列表.sh"
touch_shell "convert" "$TMPDIR/轉換資料夾名稱.sh"
touch_shell "check_file" "$TMPDIR/壓縮檔完整性檢查.sh"
touch_shell "Restore2" "$TMPDIR/recover.sh"
touch_shell "Restore3" "$TMPDIR/恢復自定義資料夾.sh"
touch_shell "2" "$TMPDIR/start.sh"
touch_shell "3" "$TMPDIR/recover.sh"
update_Restore_settings_conf>"$TMPDIR/restore_settings.conf"
mkdir -p "$TMPDIR/META-INF/com/google/android" && cp "$tools_path/update-binary" "$TMPDIR/META-INF/com/google/android"
tar -cpf - -C "${tools_path%/*}" "${tools_path##*/}" | tar --delete "tools/zip" | tar --recursive-unlink -xmpf - -C "$TMPDIR/"
@@ -2778,24 +2704,22 @@ Getlist)
fi
fi
wait
chown "$(stat -c '%u:%g' '/data/media/0/Download')" "$txt"
endtime 1
echoRgb "輸出包名結束 請查看$nametxt"
;;
backup_media)
echoRgb "輸出包名結束 請查看$txt"
}
backup_media() {
kill_Serve
self_test
backup_path
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0"
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊start.sh選擇終止腳本,否則腳本將繼續執行直到結束" "0"
A=1
B="$(echo "$Custom_path" | egrep -v '#|' | awk 'NF != 0 { count++ } END { print count }')"
if [[ $B != "" ]]; then
starttime1="$(date -u "+%s")"
Backup_folder="$Backup/Media"
[[ ! -d $Backup_folder ]] && mkdir -p "$Backup_folder"
[[ ! -f $Backup/恢復自定義資料夾.sh ]] && touch_shell "Restore3" "$Backup/恢復自定義資料夾.sh"
[[ ! -f $Backup/重新生成應用列表.sh ]] && touch_shell "dumpname" "$Backup/重新生成應用列表.sh"
[[ ! -f $Backup/轉換資料夾名稱.sh ]] && touch_shell "convert" "$Backup/轉換資料夾名稱.sh"
[[ ! -f $Backup/壓縮檔完整性檢查.sh ]] && touch_shell "check_file" "$Backup/壓縮檔完整性檢查.sh"
[[ ! -f $Backup/start.sh ]] && touch_shell "2" "$Backup/start.sh"
[[ ! -d $Backup/tools ]] && cp -r "$tools_path" "$Backup"
[[ ! -f $Backup/restore_settings.conf ]] && update_Restore_settings_conf>"$Backup/restore_settings.conf"
app_details="$Backup_folder/app_details.json"
@@ -2831,8 +2755,8 @@ backup_media)
else
echoRgb "自定義路徑為空 無法備份" "0"
fi
;;
Device_List)
}
Device_List() {
URL="https://raw.githubusercontent.com/KHwang9883/MobileModels/refs/heads/master/brands"
rm -rf "$tools_path/Device_List"
for i in $(echo "xiaomi\nxiaomi_en\nsamsung\nsamsung_global\nasus\nBlack_Shark\nBlack_Shark_en\ngoogle\nLenovo\nMEIZU\nMEIZU_en\nMotorola\nNokia\nnothing\nnubia\nOnePlus\nOnePlus_en\nSony\nrealme\nrealme_en\nvivo\nvivo_en\noppo\noppo_en"); do
@@ -2886,5 +2810,81 @@ Device_List)
fi
else
echoRgb "下載機型失敗"
fi ;;
esac
fi
}
if [[ $0 = *backup.sh ]]; then
start=backup
else
[[ $0 = *recover.sh ]] && start=Restore
fi
if [[ $start != "" ]]; then
case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in
0)
eval "$start" ;;
1)
{
eval "$start"
} & ;;
esac
else
if [[ -f $MODDIR/backup_settings.conf ]]; then
echoRgb "音量鍵上下選擇對應功能,上鍵選擇下鍵跳過"
steps=(
"生成應用列表"
"備份應用"
"備份已更新應用"
"備份自定義資料夾"
"殺死運行中腳本"
)
commands=(
"Getlist"
"backup"
"backup_update_apk"
"backup_media"
"echoRgb "等待腳本停止中,請稍後....." ; kill_Serve && 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
# 開始循環提示
for i in "${!steps[@]}"; do
while true; do
echoRgb "是否執行:${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
fi

Binary file not shown.

View File

@@ -1,18 +0,0 @@
[ "$(echo "${0%/*}" | grep -o 'bin.mt.plus/temp')" != "" ] && echo "你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒" && exit 2
if [ -f "${0%/*}/tools/tools.sh" ]; then
MODDIR="${0%/*}"
operate="backup"
conf_path="${0%/*}/backup_settings.conf"
Update_backup="1"
[ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh"
case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in
0)
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" ;;
1)
{
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt"
} & ;;
esac
else
echo "${0%/*}/tools/tools.sh遺失"
fi

View File

@@ -1,18 +0,0 @@
[ "$(echo "${0%/*}" | grep -o 'bin.mt.plus/temp')" != "" ] && echo "你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒" && exit 2
if [ -f "${0%/*}/tools/tools.sh" ]; then
MODDIR="${0%/*}"
operate="backup"
conf_path="${0%/*}/backup_settings.conf"
Update_backup=""
[ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh"
case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in
0)
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" ;;
1)
{
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt"
} & ;;
esac
else
echo "${0%/*}/tools/tools.sh遺失"
fi

View File

@@ -1,18 +0,0 @@
[ "$(echo "${0%/*}" | grep -o 'bin.mt.plus/temp')" != "" ] && echo "你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒" && exit 2
if [ -f "${0%/*}/tools/tools.sh" ]; then
MODDIR="${0%/*}"
operate="backup_media"
conf_path="${0%/*}/backup_settings.conf"
Update_backup=""
[ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh"
case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in
0)
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" ;;
1)
{
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt"
} & ;;
esac
else
echo "${0%/*}/tools/tools.sh遺失"
fi

View File

@@ -1,18 +0,0 @@
[ "$(echo "${0%/*}" | grep -o 'bin.mt.plus/temp')" != "" ] && echo "你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒" && exit 2
if [ -f "${0%/*}/tools/tools.sh" ]; then
MODDIR="${0%/*}"
operate="Getlist"
conf_path="${0%/*}/backup_settings.conf"
Update_backup=""
[ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh"
case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in
0)
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" ;;
1)
{
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt"
} & ;;
esac
else
echo "${0%/*}/tools/tools.sh遺失"
fi

View File

@@ -1,12 +0,0 @@
if [ -f "${0%/*}/tools/tools.sh" ]; then
MODDIR="${0%/*}"
operate="kill_script"
conf_path="${0%/*}/backup_settings.conf"
. "$MODDIR/tools/tools.sh"
echoRgb "等待腳本停止中,請稍後....."
kill_Serve && echoRgb "腳本終止"
exit
else
[[ $(echo "${0%/*}" | grep -o 'bin.mt.plus/temp') != "" ]] && echo "你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒" && exit 2
echo "${0%/*}/tools/tools.sh遺失"
fi