diff --git a/backup_settings.conf b/backup_settings.conf index 06e5f43..00eb0e7 100644 --- a/backup_settings.conf +++ b/backup_settings.conf @@ -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/ diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..db9e0a9 --- /dev/null +++ b/start.sh @@ -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" diff --git a/tools/Device_List b/tools/Device_List index b50e4b5..b677fad 100644 --- a/tools/Device_List +++ b/tools/Device_List @@ -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" diff --git a/tools/classes.dex b/tools/classes.dex index 88385d8..b8e6397 100644 Binary files a/tools/classes.dex and b/tools/classes.dex differ diff --git a/tools/cmd b/tools/cmd new file mode 100644 index 0000000..fa6808d Binary files /dev/null and b/tools/cmd differ diff --git a/tools/tools.sh b/tools/tools.sh index 2170123..289ea7f 100644 --- a/tools/tools.sh +++ b/tools/tools.sh @@ -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 </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%/*/*}' - 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' ;; + MODDIR_Path1='${0%/*}' + 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 \ No newline at end of file diff --git a/tools/zstd b/tools/zstd index e3086d8..50d9de3 100644 Binary files a/tools/zstd and b/tools/zstd differ diff --git a/備份列表內已更新應用.sh b/備份列表內已更新應用.sh deleted file mode 100644 index 1a0a8e3..0000000 --- a/備份列表內已更新應用.sh +++ /dev/null @@ -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 diff --git a/備份應用.sh b/備份應用.sh deleted file mode 100644 index 6621d89..0000000 --- a/備份應用.sh +++ /dev/null @@ -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 diff --git a/備份自定義資料夾.sh b/備份自定義資料夾.sh deleted file mode 100644 index 419d669..0000000 --- a/備份自定義資料夾.sh +++ /dev/null @@ -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 diff --git a/生成應用列表.sh b/生成應用列表.sh deleted file mode 100644 index 036c959..0000000 --- a/生成應用列表.sh +++ /dev/null @@ -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 diff --git a/終止腳本.sh b/終止腳本.sh deleted file mode 100644 index e2348d2..0000000 --- a/終止腳本.sh +++ /dev/null @@ -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