This commit is contained in:
Yawasau
2024-09-08 12:42:18 +08:00
parent 99fc18755c
commit b524867f7c
4 changed files with 458 additions and 237 deletions

View File

@@ -1,9 +1,12 @@
#音量鍵選擇總開關 是否在每次執行備份腳本時使用音量鍵詢問備份需求
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇) #0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
#2使用鍵盤輸入適用於無音量鍵可用設備選擇 (如選項未設置,則強制使用鍵盤輸入)
Lo=0 Lo=0
#後台執行腳本(設置0不能關閉當前終端有壓縮速率設置1可完全關閉MT使用有狀態欄通知 沒有壓縮速率顯示設置2也可離開腳本備份完成後狀態欄通知 無壓縮速率顯示) #後台執行腳本
0不能關閉當前終端有壓縮速率
1開啟通知有進度條無壓縮速率顯示
2開啟通知無進度條備份完成後通知無壓縮速率顯示
background_execution=0 background_execution=0
#腳本語言設置 留空則自動識別系統語言環境並翻譯 #腳本語言設置 留空則自動識別系統語言環境並翻譯
@@ -16,7 +19,7 @@ Output_path=""
#自定義applist.txt位置 支持相對路徑(留空則默認當前路徑) #自定義applist.txt位置 支持相對路徑(留空則默認當前路徑)
list_location="" list_location=""
#自動更新腳本(留空強制音量鍵選擇) #自動更新腳本(留空強制選擇)
#1開啟 0關閉 #1開啟 0關閉
update=1 update=1
@@ -24,8 +27,8 @@ update=1
#屏蔽後不會提示音量鍵選擇不影響Output_path指定外置存儲位置 #屏蔽後不會提示音量鍵選擇不影響Output_path指定外置存儲位置
mount_point="rannki|0000-1" mount_point="rannki|0000-1"
#使用者(如0 999等用戶如存在多個用戶留空強制音量鍵選擇無多個用戶則默認用戶0不詢問) #使用者(如0 999等用戶如存在多個用戶留空強制選擇無多個用戶則默認用戶0不詢問)
user= user=0
#備份模式 #備份模式
#1包含數據+安裝包0僅包安裝包 #1包含數據+安裝包0僅包安裝包
@@ -33,10 +36,10 @@ user=
#此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表) #此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表)
Backup_Mode=1 Backup_Mode=1
#是否備份使用者數據 (1備份 0不備份 留空強制音量鍵選擇) #是否備份使用者數據 (1備份 0不備份 留空強制選擇)
Backup_user_data=1 Backup_user_data=1
#是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制音量鍵選擇) #是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制選擇)
Backup_obb_data=1 Backup_obb_data=1
#是否在應用數據備份完成後備份自定義目錄 #是否在應用數據備份完成後備份自定義目錄
@@ -44,7 +47,7 @@ Backup_obb_data=1
backup_media=0 backup_media=0
#存在進程忽略備份(1忽略0備份) #存在進程忽略備份(1忽略0備份)
Background_apps_ignore= Background_apps_ignore=1
#假設你遇到列表輸出異常問題請將此設為1 #假設你遇到列表輸出異常問題請將此設為1
debug_list=0 debug_list=0
@@ -53,16 +56,16 @@ debug_list=0
Custom_path=" Custom_path="
/storage/emulated/0/Pictures/ /storage/emulated/0/Pictures/
/storage/emulated/0/Download/ /storage/emulated/0/Download/
/storage/emulated/0/Music
/storage/emulated/0/DCIM/ /storage/emulated/0/DCIM/
/data/adb /data/adb
" "
#黑名單模式(1完全忽略不備份 0僅備份安裝包注意此選項Backup_Mode=1時黑名單模式才能使用) #黑名單模式(1完全忽略不備份 0僅備份安裝包注意此選項Backup_Mode=1時黑名單模式才能使用)
blacklist_mode=0 blacklist_mode=1
#備份黑名單(備份策略由「黑名單模式」控制,此處只作為黑名單應用列表) #備份黑名單(備份策略由「黑名單模式」控制,此處只作為黑名單應用列表)
blacklist=" blacklist="
com.google.android.apps.messaging
#com.esunbank #com.esunbank
#com.chailease.tw.app.android.ccfappcust" #com.chailease.tw.app.android.ccfappcust"

View File

@@ -162,11 +162,13 @@
"M1810E5E" "小米 MIX 3 國行版" "M1810E5E" "小米 MIX 3 國行版"
"M1810E5A" "小米 MIX 3 (全球頻段)" "M1810E5A" "小米 MIX 3 (全球頻段)"
"M1810E5GG" "小米 MIX 3 5G" "M1810E5GG" "小米 MIX 3 5G"
"M2011J18C" "MIX FOLD 小米折叠屏手機"
"2106118C" "Xiaomi MIX 4" "2106118C" "Xiaomi MIX 4"
"M2011J18C" "MIX FOLD 小米折疊屏手機"
"22061218C" "Xiaomi MIX Fold 2" "22061218C" "Xiaomi MIX Fold 2"
"2308CPXD0C" "Xiaomi MIX Fold 3" "2308CPXD0C" "Xiaomi MIX Fold 3"
"24072PX77C" "Xiaomi MIX Fold 4" "24072PX77C" "Xiaomi MIX Fold 4"
"2405CPX3DC" "Xiaomi MIX Flip 國行版"
"2405CPX3DG" "Xiaomi MIX Flip 國際版"
"2016001" "小米 Max 標準版 全網通版" "2016001" "小米 Max 標準版 全網通版"
"2016002" "小米 Max 標準版 國際版" "2016002" "小米 Max 標準版 國際版"
"2016007" "小米 Max 高配版" "2016007" "小米 Max 高配版"
@@ -515,6 +517,7 @@
"2312CRAD3C" "Redmi Note 13 Pro 國行版" "2312CRAD3C" "Redmi Note 13 Pro 國行版"
"2312DRA50G" "Redmi Note 13 Pro 5G 國際版" "2312DRA50G" "Redmi Note 13 Pro 5G 國際版"
"2312DRA50I" "Redmi Note 13 Pro 5G 印度版" "2312DRA50I" "Redmi Note 13 Pro 5G 印度版"
"XIG05" "Redmi Note 13 Pro 5G 日本版 (KDDI)"
"23090RA98C" "Redmi Note 13 Pro+ 國行版" "23090RA98C" "Redmi Note 13 Pro+ 國行版"
"23090RA98G" "Redmi Note 13 Pro+ 5G 國際版" "23090RA98G" "Redmi Note 13 Pro+ 5G 國際版"
"23090RA98I" "Redmi Note 13 Pro+ 5G 印度版" "23090RA98I" "Redmi Note 13 Pro+ 5G 印度版"
@@ -592,6 +595,7 @@
"23073RPBFL" "Redmi Pad SE 拉美版" "23073RPBFL" "Redmi Pad SE 拉美版"
"2405CRPFDC" "Redmi Pad Pro 國行版" "2405CRPFDC" "Redmi Pad Pro 國行版"
"2405CRPFDG" "Redmi Pad Pro 國際版" "2405CRPFDG" "Redmi Pad Pro 國際版"
"2405CRPFDI" "Redmi Pad Pro 印度版"
"2405CRPFDL" "Redmi Pad Pro 拉美版" "2405CRPFDL" "Redmi Pad Pro 拉美版"
"24074RPD2C" "Redmi Pad Pro 5G 國行版" "24074RPD2C" "Redmi Pad Pro 5G 國行版"
"24074RPD2G" "Redmi Pad Pro 5G 國際版" "24074RPD2G" "Redmi Pad Pro 5G 國際版"
@@ -659,6 +663,7 @@
"2302EPCC4I" "POCO C51 印度版" "2302EPCC4I" "POCO C51 印度版"
"22127PC95G" "POCO C55 國際版" "22127PC95G" "POCO C55 國際版"
"22127PC95I" "POCO C55 印度版" "22127PC95I" "POCO C55 印度版"
"2312BPC51X" "POCO C61 國際版"
"2312BPC51H" "POCO C61 印度版" "2312BPC51H" "POCO C61 印度版"
"2310FPCA4G" "POCO C65 國際版" "2310FPCA4G" "POCO C65 國際版"
"2310FPCA4I" "POCO C65 印度版" "2310FPCA4I" "POCO C65 印度版"
@@ -769,11 +774,13 @@
"SM-F9160" "Galaxy Z Fold2 5G" "SM-F9160" "Galaxy Z Fold2 5G"
"SM-F9360" "Galaxy Z Fold4" "SM-F9360" "Galaxy Z Fold4"
"SM-F9460" "Galaxy Z Fold5" "SM-F9460" "Galaxy Z Fold5"
"SM-F9560" "Galaxy Z Fold6"
"SM-F7000" "Galaxy Z Flip" "SM-F7000" "Galaxy Z Flip"
"SM-F7070" "Galaxy Z Flip 5G" "SM-F7070" "Galaxy Z Flip 5G"
"SM-F7110" "Galaxy Z Flip3 5G" "SM-F7110" "Galaxy Z Flip3 5G"
"SM-F7210" "Galaxy Z Flip4" "SM-F7210" "Galaxy Z Flip4"
"SM-F7310" "Galaxy Z Flip5" "SM-F7310" "Galaxy Z Flip5"
"SM-F7410" "Galaxy Z Flip6"
"SM-A3000" "Galaxy A3 公開版" "SM-A3000" "Galaxy A3 公開版"
"SM-A3009" "Galaxy A3 電信定制版" "SM-A3009" "Galaxy A3 電信定制版"
"SM-A5000" "Galaxy A5 公開版" "SM-A5000" "Galaxy A5 公開版"
@@ -952,6 +959,10 @@
"SM-R950" "Galaxy Watch6 Classic 藍牙版 43mm" "SM-R950" "Galaxy Watch6 Classic 藍牙版 43mm"
"SM-R960" "Galaxy Watch6 Classic 藍牙版 47mm" "SM-R960" "Galaxy Watch6 Classic 藍牙版 47mm"
"SM-R9650" "Galaxy Watch6 Classic LTE 47mm" "SM-R9650" "Galaxy Watch6 Classic LTE 47mm"
"SM-L300" "Galaxy Watch7 藍牙版 40mm"
"SM-L310" "Galaxy Watch7 藍牙版 44mm"
"SM-L3150" "Galaxy Watch7 LTE 44mm"
"SM-L7050" "Galaxy Watch Ultra LTE 47mm"
"ASUS_Z01QD" "ROG 遊戲手機" "ASUS_Z01QD" "ROG 遊戲手機"
"ASUS_I001DB" "ROG 遊戲手機 2" "ASUS_I001DB" "ROG 遊戲手機 2"
"ASUS_I003DD" "ROG 遊戲手機 3" "ASUS_I003DD" "ROG 遊戲手機 3"
@@ -1332,6 +1343,7 @@
"M811H" "魅族 M6T 國際版" "M811H" "魅族 M6T 國際版"
"M2110" "魅藍 10" "M2110" "魅藍 10"
"M2111" "魅藍 10s" "M2111" "魅藍 10s"
"M421Q" "魅藍 20"
"S685Q" "魅藍 Max 公開版" "S685Q" "魅藍 Max 公開版"
"S685M" "魅藍 Max 移動版" "S685M" "魅藍 Max 移動版"
"S685C" "魅藍 Max 電信版" "S685C" "魅藍 Max 電信版"
@@ -1418,6 +1430,7 @@
"A065" "Nothing Phone (2) Global" "A065" "Nothing Phone (2) Global"
"AIN065" "Nothing Phone (2) India" "AIN065" "Nothing Phone (2) India"
"A142" "Nothing Phone (2a)" "A142" "Nothing Phone (2a)"
"A015" "CMF Phone 1"
"NX501" "nubia Z5" "NX501" "nubia Z5"
"NX402" "nubia Z5 mini" "NX402" "nubia Z5 mini"
"NX503J" "nubia Z5S" "NX503J" "nubia Z5S"
@@ -1456,7 +1469,8 @@
"NX712J" "nubia Z50 Ultra" "NX712J" "nubia Z50 Ultra"
"NX713J" "nubia Z50S Pro" "NX713J" "nubia Z50S Pro"
"NX715J" "nubia Z50 SE" "NX715J" "nubia Z50 SE"
"NX721J" "nubia Z60 Ultra" "NX721J" "nubia Z60 Ultra / nubia Z60 Ultra 領先版"
"NX725J" "nubia Z60S Pro"
"NX601J" "nubia X6" "NX601J" "nubia X6"
"NX616J" "nubia X" "NX616J" "nubia X"
"NX612J" "nubia V18" "NX612J" "nubia V18"
@@ -1478,6 +1492,7 @@
"Z6255CA" "nubia Blade A72" "Z6255CA" "nubia Blade A72"
"nubia 8550" "nubia V50 Vita" "nubia 8550" "nubia V50 Vita"
"LPD-20W" "nubia Pad 3D" "LPD-20W" "nubia Pad 3D"
"NP02J" "nubia Pad 3D II"
"NX609J" "紅魔電競遊戲手機" "NX609J" "紅魔電競遊戲手機"
"NX619J" "紅魔 Mars 電競手機" "NX619J" "紅魔 Mars 電競手機"
"NX629J" "紅魔 3" "NX629J" "紅魔 3"
@@ -1495,14 +1510,15 @@
"NX729J" "紅魔 8 Pro / 紅魔 8 Pro+" "NX729J" "紅魔 8 Pro / 紅魔 8 Pro+"
"NX729S" "紅魔 8S Pro / 紅魔 8S Pro+" "NX729S" "紅魔 8S Pro / 紅魔 8S Pro+"
"NX769J" "紅魔 9 Pro / 紅魔 9 Pro+" "NX769J" "紅魔 9 Pro / 紅魔 9 Pro+"
"NX769J" "紅魔 9S Pro / 紅魔 9S Pro+"
"NP01J" "紅魔電競平板 5G" "NP01J" "紅魔電競平板 5G"
"ONE A0001" "OnePlus One 移動版" "ONE A0001" "OnePlus One 全網通版 / 移動版 / 國際版"
"ONE A1001" "OnePlus One 聯通版" "ONE A1001" "OnePlus One 聯通版"
"ONE A2001" "OnePlus 2" "ONE A2001" "OnePlus 2"
"ONE A2003" "OnePlus 2 國際版" "ONE A2003" "OnePlus 2 國際版"
"ONE A2005" "OnePlus 2 北美版" "ONE A2005" "OnePlus 2 北美版"
"ONE E1001" "OnePlus X 移動/聯通版"
"ONE E1000" "OnePlus X 全網通版" "ONE E1000" "OnePlus X 全網通版"
"ONE E1001" "OnePlus X 移動版 / 聯通版"
"ONE E1003" "OnePlus X 國際版" "ONE E1003" "OnePlus X 國際版"
"ONE E1005" "OnePlus X 北美版" "ONE E1005" "OnePlus X 北美版"
"ONEPLUS A3000" "OnePlus 3 國行版" "ONEPLUS A3000" "OnePlus 3 國行版"
@@ -1518,116 +1534,119 @@
"GM1900" "OnePlus 7 國行版" "GM1900" "OnePlus 7 國行版"
"GM1901" "OnePlus 7 印度版" "GM1901" "OnePlus 7 印度版"
"GM1903" "OnePlus 7 歐洲版" "GM1903" "OnePlus 7 歐洲版"
"GM1905" "OnePlus 7 北美版/國際版" "GM1905" "OnePlus 7 北美版 / 國際版"
"GM1910" "OnePlus 7 Pro 國行版" "GM1910" "OnePlus 7 Pro 國行版"
"GM1911" "OnePlus 7 Pro 印度版" "GM1911" "OnePlus 7 Pro 印度版"
"GM1913" "OnePlus 7 Pro 歐洲版" "GM1913" "OnePlus 7 Pro 歐洲版"
"GM1915" "OnePlus 7 Pro 北美版/國際版" "GM1915" "OnePlus 7 Pro 北美版 / 國際版"
"GM1917" "OnePlus 7 Pro T-Mobile 版" "GM1917" "OnePlus 7 Pro T-Mobile 版"
"GM1920" "OnePlus 7 Pro 5G 歐洲版" "GM1920" "OnePlus 7 Pro 5G 歐洲版"
"GM1925" "OnePlus 7 Pro 5G Sprint 版" "GM1925" "OnePlus 7 Pro 5G Sprint 版"
"HD1900" "OnePlus 7T 國行版" "HD1900" "OnePlus 7T 國行版"
"HD1901" "OnePlus 7T 印度版" "HD1901" "OnePlus 7T 印度版"
"HD1903" "OnePlus 7T 歐洲版" "HD1903" "OnePlus 7T 歐洲版"
"HD1905" "OnePlus 7T 北美版/國際版" "HD1905" "OnePlus 7T 北美版 / 國際版"
"HD1907" "OnePlus 7T T-Mobile 版" "HD1907" "OnePlus 7T T-Mobile 版"
"HD1910" "OnePlus 7T Pro 國行版" "HD1910" "OnePlus 7T Pro 國行版"
"HD1911" "OnePlus 7T Pro 印度版" "HD1911" "OnePlus 7T Pro 印度版"
"HD1913" "OnePlus 7T Pro 歐洲版/國際版" "HD1913" "OnePlus 7T Pro 歐洲版 / 國際版"
"HD1925" "OnePlus 7T Pro 5G T-Mobile 版 / OnePlus Concept One" "HD1925" "OnePlus 7T Pro 5G T-Mobile 版 / OnePlus Concept One"
"IN2010" "OnePlus 8 國行版" "IN2010" "OnePlus 8 國行版"
"IN2011" "OnePlus 8 印度版" "IN2011" "OnePlus 8 印度版"
"IN2013" "OnePlus 8 歐洲版" "IN2013" "OnePlus 8 歐洲版"
"IN2015" "OnePlus 8 北美版/國際版" "IN2015" "OnePlus 8 北美版 / 國際版"
"IN2017" "OnePlus 8 T-Mobile 版" "IN2017" "OnePlus 8 T-Mobile 版"
"IN2019" "OnePlus 8 Visible 版/Verizon 版" "IN2019" "OnePlus 8 Visible 版 / Verizon 版"
"IN2020" "OnePlus 8 Pro 國行版" "IN2020" "OnePlus 8 Pro 國行版"
"IN2021" "OnePlus 8 Pro 印度版" "IN2021" "OnePlus 8 Pro 印度版"
"IN2023" "OnePlus 8 Pro 歐洲版" "IN2023" "OnePlus 8 Pro 歐洲版"
"IN2025" "OnePlus 8 Pro 北美版/國際版" "IN2025" "OnePlus 8 Pro 北美版 / 國際版"
"KB2000" "OnePlus 8T 國行版" "KB2000" "OnePlus 8T 國行版"
"KB2001" "OnePlus 8T 印度版" "KB2001" "OnePlus 8T 印度版"
"KB2003" "OnePlus 8T 歐洲版" "KB2003" "OnePlus 8T 歐洲版"
"KB2005" "OnePlus 8T 北美版/國際版" "KB2005" "OnePlus 8T 北美版 / 國際版 / OnePlus 8T Concept"
"KB2007" "OnePlus 8T+ T-Mobile 版" "KB2007" "OnePlus 8T+ T-Mobile 版"
"LE2100" "OnePlus 9R 國行版" "LE2100" "OnePlus 9R 國行版"
"LE2101" "OnePlus 9R 印度版" "LE2101" "OnePlus 9R 印度版"
"LE2110" "OnePlus 9 國行版" "LE2110" "OnePlus 9 國行版"
"LE2111" "OnePlus 9 印度版" "LE2111" "OnePlus 9 印度版"
"LE2113" "OnePlus 9 歐洲版" "LE2113" "OnePlus 9 歐洲版"
"LE2115" "OnePlus 9 北美版/國際版" "LE2115" "OnePlus 9 北美版 / 國際版"
"LE2117" "OnePlus 9 T-Mobile 版" "LE2117" "OnePlus 9 T-Mobile 版"
"LE2119" "OnePlus 9 Verzion 版" "LE2119" "OnePlus 9 Verzion 版"
"LE2120" "OnePlus 9 Pro 國行版" "LE2120" "OnePlus 9 Pro 國行版"
"LE2121" "OnePlus 9 Pro 印度版" "LE2121" "OnePlus 9 Pro 印度版"
"LE2123" "OnePlus 9 Pro 歐洲版" "LE2123" "OnePlus 9 Pro 歐洲版"
"LE2125" "OnePlus 9 Pro 北美版/國際版" "LE2125" "OnePlus 9 Pro 北美版 / 國際版"
"LE2127" "OnePlus 9 Pro T-Mobile 版" "LE2127" "OnePlus 9 Pro T-Mobile 版"
"MT2110" "OnePlus 9RT 國行版" "MT2110" "OnePlus 9RT 國行版"
"MT2111" "OnePlus 9RT 印度版" "MT2111" "OnePlus 9RT 印度版"
"NE2210" "OnePlus 10 Pro 國行版" "NE2210" "OnePlus 10 Pro 國行版"
"NE2211" "OnePlus 10 Pro 印度版" "NE2211" "OnePlus 10 Pro 印度版"
"NE2213" "OnePlus 10 Pro 歐洲版/國際版" "NE2213" "OnePlus 10 Pro 歐洲版 / 國際版"
"NE2215" "OnePlus 10 Pro 北美版" "NE2215" "OnePlus 10 Pro 北美版"
"NE2217" "OnePlus 10 Pro T-Mobile 版" "NE2217" "OnePlus 10 Pro T-Mobile 版"
"PGKM10" "OnePlus Ace 國行版" "PGKM10" "OnePlus Ace 國行版"
"CPH2423" "OnePlus 10R 印度版" "CPH2423" "OnePlus 10R 印度版"
"CPH2411" "OnePlus 10R Endurance 印度版" "CPH2411" "OnePlus 10R 長壽版 印度版"
"PGZ110" "OnePlus Ace 競速版 國行版" "PGZ110" "OnePlus Ace 競速版 國行版"
"PGP110" "OnePlus Ace Pro 國行版" "PGP110" "OnePlus Ace Pro 國行版 / 原神限定版"
"CPH2413" "OnePlus 10T 印度版" "CPH2413" "OnePlus 10T 印度版"
"CPH2415" "OnePlus 10T 歐洲版/國際版" "CPH2415" "OnePlus 10T 歐洲版 / 國際版"
"CPH2417" "OnePlus 10T 北美版" "CPH2417" "OnePlus 10T 北美版"
"CPH2419" "OnePlus 10T T-Mobile 版" "CPH2419" "OnePlus 10T T-Mobile 版"
"PHB110" "OnePlus 11 國行版" "PHB110" "OnePlus 11 國行版"
"CPH2447" "OnePlus 11 印度版" "CPH2447" "OnePlus 11 印度版"
"CPH2449" "OnePlus 11 歐洲版/國際版" "CPH2449" "OnePlus 11 歐洲版 / 國際版 / OnePlus 11 Concept"
"CPH2451" "OnePlus 11 北美版" "CPH2451" "OnePlus 11 北美版"
"PHK110" "OnePlus Ace 2 國行版" "PHK110" "OnePlus Ace 2 國行版 / 原神定制禮盒"
"CPH2487" "OnePlus 11R 印度版" "CPH2487" "OnePlus 11R 印度版"
"PHP110" "OnePlus Ace 2V 國行版" "PHP110" "OnePlus Ace 2V 國行版"
"CPH2491" "OnePlus Nord 3 印度版" "CPH2491" "OnePlus Nord 3 印度版"
"CPH2493" "OnePlus Nord 3 歐洲版" "CPH2493" "OnePlus Nord 3 歐洲版"
"PJA110" "OnePlus Ace 2 Pro 國行版" "PJA110" "OnePlus Ace 2 Pro 國行版 / 原神派蒙主題禮盒"
"PJD110" "OnePlus 12 國行版" "PJD110" "OnePlus 12 國行版"
"CPH2573" "OnePlus 12 印度版" "CPH2573" "OnePlus 12 印度版"
"CPH2581" "OnePlus 12 歐洲版/國際版" "CPH2581" "OnePlus 12 歐洲版 / 國際版"
"CPH2583" "OnePlus 12 北美版" "CPH2583" "OnePlus 12 北美版"
"PJE110" "OnePlus Ace 3 國行版" "PJE110" "OnePlus Ace 3 國行版 / 原神刻晴定制機"
"CPH2585" "OnePlus 12R 印度版" "CPH2585" "OnePlus 12R 印度版 / 原神刻晴定制機"
"CPH2609" "OnePlus 12R 歐洲版/國際版" "CPH2609" "OnePlus 12R 歐洲版 / 國際版 / 原神刻晴定制機"
"CPH2611" "OnePlus 12R 北美版" "CPH2611" "OnePlus 12R 北美版 / 原神刻晴定制機"
"PJF110" "OnePlus Ace 3V 國行版" "PJF110" "OnePlus Ace 3V 國行版"
"PJX110" "OnePlus Ace 3 Pro 國行版" "PJX110" "OnePlus Ace 3 Pro 國行版"
"AC2001" "OnePlus Nord 印度版" "AC2001" "OnePlus Nord 印度版"
"AC2003" "OnePlus Nord 歐洲版/國際版" "AC2003" "OnePlus Nord 歐洲版 / 國際版"
"DN2101" "OnePlus Nord 2 印度版" "DN2101" "OnePlus Nord 2 印度版"
"DN2103" "OnePlus Nord 2 歐洲版" "DN2103" "OnePlus Nord 2 歐洲版"
"CPH2399" "OnePlus Nord 2T 國際版" "CPH2399" "OnePlus Nord 2T 國際版"
"CPH2401" "OnePlus Nord 2T 印度版" "CPH2401" "OnePlus Nord 2T 印度版"
"CPH2661" "OnePlus Nord 4 印度版"
"CPH2663" "OnePlus Nord 4 歐洲版 / 國際版"
"EB2101" "OnePlus Nord CE 印度版" "EB2101" "OnePlus Nord CE 印度版"
"EB2103" "OnePlus Nord CE 歐洲版/國際版" "EB2103" "OnePlus Nord CE 歐洲版 / 國際版"
"IV2201" "OnePlus Nord CE 2 印度版" "IV2201" "OnePlus Nord CE 2 印度版"
"CPH2381" "OnePlus Nord CE 2 Lite 印度版" "CPH2381" "OnePlus Nord CE 2 Lite 印度版"
"CPH2409" "OnePlus Nord CE 2 Lite 歐洲版/國際版" "CPH2409" "OnePlus Nord CE 2 Lite 歐洲版 / 國際版"
"CPH2569" "OnePlus Nord CE 3 印度版" "CPH2569" "OnePlus Nord CE 3 印度版"
"CPH2465" "OnePlus Nord CE 3 Lite 國際版" "CPH2465" "OnePlus Nord CE 3 Lite 國際版"
"CPH2467" "OnePlus Nord CE 3 Lite 印度版" "CPH2467" "OnePlus Nord CE 3 Lite 印度版"
"CPH2613" "OnePlus Nord CE4 印度版" "CPH2513" "OnePlus Nord N30 北美版"
"CPH2619" "OnePlus Nord CE4 Lite 印度版" "CPH2515" "OnePlus Nord N30 T-Mobile 版"
"CPH2621" "OnePlus Nord CE4 Lite 歐洲版/國際版" "CPH2613" "OnePlus Nord CE 4 印度版"
"CPH2619" "OnePlus Nord CE 4 Lite 印度版"
"CPH2621" "OnePlus Nord CE 4 Lite 歐洲版 / 國際版"
"BE2025" "OnePlus Nord N10 Metro 版" "BE2025" "OnePlus Nord N10 Metro 版"
"BE2026" "OnePlus Nord N10 北美版" "BE2026" "OnePlus Nord N10 北美版"
"BE2029" "OnePlus Nord N10 歐洲版/國際版" "BE2029" "OnePlus Nord N10 歐洲版 / 國際版"
"BE2028" "OnePlus Nord N10 T-Mobile 版" "BE2028" "OnePlus Nord N10 T-Mobile 版"
"BE2011" "OnePlus Nord N100 北美版" "BE2011" "OnePlus Nord N100 北美版"
"BE2012" "OnePlus Nord N100 T-Mobile 版" "BE2012" "OnePlus Nord N100 T-Mobile 版"
"BE2013" "OnePlus Nord N100 國際版" "BE2013" "OnePlus Nord N100 國際版"
"BE2015" "OnePlus Nord N100 Metro 版" "BE2015" "OnePlus Nord N100 Metro 版"
"GN2200" "OnePlus Nord N20"
"CPH2459" "OnePlus Nord N20" "CPH2459" "OnePlus Nord N20"
"CPH2469" "OnePlus Nord 20 SE" "CPH2469" "OnePlus Nord N20 SE"
"CPH2513" "OnePlus Nord N30 北美版"
"CPH2515" "OnePlus Nord N30 T-Mobile 版"
"CPH2605" "OnePlus Nord N30 SE 歐洲版" "CPH2605" "OnePlus Nord N30 SE 歐洲版"
"DE2117" "OnePlus Nord N200 北美版" "DE2117" "OnePlus Nord N200 北美版"
"DE2118" "OnePlus Nord N200 T-Mobile 版" "DE2118" "OnePlus Nord N200 T-Mobile 版"
@@ -1637,12 +1656,15 @@
"OPD2304" "OnePlus Pad Go LTE" "OPD2304" "OnePlus Pad Go LTE"
"OPD2305" "OnePlus Pad Go Wi-Fi" "OPD2305" "OnePlus Pad Go Wi-Fi"
"OPD2404" "OnePlus Pad Pro" "OPD2404" "OnePlus Pad Pro"
"OPD2403" "OnePlus Pad 2"
"W101IN" "OnePlus Band 印度版" "W101IN" "OnePlus Band 印度版"
"OPBBE221" "OnePlus Nord Watch 國際版" "OPBBE221" "OnePlus Nord Watch"
"W301CN" "OnePlus Watch 國行版 / Cyberpunk 2077 限定版" "W301CN" "OnePlus Watch 國行版 / Cyberpunk 2077 限定版"
"W501CN" "OnePlus Watch 鈷合金限定版 (國行)" "W501CN" "OnePlus Watch 鈷合金限定版 (國行)"
"W301GB" "OnePlus Watch 國際版 / 鈷合金限定版 (國際)" "W301GB" "OnePlus Watch 國際版 / 鈷合金限定版 (國際)"
"OPWW234" "OnePlus Watch 2 國行" "OPWW234" "OnePlus Watch 2 (國行)"
"OPWWE234" "OnePlus Watch 2R"
"OPWWE231" "OnePlus Watch 2"
"OPWWE231" "OnePlus Watch 2 國際版" "OPWWE231" "OnePlus Watch 2 國際版"
"E6683" "Xperia Z5 dual" "E6683" "Xperia Z5 dual"
"E6883" "Xperia Z5 Premium" "E6883" "Xperia Z5 Premium"

View File

@@ -1,4 +1,8 @@
#!/system/bin/sh #!/system/bin/sh
if [ "$(whoami)" != root ]; then
echo "你是憨批不給Root用你媽 爬"
exit 1
fi
[[ -d /data/cache ]] && set -x 2> /data/cache/debug_output.log [[ -d /data/cache ]] && set -x 2> /data/cache/debug_output.log
shell_language="zh-TW" shell_language="zh-TW"
MODDIR="$MODDIR" MODDIR="$MODDIR"
@@ -9,12 +13,15 @@ script="${0##*/}"
backup_version="V15.9.4" backup_version="V15.9.4"
[[ $SHELL = *mt* ]] && echo "請勿使用MT管理器拓展包環境執行,請更換系統環境" && exit 2 [[ $SHELL = *mt* ]] && echo "請勿使用MT管理器拓展包環境執行,請更換系統環境" && exit 2
update_backup_settings_conf() { update_backup_settings_conf() {
echo "#音量鍵選擇總開關 是否在每次執行備份腳本時使用音量鍵詢問備份需求 echo "#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示) #1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇) #2使用鍵盤輸入適用於無音量鍵可用設備選擇 (如選項未設置,則強制使用鍵盤輸入)
Lo="${Lo:-0}" Lo="${Lo:-0}"
#後台執行腳本(設置0不能關閉當前終端有壓縮速率設置1可完全關閉MT使用有狀態欄通知 沒有壓縮速率顯示設置2也可離開腳本備份完成後狀態欄通知 無壓縮速率顯示) #後台執行腳本
0不能關閉當前終端有壓縮速率
1開啟通知有進度條無壓縮速率顯示
2開啟通知無進度條備份完成後通知無壓縮速率顯示
background_execution="${background_execution:-0}" background_execution="${background_execution:-0}"
#腳本語言設置 留空則自動識別系統語言環境並翻譯 #腳本語言設置 留空則自動識別系統語言環境並翻譯
@@ -27,7 +34,7 @@ Output_path=\""$Output_path"\"
#自定義applist.txt位置 支持相對路徑(留空則默認當前路徑) #自定義applist.txt位置 支持相對路徑(留空則默認當前路徑)
list_location=\""$list_location"\" list_location=\""$list_location"\"
#自動更新腳本(留空強制音量鍵選擇) #自動更新腳本(留空強制選擇)
#1開啟 0關閉 #1開啟 0關閉
update="${update:-1}" update="${update:-1}"
@@ -35,7 +42,7 @@ update="${update:-1}"
#屏蔽後不會提示音量鍵選擇不影響Output_path指定外置存儲位置 #屏蔽後不會提示音量鍵選擇不影響Output_path指定外置存儲位置
mount_point=\""${mount_point:-rannki|0000-1}"\" mount_point=\""${mount_point:-rannki|0000-1}"\"
#使用者(如0 999等用戶如存在多個用戶留空強制音量鍵選擇無多個用戶則默認用戶0不詢問) #使用者(如0 999等用戶如存在多個用戶留空強制選擇無多個用戶則默認用戶0不詢問)
user="$user" user="$user"
#備份模式 #備份模式
@@ -44,10 +51,10 @@ user="$user"
#此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表) #此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表)
Backup_Mode=1 Backup_Mode=1
#是否備份使用者數據 (1備份 0不備份 留空強制音量鍵選擇) #是否備份使用者數據 (1備份 0不備份 留空強制選擇)
Backup_user_data="${Backup_user_data:-1}" Backup_user_data="${Backup_user_data:-1}"
#是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制音量鍵選擇) #是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制選擇)
Backup_obb_data="${Backup_obb_data:-1}" Backup_obb_data="${Backup_obb_data:-1}"
#是否在應用數據備份完成後備份自定義目錄 #是否在應用數據備份完成後備份自定義目錄
@@ -136,21 +143,33 @@ rgb_c="${rgb_c:-177}"
s/false/0/g' s/false/0/g'
} }
update_Restore_settings_conf() { update_Restore_settings_conf() {
echo "#音量鍵選擇總開關 是否在每次執行恢復腳本時使用音量鍵詢問恢復需求 echo "#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
#1開啟音量鍵選擇如選項已設置,則跳過該選項提示 #1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
#0關閉音量鍵選擇如選項未設置,則強制使用音量鍵選擇) #2使用鍵盤輸入適用於無音量鍵可用設備選擇 (如選項未設置,則強制使用鍵盤輸入)
Lo="${Lo:-0}" Lo="${Lo:-0}"
#後台執行腳本(設置0不能關閉當前終端有壓縮速率設置1可完全關閉MT使用有狀態欄通知 沒有壓縮速率顯示設置2也可離開腳本備份完成後狀態欄通知 無壓縮速率顯示) #後台執行腳本
0不能關閉當前終端有壓縮速率
1開啟通知有進度條無壓縮速率顯示
2開啟通知無進度條備份完成後通知無壓縮速率顯示
background_execution="${background_execution:-0}" background_execution="${background_execution:-0}"
#腳本語言設置 為空自動針對當前系統語言環境自動翻譯 #腳本語言設置 為空自動針對當前系統語言環境自動翻譯
#1簡體中文 0繁體中文 #1簡體中文 0繁體中文
Shell_LANG="$Shell_LANG" Shell_LANG="$Shell_LANG"
#自動更新腳本(留空強制音量鍵選擇) #自動更新腳本(留空強制選擇)
update="${update:-1}" update="${update:-1}"
#恢復模式(1恢復未安裝應用 0全恢復)
recovery_mode="${recovery_mode:-0}"
#恢復Magisk模塊
modules_recovery="${modules_recovery:-0}"
#恢復資料夾
media_recovery="${media_recovery:-0}"
#存在進程忽略恢復(1忽略0恢復) #存在進程忽略恢復(1忽略0恢復)
Background_apps_ignore="${Background_apps_ignore:-0}" Background_apps_ignore="${Background_apps_ignore:-0}"
@@ -173,7 +192,7 @@ fi
[[ ! -f $tools_path/classes2.dex ]] && echo "$tools_path/classes2.dex遺失" [[ ! -f $tools_path/classes2.dex ]] && echo "$tools_path/classes2.dex遺失"
if [[ ! -f $conf_path ]]; then if [[ ! -f $conf_path ]]; then
case $operate in case $operate in
backup_media|backup|Getlist|Restore2|check_file|convert|Restore3|dumpname) backup_media|backup|Getlist|Restore|Restore2|check_file|convert|Restore3|dumpname)
if [[ $conf_path != *Backup_* ]]; then if [[ $conf_path != *Backup_* ]]; then
update_backup_settings_conf>"$conf_path" update_backup_settings_conf>"$conf_path"
echo "因腳本找不到\n$conf_path\n故重新生成默認列表\n請重新配置後重新執行腳本" && exit 0 echo "因腳本找不到\n$conf_path\n故重新生成默認列表\n請重新配置後重新執行腳本" && exit 0
@@ -185,12 +204,6 @@ if [[ ! -f $conf_path ]]; then
echo "$conf_path配置遺失" && exit 1 echo "$conf_path配置遺失" && exit 1
fi fi
fi ;; fi ;;
*)
if [[ -f $MODDIR/backup_settings.conf ]]; then
conf_path="$MODDIR/backup_settings.conf"
else
[[ -f $MODDIR/restore_settings.conf ]] && conf_path="$MODDIR/restore_settings.conf"
fi
esac esac
fi fi
[[ ! -f $conf_path ]] && echo "$conf_path遺失" && exit 2 [[ ! -f $conf_path ]] && echo "$conf_path遺失" && exit 2
@@ -204,25 +217,20 @@ if [[ $Shell_LANG != "" ]]; then
fi fi
[[ $LANG = "" ]] && LANG="$(getprop "persist.sys.locale")" [[ $LANG = "" ]] && LANG="$(getprop "persist.sys.locale")"
echoRgb() { echoRgb() {
# 判斷是否支援彩色
if [ -t 1 ] && [ "$TERM" ]; then
#轉換echo顏色提高可讀性 #轉換echo顏色提高可讀性
case $2 in if [[ $2 = 0 ]]; then
0)echo -e "\e[38;5;197m -$1\e[0m";; echo -e "\e[38;5;197m -$1\e[0m"
1)echo -e "\e[38;5;121m -$1\e[0m";; elif [[ $2 = 1 ]]; then
2)echo -e "\e[38;5;${rgb_c}m -$1\e[0m";; echo -e "\e[38;5;121m -$1\e[0m"
3)echo -e "\e[38;5;${rgb_b}m -$1\e[0m";; elif [[ $2 = 2 ]]; then
*)echo -e "\e[38;5;${rgb_a}m -$1\e[0m";; echo -e "\e[38;5;${rgb_c}m -$1\e[0m"
esac elif [[ $2 = 3 ]]; then
echo -e "\e[38;5;${rgb_b}m -$1\e[0m"
else else
echo "$1" echo -e "\e[38;5;${rgb_a}m -$1\e[0m"
fi fi
} }
[ "$rgb_a" = "" ] && rgb_a=214 [ "$rgb_a" = "" ] && rgb_a=214
if [ "$(whoami)" != root ]; then
echoRgb "你是憨批不給Root用你媽 爬" "0"
exit 1
fi
abi="$(getprop ro.product.cpu.abi)" abi="$(getprop ro.product.cpu.abi)"
case $abi in case $abi in
arm64*) arm64*)
@@ -315,7 +323,7 @@ tar_sha256sum="3c605b1e9eb8283555225dcad4a3bf1777ae39c5f19a2c8b8943140fd7555814"
classesdex_sha256sum="09d0058763157b97d6ea2bf74bd7ec53089a9ddb496f089a159ea0027007bb94" classesdex_sha256sum="09d0058763157b97d6ea2bf74bd7ec53089a9ddb496f089a159ea0027007bb94"
classesdex2_sha256sum="e78b33af047464c225b171da0da3e46fb2932b798ff4cd26de75a1649b5e30d5" classesdex2_sha256sum="e78b33af047464c225b171da0da3e46fb2932b798ff4cd26de75a1649b5e30d5"
[[ $(sha256sum "$tools_path/zstd" | cut -d" " -f1) != $zstd_sha256sum ]] && echoRgb "zstd效驗失敗" "0" && exit 2 [[ $(sha256sum "$tools_path/zstd" | cut -d" " -f1) != $zstd_sha256sum ]] && echoRgb "zstd效驗失敗" "0" && exit 2
[[ $(sha256sum "$tools_path/tar" | cut -d" " -f1) != $tar_sha256sum ]] && echoRgb "tar效驗失敗" "0" && exit 2 #[[ $(sha256sum "$tools_path/tar" | cut -d" " -f1) != $tar_sha256sum ]] && echoRgb "tar效驗失敗" "0" && exit 2
[[ $(sha256sum "$tools_path/classes.dex" | cut -d" " -f1) != $classesdex_sha256sum ]] && echoRgb "classes.dex效驗失敗" "0" && exit 2 [[ $(sha256sum "$tools_path/classes.dex" | cut -d" " -f1) != $classesdex_sha256sum ]] && echoRgb "classes.dex效驗失敗" "0" && exit 2
[[ $(sha256sum "$tools_path/classes2.dex" | cut -d" " -f1) != $classesdex2_sha256sum ]] && echoRgb "classes2.dex效驗失敗" "0" && exit 2 [[ $(sha256sum "$tools_path/classes2.dex" | cut -d" " -f1) != $classesdex2_sha256sum ]] && echoRgb "classes2.dex效驗失敗" "0" && exit 2
TMPDIR="/data/local/tmp" TMPDIR="/data/local/tmp"
@@ -413,9 +421,6 @@ process_name() {
} }
kill_Serve() { kill_Serve() {
{ {
#process_name Tar
#process_name pv
#process_name Zstd
if [[ -e $TMPDIR/scriptTMP ]]; then if [[ -e $TMPDIR/scriptTMP ]]; then
scriptname="$(cat "$TMPDIR/scriptTMP")" scriptname="$(cat "$TMPDIR/scriptTMP")"
echoRgb "腳本殘留進程,將殺死後退出腳本,請重新執行一次\n -殺死$scriptname" "0" echoRgb "腳本殘留進程,將殺死後退出腳本,請重新執行一次\n -殺死$scriptname" "0"
@@ -475,7 +480,7 @@ else
RAMINFO="RAM:null" RAMINFO="RAM:null"
fi fi
echoRgb "---------------------SpeedBackup---------------------" 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 -appinfo版本:$(appinfo --version)\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\n -$(down -s -L https://v1.hitokoto.cn/?encode=text)" 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 -appinfo版本:$(appinfo --version)\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 case $MODDIR in
*Backup_*) *Backup_*)
if [[ -f $MODDIR/app_details.json ]]; then if [[ -f $MODDIR/app_details.json ]]; then
@@ -501,12 +506,48 @@ case $LANG in
echoRgb "系統語言環境:簡體中文" echoRgb "系統語言環境:簡體中文"
Script_target_language="zh-CN" ;; Script_target_language="zh-CN" ;;
esac esac
Enter_options() {
echoRgb "$1" "2"
unset option parameter
while true ;do
if [[ $option != "" ]]; then
case $option in
0|1)
parameter="$option"
[[ $option = 1 ]] && echoRgb "$2" "2" || echoRgb "$3" "2"
break ;;
*)
echoRgb "$option參數錯誤 只能是0或1" "0"
read option ;;
esac
else
read option
fi
done
}
add_entry() {
app_name="$1"
package_name="$2"
output="$3"
# 檢查是否已經存在同樣的應用名稱
if [[ $(echo "$3" | grep -o "$app_name") != "" ]]; then
# 如果應用名稱存在但包名不同,則需要添加數字後綴
count=1
new_app_name="${app_name}_${count}"
while echo "$3" | grep -q "$new_app_name"; do
count=$((count + 1))
new_app_name="${app_name}_${count}"
done
app_name="$new_app_name"
fi
REPLY="$app_name $package_name"
}
case $operate in case $operate in
backup|Restore|Restore2|Getlist|backup_media) backup|Restore|Restore2|Getlist|backup_media)
if [[ $backup_mode = "" ]]; then if [[ $backup_mode = "" ]]; then
if [[ $user = "" ]]; then if [[ $user = "" ]]; then
user_id="$(appinfo -listUsers)" user_id="$(ls /data/user | tr ' ' '\n')"
if [[ $user_id != "" && $(appinfo -listUsers | wc -l) -gt 1 ]]; then if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
echo "$user_id" | while read ; do echo "$user_id" | while read ; do
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2" [[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
done done
@@ -514,10 +555,19 @@ backup|Restore|Restore2|Getlist|backup_media)
if [[ $(echo "$user_id" | wc -l) = 2 ]]; then if [[ $(echo "$user_id" | wc -l) = 2 ]]; then
user1="$(echo "$user_id" | sed -n '1p')" user1="$(echo "$user_id" | sed -n '1p')"
user2="$(echo "$user_id" | sed -n '2p')" user2="$(echo "$user_id" | sed -n '2p')"
case $Lo in
0|1)
echoRgb "音量上選擇用戶:$user1,音量下選擇用戶:$user2" "2" echoRgb "音量上選擇用戶:$user1,音量下選擇用戶:$user2" "2"
Select_user="true" Select_user="true"
get_version "$user1" "$user2" && user="$branch" get_version "$user1" "$user2" && user="$branch"
unset Select_user unset Select_user ;;
2)
Enter_options "輸入1選擇用戶:$user1 0用戶:$user2" "$user1" "$user2"
case $parameter in
0) user="$user2" ;;
1) user="$user1" ;;
esac ;;
esac
else else
while true ;do while true ;do
if [[ $option != "" ]]; then if [[ $option != "" ]]; then
@@ -533,8 +583,8 @@ backup|Restore|Restore2|Getlist|backup_media)
user="0" user="0"
fi fi
else else
user_id="$(appinfo -listUsers)" user_id="$(ls /data/user | tr ' ' '\n')"
if [[ $user_id != "" && $(appinfo -listUsers | wc -l) -gt 1 ]]; then if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
echo "$user_id" | while read ; do echo "$user_id" | while read ; do
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2" [[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
done done
@@ -749,7 +799,9 @@ update_script
zipFile="$(ls -t /storage/emulated/0/Download/*.zip 2>/dev/null | head -1)" zipFile="$(ls -t /storage/emulated/0/Download/*.zip 2>/dev/null | head -1)"
zipFile2="$(ls -t "$MODDIR"/*.zip 2>/dev/null | head -1)" zipFile2="$(ls -t "$MODDIR"/*.zip 2>/dev/null | head -1)"
if [[ $zipFile2 != "" ]]; then if [[ $zipFile2 != "" ]]; then
PayloadDumper -o "$MODDIR/ROM" "$zipFile2" starttime1="$(date -u "+%s")"
PayloadDumper -a -o "$MODDIR/ROM" "$zipFile2"
endtime 1
exit exit
fi fi
@@ -771,10 +823,6 @@ else
alias create="pm install-create -i com.android.vending --user $user -t 2>/dev/null" alias create="pm install-create -i com.android.vending --user $user -t 2>/dev/null"
fi fi
fi fi
case $operate in
Getlist|Restore2|Restore3|dumpname|check_file|backup_media|convert|Device_List) ;;
*) isBoolean "$Lo" "Lo" && Lo="$nsx" ;;
esac
cdn=2 cdn=2
#settings get system system_locales #settings get system system_locales
Language="https://api.github.com/repos/YAWAsau/backup_script/releases/latest" Language="https://api.github.com/repos/YAWAsau/backup_script/releases/latest"
@@ -819,19 +867,25 @@ if [[ $path_hierarchy != "" && $Script_target_language != "" ]]; then
[[ -e $TMPDIR/0 ]] && rm -rf "$TMPDIR/0" && echoRgb "轉換腳本完成,退出腳本重新執行即可使用" && exit 2 [[ -e $TMPDIR/0 ]] && rm -rf "$TMPDIR/0" && echoRgb "轉換腳本完成,退出腳本重新執行即可使用" && exit 2
fi fi
#效驗選填是否正確 #效驗選填是否正確
Lo="$(echo "$Lo" | sed 's/true/1/g ; s/false/0/g')" case $Lo in
isBoolean "$Lo" "Lo" && Lo="$nsx" 0)
if [[ $Lo = false ]]; then
[[ $update != "" ]] && isBoolean "$update" "update" && update="$nsx" || { [[ $update != "" ]] && isBoolean "$update" "update" && update="$nsx" || {
echoRgb "自動更新腳本?\n -音量上更新,下不更新" echoRgb "自動更新腳本?\n -音量上更新,下不更新"
get_version "更新" "不更新" && update="$branch" get_version "更新" "不更新" && update="$branch"
} } ;;
else 1)
[[ $update = "" ]] && { [[ $update = "" ]] && {
echoRgb "自動更新腳本?\n -音量上更新,下不更新" echoRgb "自動更新腳本?\n -音量上更新,下不更新"
get_version "更新" "不更新" && update="$branch" get_version "更新" "不更新" && update="$branch"
} || isBoolean "$update" "update" && update="$nsx" } || isBoolean "$update" "update" && update="$nsx" ;;
fi 2)
[[ $update = "" ]] && {
Enter_options "輸入1自動更新腳本輸入0不自動更新腳本" "更新" "不更新" && isBoolean "$parameter" "update" && update="$nsx"
} || {
isBoolean "$update" "update" && update="$nsx"
} ;;
*) echoRgb "$conf_path Lo=$Lo填寫錯誤正確值0 1 2" "0" && exit 2 ;;
esac
[[ $update = true ]] && json="$(down -s -L "$Language" 2>/dev/null)" || echoRgb "自動更新被關閉" "0" [[ $update = true ]] && json="$(down -s -L "$Language" 2>/dev/null)" || echoRgb "自動更新被關閉" "0"
if [[ $json != "" ]]; then if [[ $json != "" ]]; then
tag="$(echo "$json" | sed -r -n 's/.*"tag_name": *"(.*)".*/\1/p')" tag="$(echo "$json" | sed -r -n 's/.*"tag_name": *"(.*)".*/\1/p')"
@@ -849,8 +903,13 @@ if [[ $json != "" ]]; then
echoRgb "發現新版本:$tag" echoRgb "發現新版本:$tag"
if [[ $update = true ]]; then if [[ $update = true ]]; then
echoRgb "更新日誌:\n$(down -s -L "$Language" | jq -r '.body' 2>/dev/null)" echoRgb "更新日誌:\n$(down -s -L "$Language" | jq -r '.body' 2>/dev/null)"
case $Lo in
0|1)
echoRgb "是否更新腳本?\n -音量上更新,音量下不更新" "2" echoRgb "是否更新腳本?\n -音量上更新,音量下不更新" "2"
get_version "更新" "不更新" && choose="$branch" get_version "更新" "不更新" && choose="$branch" ;;
2)
Enter_options "輸入1自動更新腳本輸入0不自動更新腳本" "更新" "不更新" && isBoolean "$parameter" "update" && update="$nsx" ;;
esac
if [[ $choose = true ]]; then if [[ $choose = true ]]; then
echoRgb "下載中.....耐心等待 如果下載失敗請掛飛機" echoRgb "下載中.....耐心等待 如果下載失敗請掛飛機"
starttime1="$(date -u "+%s")" starttime1="$(date -u "+%s")"
@@ -870,7 +929,6 @@ else
[[ $update = true ]] && echoRgb "更新獲取失敗" "0" [[ $update = true ]] && echoRgb "更新獲取失敗" "0"
fi fi
update_script update_script
Lo="$(echo "$Lo" | sed 's/true/1/g ; s/false/0/g')"
backup_path() { backup_path() {
if [[ $Output_path != "" ]]; then if [[ $Output_path != "" ]]; then
[[ ${Output_path: -1} = / ]] && Output_path="${Output_path%?}" [[ ${Output_path: -1} = / ]] && Output_path="${Output_path%?}"
@@ -898,8 +956,13 @@ backup_path() {
hx="true" hx="true"
Backup="$MODDIR/Backup_${Compression_method}_$user" Backup="$MODDIR/Backup_${Compression_method}_$user"
else else
case $Lo in
0|1)
echoRgb "檢測到隨身碟 是否在隨身碟備份\n -音量上是,音量下不是" "2" echoRgb "檢測到隨身碟 是否在隨身碟備份\n -音量上是,音量下不是" "2"
get_version "選擇了隨身碟備份" "選擇了本地備份" get_version "選擇了隨身碟備份" "選擇了本地備份" ;;
2)
Enter_options "檢測到隨身碟輸入1使用隨身碟備份 0本地備份" "選擇了隨身碟備份" "本地備份" && isBoolean "$parameter" "branch" && branch="$nsx" ;;
esac
[[ $branch = true ]] && hx="$branch" [[ $branch = true ]] && hx="$branch"
[[ $hx = true ]] && Backup="$OTGPATH/Backup_${Compression_method}_$user" [[ $hx = true ]] && Backup="$OTGPATH/Backup_${Compression_method}_$user"
fi fi
@@ -967,7 +1030,7 @@ partition_info() {
Occupation_status="$(df -h "${Backup%/*}" | sed -n 's|% /.*|%|p' | awk '{print $(NF-1),$(NF)}')" Occupation_status="$(df -h "${Backup%/*}" | sed -n 's|% /.*|%|p' | awk '{print $(NF-1),$(NF)}')"
} }
kill_app() { kill_app() {
if [[ $name2 != bin.mt.plus && $name2 != com.termux && $name2 != bin.mt.plus.canary ]]; then if [[ $name2 != *mt* && $name2 != com.termux && $name2 ]]; then
[[ $Pause_Freeze = "" ]] && Pause_Freeze="0" [[ $Pause_Freeze = "" ]] && Pause_Freeze="0"
if [[ $Pause_Freeze = 0 ]]; then if [[ $Pause_Freeze = 0 ]]; then
if [[ $(dumpsys activity processes | grep "packageList" | cut -d '{' -f2 | cut -d '}' -f1 | egrep -w "^$name2$" | sed -n '1p') = $name2 ]]; then if [[ $(dumpsys activity processes | grep "packageList" | cut -d '{' -f2 | cut -d '}' -f1 | egrep -w "^$name2$" | sed -n '1p') = $name2 ]]; then
@@ -977,23 +1040,10 @@ kill_app() {
am kill "$name2" &>/dev/null am kill "$name2" &>/dev/null
echoRgb "殺死$name1進程" echoRgb "殺死$name1進程"
fi fi
pm suspend --user "$user" "$name2" 2>/dev/null | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: true/暫停狀態:凍結/g"
fi fi
Pause_Freeze="1" Pause_Freeze="1"
fi fi
} }
Set_service() {
if [[ $Pause_Freeze = 1 ]]; then
pm unsuspend --user "$user" "$name2" 2>/dev/null | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: false/暫停狀態:解凍/g"
Pause_Freeze="0"
fi
}
restore_freeze() {
appinfo -o pn -p | while read ; do
pm unsuspend --user "$user" "$REPLY" 2>/dev/null
done
}
[[ $(restore_freeze) ]] && echoRgb "已解凍被凍結應用" && exit
Backup_apk() { Backup_apk() {
#檢測apk狀態進行備份 #檢測apk狀態進行備份
#創建APP備份文件夾 #創建APP備份文件夾
@@ -1371,8 +1421,13 @@ get_name(){
rgb_a=118 rgb_a=118
user="$(echo "${0%}" | sed 's/.*\/Backup_zstd_\([0-9]*\).*/\1/')" user="$(echo "${0%}" | sed 's/.*\/Backup_zstd_\([0-9]*\).*/\1/')"
[[ ! -f $txt3 ]] && { [[ ! -f $txt3 ]] && {
[[ $user = 0 ]] && Apk_info="$(appinfo -sort-i -o pn -3 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" || Apk_info="$(appinfo -sort-i -o pn $(pm list packages -3 --user "$user" | cut -f2 -d ':') 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" Apk_info="$(pm list packages -e --user "$user" | cut -f2 -d ':' | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
[[ $Apk_info = "" ]] && echoRgb "appinfo輸出失敗" "0" && exit 2 if [[ $Apk_info != "" ]]; then
[[ $Apk_info = *"Failure calling service package"* ]] && Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
else
Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
fi
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
starttime1="$(date -u "+%s")" starttime1="$(date -u "+%s")"
find "$MODDIR" -maxdepth 2 -name "apk.*" -type f 2>/dev/null | sort | while read; do find "$MODDIR" -maxdepth 2 -name "apk.*" -type f 2>/dev/null | sort | while read; do
Folder="${REPLY%/*}" Folder="${REPLY%/*}"
@@ -1437,7 +1492,7 @@ get_name(){
fi fi
fi fi
if [[ $PackageName != "" && $ChineseName != "" ]]; then if [[ $PackageName != "" && $ChineseName != "" ]]; then
if [[ $(echo "$Apk_info" | egrep -w "^$PackageName$") = "" ]]; then if [[ $(echo "$Apk_info" | egrep -o "$PackageName") = "" ]]; then
echoRgb "$ChineseName已經不存在$user使用者中" echoRgb "$ChineseName已經不存在$user使用者中"
echo "$ChineseName $PackageName">>"$txt3" echo "$ChineseName $PackageName">>"$txt3"
fi fi
@@ -1449,10 +1504,22 @@ get_name(){
echoRgb "$ChineseName $PackageName" && echo "$ChineseName $PackageName" >>"$txt" ;; echoRgb "$ChineseName $PackageName" && echo "$ChineseName $PackageName" >>"$txt" ;;
convert) convert)
if [[ ${Folder##*/} = $PackageName ]]; then if [[ ${Folder##*/} = $PackageName ]]; then
mv "$Folder" "${Folder%/*}/$ChineseName" && echoRgb "${Folder##*/} > $ChineseName" DIR_NAME="${Folder%/*}/$ChineseName"
echoRgb "${Folder##*/} > $ChineseName"
else else
mv "$Folder" "${Folder%/*}/$PackageName" && echoRgb "${Folder##*/} > $PackageName" DIR_NAME="${Folder%/*}/$PackageName"
fi ;; echoRgb "${Folder##*/} > $PackageName"
fi
if [[ -d $DIR_NAME ]]; then
i=1
NEW_DIR_NAME="${DIR_NAME}_${i}"
while [[ -d $NEW_DIR_NAME ]]; do
i=$((i + 1))
NEW_DIR_NAME="${DIR_NAME}_${i}"
done
DIR_NAME="$NEW_DIR_NAME"
fi
mv "$Folder" "$DIR_NAME" ;;
esac esac
fi fi
let rgb_a++ let rgb_a++
@@ -1467,16 +1534,21 @@ get_name(){
fi fi
} }
if [[ -f $txt3 ]]; then if [[ -f $txt3 ]]; then
if [[ $(grep -v "#" "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }') != "" ]]; then if [[ $(egrep -v '#|' "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }') != "" ]]; then
echoRgb "列出需要刪除的應用中....\n -$(cat "$txt3")" echoRgb "列出需要刪除的應用中....\n -$(cat "$txt3")"
case $Lo in
0|1)
echoRgb "確認列表無誤後音量上刪除,音量下退出腳本編輯列表" "2" echoRgb "確認列表無誤後音量上刪除,音量下退出腳本編輯列表" "2"
get_version "刪除" "退出腳本" && Delete_App="$branch" get_version "刪除" "退出腳本" && Delete_App="$branch" ;;
2)
Enter_options "確認列表無誤後輸入1刪除輸入0退出腳本編輯列表" "刪除" "退出腳本" && isBoolean "$parameter" "Delete_App" && Delete_App="$nsx" ;;
esac
if [[ $Delete_App = true ]]; then if [[ $Delete_App = true ]]; then
i=1 i=1
r="$(grep -v "#" "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')" r="$(egrep -v '#|' "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
while [[ $i -le $r ]]; do while [[ $i -le $r ]]; do
name1="$(grep -v "#" "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" name1="$(egrep -v '#|' "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
name2="$(grep -v "#" "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" name2="$(egrep -v '#|' "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
Backup_folder="$MODDIR/$name1" Backup_folder="$MODDIR/$name1"
[[ -d $Backup_folder ]] && rm -rf "$Backup_folder" [[ -d $Backup_folder ]] && rm -rf "$Backup_folder"
echo "$(sed -e "s/$name1 $name2//g ; /^$/d" "$txt" 2>/dev/null)" >"$txt" echo "$(sed -e "s/$name1 $name2//g ; /^$/d" "$txt" 2>/dev/null)" >"$txt"
@@ -1593,14 +1665,14 @@ backup)
*) echoRgb "$Compression_method為不支持的壓縮算法" "0" && exit 2 ;; *) echoRgb "$Compression_method為不支持的壓縮算法" "0" && exit 2 ;;
esac esac
#效驗選填是否正確 #效驗選填是否正確
isBoolean "$Lo" "Lo" && Lo="$nsx" case $Lo in
if [[ $Lo = false ]]; then 0)
[[ $Backup_Mode != "" ]] && isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx" || { [[ $Backup_Mode != "" ]] && isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx" || {
echoRgb "選擇備份模式\n -音量上備份應用+數據,音量下僅應用不包含數據" "2" echoRgb "選擇備份模式\n -音量上備份應用+數據,音量下僅應用不包含數據" "2"
get_version "應用+數據" "僅應用" && Backup_Mode="$branch" get_version "應用+數據" "僅應用" && Backup_Mode="$branch"
} }
if [[ $Backup_Mode = true ]]; then if [[ $Backup_Mode = true ]]; then
if [[ $(echo "$blacklist" | grep -v "#" | wc -l) -gt 0 ]]; then if [[ $(echo "$blacklist" | egrep -v '#|' | wc -l) -gt 0 ]]; then
if [[ $blacklist_mode != "" ]]; then if [[ $blacklist_mode != "" ]]; then
isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx" isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
else else
@@ -1629,14 +1701,14 @@ backup)
[[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || { [[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || {
echoRgb "存在進程忽略備份\n -音量上忽略,音量下備份" "2" echoRgb "存在進程忽略備份\n -音量上忽略,音量下備份" "2"
get_version "忽略" "備份" && Background_apps_ignore="$branch" get_version "忽略" "備份" && Background_apps_ignore="$branch"
} } ;;
else 1)
[[ $Backup_Mode = "" ]] && { [[ $Backup_Mode = "" ]] && {
echoRgb "選擇備份模式\n -音量上備份應用+數據,音量下僅應用不包含數據" "2" echoRgb "選擇備份模式\n -音量上備份應用+數據,音量下僅應用不包含數據" "2"
get_version "應用+數據" "僅應用" && Backup_Mode="$branch" get_version "應用+數據" "僅應用" && Backup_Mode="$branch"
} || isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx" } || isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx"
if [[ $Backup_Mode = true ]]; then if [[ $Backup_Mode = true ]]; then
if [[ $(echo "$blacklist" | grep -v "#" | wc -l) -gt 0 ]]; then if [[ $(echo "$blacklist" | egrep -v '#|' | wc -l) -gt 0 ]]; then
[[ $blacklist_mode = "" ]] && { [[ $blacklist_mode = "" ]] && {
echoRgb "選擇黑名單模式\n -音量上不備份,音量下僅備份安裝檔" "2" echoRgb "選擇黑名單模式\n -音量上不備份,音量下僅備份安裝檔" "2"
get_version "不備份" "備份安裝檔" && blacklist_mode="$branch" get_version "不備份" "備份安裝檔" && blacklist_mode="$branch"
@@ -1658,8 +1730,44 @@ backup)
[[ $Background_apps_ignore = "" ]] && { [[ $Background_apps_ignore = "" ]] && {
echoRgb "存在進程忽略備份\n -音量上忽略,音量下備份" "2" echoRgb "存在進程忽略備份\n -音量上忽略,音量下備份" "2"
get_version "忽略" "備份" && Background_apps_ignore="$branch" get_version "忽略" "備份" && Background_apps_ignore="$branch"
} ;;
2)
[[ $Backup_Mode = "" ]] && {
Enter_options "輸入1備份應用+數據輸入0僅應用不包含數據" "應用+數據" "僅應用" && isBoolean "$parameter" "Backup_Mode" && Backup_Mode="$nsx"
} || {
isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx"
}
if [[ $Backup_Mode = true ]]; then
[[ $(echo "$blacklist" | egrep -v '#|' | wc -l) -gt 0 ]] && {
[[ $blacklist_mode = "" ]] && {
Enter_options "選擇黑名單模式輸入1不備份輸入0備份安裝檔" "不備份" "僅應用安裝檔" && isBoolean "$parameter" "blacklist_mode" && blacklist_mode="$nsx"
} || {
isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
}
}
[[ $Backup_obb_data = "" ]] && {
Enter_options "是否備份外部數據 即比如原神的數據包\n -輸入1備份輸入0不備份" "備份" "不備份" && isBoolean "$parameter" "Backup_obb_data" && Backup_obb_data="$nsx"
} || {
isBoolean "$Backup_obb_data" "Backup_obb_data" && Backup_obb_data="$nsx"
}
[[ $Backup_user_data = "" ]] && {
Enter_options "是否備份使用者數據輸入1備份輸入0不備份" "備份" "不備份" && isBoolean "$parameter" "Backup_user_data" && Backup_user_data="$nsx"
} || {
isBoolean "$Backup_user_data" "Backup_user_data" && Backup_user_data="$nsx"
} }
fi fi
[[ $backup_media = "" ]] && {
Enter_options "全部應用備份結束後是否備份自定義目錄\n -輸入1備份0不備份" "備份" "不備份" && isBoolean "$parameter" "backup_media" && backup_media="$nsx"
} || {
isBoolean "$backup_media" "backup_media" && backup_media="$nsx"
}
[[ $Background_apps_ignore = "" ]] && {
Enter_options "存在進程忽略備份\n -輸入1不備份0備份" "忽略" "備份" && isBoolean "$parameter" "Background_apps_ignore" && Background_apps_ignore="$nsx"
} || {
isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx"
} ;;
*) echoRgb "$conf_path Lo=$Lo填寫錯誤正確值0 1 2" "0" && exit 2 ;;
esac
i=1 i=1
#數據目錄 #數據目錄
if [[ $list_location != "" ]]; then if [[ $list_location != "" ]]; then
@@ -1687,14 +1795,19 @@ backup)
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" 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"
D="1" D="1"
Apk_info="$(echo "$system\n$(pm list packages -3 --user "$user" | cut -f2 -d ':')" | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" Apk_info="$(echo "$system\n$(pm list packages -3 --user "$user" | cut -f2 -d ':')" | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
[[ $Apk_info = "" ]] && echoRgb "appinfo輸出失敗" "0" && exit 2 if [[ $Apk_info != "" ]]; then
[[ $Apk_info = *"Failure calling service package"* ]] && Apk_info="$(echo "$system\n$(appinfo -sort-i -o pn -3 2>/dev/null)" | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
else
Apk_info="$(echo "$system\n$(appinfo -sort-i -o pn -3 2>/dev/null)" | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
fi
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
[[ $backup_mode = "" ]] && { [[ $backup_mode = "" ]] && {
echoRgb "檢查備份列表中是否存在已經卸載應用" "3" echoRgb "檢查備份列表中是否存在已經卸載應用" "3"
while read -r ; do while read -r ; do
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then
app=($REPLY $REPLY) app=($REPLY $REPLY)
if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then
if [[ $(echo "$Apk_info" | egrep -w "^${app[1]}$") != "" ]]; then if [[ $(echo "$Apk_info" | egrep -o "${app[1]}") != "" ]]; then
[[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market僅忽略數據' [[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market僅忽略數據'
Tmplist="$Tmplist\n$REPLY" Tmplist="$Tmplist\n$REPLY"
else else
@@ -1707,7 +1820,7 @@ backup)
done < "$txt" done < "$txt"
} }
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$txt" [[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$txt"
r="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')" r="$(egrep -v '#|' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
[[ $backup_mode != "" ]] && r=1 [[ $backup_mode != "" ]] && r=1
[[ $r = "" && $backup_mode = "" ]] && echoRgb "$MODDIR_NAME/appList.txt是空的或是包名被注釋備份個鬼\n -檢查是否注釋亦或者執行$MODDIR_NAME/生成應用列表.sh" "0" && exit 1 [[ $r = "" && $backup_mode = "" ]] && echoRgb "$MODDIR_NAME/appList.txt是空的或是包名被注釋備份個鬼\n -檢查是否注釋亦或者執行$MODDIR_NAME/生成應用列表.sh" "0" && exit 1
if [[ $Backup_Mode = true ]]; then if [[ $Backup_Mode = true ]]; then
@@ -1739,7 +1852,6 @@ backup)
fi fi
filesize="$(du -s "$Backup" | awk '{print $1}')" filesize="$(du -s "$Backup" | awk '{print $1}')"
Quantity=0 Quantity=0
restore_freeze
#開始循環$txt內的資料進行備份 #開始循環$txt內的資料進行備份
#記錄開始時間 #記錄開始時間
en=118 en=118
@@ -1750,7 +1862,7 @@ backup)
#獲取預設鍵盤 #獲取預設鍵盤
keyboard="$(settings get secure default_input_method 2>/dev/null)" keyboard="$(settings get secure default_input_method 2>/dev/null)"
Set_screen_pause_seconds on Set_screen_pause_seconds on
[[ $(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${keyboard%/*}$") != ${keyboard%/*} ]] && unset keyboard [[ $(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${keyboard%/*}$") != ${keyboard%/*} ]] && unset keyboard
{ {
notification --tag="101" --title="App備份" --text="開始備份app" notification --tag="101" --title="App備份" --text="開始備份app"
starttime1="$(date -u "+%s")" starttime1="$(date -u "+%s")"
@@ -1759,8 +1871,8 @@ backup)
[[ $en -ge 229 ]] && en=118 [[ $en -ge 229 ]] && en=118
unset name1 name2 apk_path apk_path2 unset name1 name2 apk_path apk_path2
if [[ $backup_mode = "" ]]; then if [[ $backup_mode = "" ]]; then
name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" name1="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
name2="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" name2="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
else else
ChineseName="$(jq -r 'to_entries[] | select(.key != null).key' "${0%/*}/app_details.json" | head -n 1)" ChineseName="$(jq -r 'to_entries[] | select(.key != null).key' "${0%/*}/app_details.json" | head -n 1)"
PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "${0%/*}/app_details.json")" PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "${0%/*}/app_details.json")"
@@ -1819,16 +1931,19 @@ backup)
if [[ $result = 0 && $No_backupdata = "" ]]; then if [[ $result = 0 && $No_backupdata = "" ]]; then
if [[ $Backup_Mode = true ]]; then if [[ $Backup_Mode = true ]]; then
if [[ $Backup_obb_data = true ]]; then if [[ $Backup_obb_data = true ]]; then
if [[ $name2 != *mt* ]]; then
#備份data數據 #備份data數據
Backup_data "data" Backup_data "data"
#備份obb數據 #備份obb數據
Backup_data "obb" Backup_data "obb"
else
echoRgb "$name1無法備份" "0"
fi
fi fi
#備份user數據 #備份user數據
[[ $Backup_user_data = true ]] && Backup_data "user" [[ $name2 != *mt* ]] && [[ $Backup_user_data = true ]] && Backup_data "user"
[[ $name2 = github.tornaco.android.thanos ]] && Backup_data "thanox" "$(find "/data/system" -name "thanos*" -maxdepth 1 -type d 2>/dev/null)" [[ $name2 = github.tornaco.android.thanos ]] && Backup_data "thanox" "$(find "/data/system" -name "thanos*" -maxdepth 1 -type d 2>/dev/null)"
[[ $name2 = moe.shizuku.redirectstorage ]] && Backup_data "storage-isolation" "/data/adb/storage-isolation" [[ $name2 = moe.shizuku.redirectstorage ]] && Backup_data "storage-isolation" "/data/adb/storage-isolation"
Set_service
fi fi
fi fi
[[ -f $Backup_folder/${name2}.sh ]] && rm -rf "$Backup_folder/${name2}.sh" [[ -f $Backup_folder/${name2}.sh ]] && rm -rf "$Backup_folder/${name2}.sh"
@@ -1871,7 +1986,7 @@ backup)
notification --tag="101" --title="App備份" --text="app備份完成 $(endtime 1 "應用備份" "3")" notification --tag="101" --title="App備份" --text="app備份完成 $(endtime 1 "應用備份" "3")"
if [[ $backup_media = true && $backup_mode = "" ]]; then if [[ $backup_media = true && $backup_mode = "" ]]; then
A=1 A=1
B="$(echo "$Custom_path" | grep -v "#" | awk 'NF != 0 { count++ } END { print count }')" B="$(echo "$Custom_path" | egrep -v '#|' | awk 'NF != 0 { count++ } END { print count }')"
if [[ $B != "" ]]; then if [[ $B != "" ]]; then
echoRgb "備份結束,備份多媒體" "1" echoRgb "備份結束,備份多媒體" "1"
notification --tag="102" --title="Media備份" --text="Media備份開始" notification --tag="102" --title="Media備份" --text="Media備份開始"
@@ -1921,8 +2036,8 @@ backup)
if [[ $backup_mode = "" ]]; then if [[ $backup_mode = "" ]]; then
while [[ $i -le $r ]]; do while [[ $i -le $r ]]; do
unset pkg name1 unset pkg name1
pkg="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" pkg="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" name1="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
if [[ $(echo "$am_start" | egrep -wo "$pkg") = $pkg ]]; then if [[ $(echo "$am_start" | egrep -wo "$pkg") = $pkg ]]; then
am start -n "$(appinfo -o sa -pn "$pkg" 2>/dev/null)" &>/dev/null am start -n "$(appinfo -o sa -pn "$pkg" 2>/dev/null)" &>/dev/null
echo_log "啟動$name1" "備份" echo_log "啟動$name1" "備份"
@@ -1936,7 +2051,6 @@ backup)
fi fi
fi fi
Set_screen_pause_seconds off Set_screen_pause_seconds off
restore_freeze
rm -rf "$TMPDIR/scriptTMP" rm -rf "$TMPDIR/scriptTMP"
Calculate_size "$Backup" Calculate_size "$Backup"
echoRgb "批量備份完成" echoRgb "批量備份完成"
@@ -1968,12 +2082,43 @@ Restore|Restore2)
[[ ! -f $txt ]] && echoRgb "請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 2 [[ ! -f $txt ]] && echoRgb "請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 2
sort -u "$txt" -o "$txt" 2>/dev/null sort -u "$txt" -o "$txt" 2>/dev/null
i=1 i=1
r="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')" 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 -請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 1
Backup_folder2="$MODDIR/Media" Backup_folder2="$MODDIR/Media"
Backup_folder3="$MODDIR/modules" Backup_folder3="$MODDIR/modules"
#效驗選填是否正確 #效驗選填是否正確
isBoolean "$Lo" "Lo" && Lo="$nsx" case $Lo in
0)
[[ $recovery_mode != "" ]] && isBoolean "$recovery_mode" "recovery_mode" && recovery_mode="$nsx" || {
echoRgb "選擇應用恢復模式\n -音量上僅恢復未安裝,下全恢復"
notification --tag="105" --title="App恢復" --text="選擇應用恢復模式,音量上僅恢復未安裝,下全恢復"
get_version "恢復未安裝" "全恢復" && recovery_mode="$branch"
}
Get_user="$(echo "$MODDIR" | rev | cut -d '/' -f1 | cut -d '_' -f1 | rev | egrep -o '[0-9]+')"
if [[ $Get_user != $user ]]; then
echoRgb "檢測當前用戶$user與恢復資料夾用戶:$Get_user不同,音量上繼續恢復,下不恢復並離開腳本"
notification --tag="105" --title="App恢復" --text="檢測當前用戶$user與恢復資料夾用戶:$Get_user不同\n -音量上繼續恢復,下不恢復並離開腳本"
get_version "恢復安裝" "不恢復安裝" && recovery_mode2="$branch"
fi
if [[ -d $Backup_folder2 ]]; then
[[ $media_recovery != "" ]] && isBoolean "$media_recovery" "media_recovery" && media_recovery="$nsx" || {
echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2"
notification --tag="105" --title="App恢復" --text="是否恢復多媒體數據,音量上恢復,音量下不恢復"
get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch"
}
fi
if [[ -d $Backup_folder3 && $(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l) != 0 ]]; then
[[ $modules_recovery != "" ]] && isBoolean "$modules_recovery" "modules_recovery" && modules_recovery="$nsx" || {
echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2"
notification --tag="105" --title="App恢復" --text="是否刷入Magisk模塊音量上刷入音量下不刷入"
get_version "刷入模塊" "跳過刷入模塊" && modules_recovery="$branch"
}
fi
[[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || {
echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2"
get_version "忽略" "恢復" && Background_apps_ignore="$branch"
} ;;
1)
echoRgb "選擇應用恢復模式\n -音量上僅恢復未安裝,下全恢復" echoRgb "選擇應用恢復模式\n -音量上僅恢復未安裝,下全恢復"
notification --tag="105" --title="App恢復" --text="選擇應用恢復模式,音量上僅恢復未安裝,下全恢復" notification --tag="105" --title="App恢復" --text="選擇應用恢復模式,音量上僅恢復未安裝,下全恢復"
get_version "恢復未安裝" "全恢復" && recovery_mode="$branch" get_version "恢復未安裝" "全恢復" && recovery_mode="$branch"
@@ -1983,32 +2128,60 @@ Restore|Restore2)
notification --tag="105" --title="App恢復" --text="檢測當前用戶$user與恢復資料夾用戶:$Get_user不同\n -音量上繼續恢復,下不恢復並離開腳本" notification --tag="105" --title="App恢復" --text="檢測當前用戶$user與恢復資料夾用戶:$Get_user不同\n -音量上繼續恢復,下不恢復並離開腳本"
get_version "恢復安裝" "不恢復安裝" && recovery_mode2="$branch" get_version "恢復安裝" "不恢復安裝" && recovery_mode2="$branch"
fi fi
if [[ -d $Backup_folder2 ]]; then
echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2" echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2"
notification --tag="105" --title="App恢復" --text="是否恢復多媒體數據,音量上恢復,音量下不恢復" notification --tag="105" --title="App恢復" --text="是否恢復多媒體數據,音量上恢復,音量下不恢復"
get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch" get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch"
A=1
B="$(find "$Backup_folder2" -maxdepth 1 -name "*.tar*" -type f 2>/dev/null | wc -l)"
fi
if [[ -d $Backup_folder3 && $(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l) != 0 ]]; then
echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2" echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2"
notification --tag="105" --title="App恢復" --text="是否刷入Magisk模塊音量上刷入音量下不刷入" notification --tag="105" --title="App恢復" --text="是否刷入Magisk模塊音量上刷入音量下不刷入"
get_version "刷入模塊" "跳過刷入模塊" && modules_recovery="$branch" get_version "刷入模塊" "跳過刷入模塊" && modules_recovery="$branch"
fi
[[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || {
echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2" echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2"
get_version "忽略" "恢復" && Background_apps_ignore="$branch" get_version "忽略" "恢復" && Background_apps_ignore="$branch" ;;
2)
[[ $recovery_mode = "" ]] && {
Enter_options "選擇應用恢復模式\n -輸入1僅恢復未安裝0全恢復" "僅恢復未安裝" "全恢復" && isBoolean "$parameter" "recovery_mode" && recovery_mode="$nsx"
} || {
isBoolean "$recovery_mode" "recovery_mode" && recovery_mode="$nsx"
} }
Get_user="$(echo "$MODDIR" | rev | cut -d '/' -f1 | cut -d '_' -f1 | rev | egrep -o '[0-9]+')"
[[ $Get_user != $user ]] && {
[[ $recovery_mode2 = "" ]] && {
Enter_options "檢測當前用戶$user與恢復資料夾用戶:$Get_user不同輸入1繼續恢復0不恢復並離開腳本" "恢復安裝" "離開腳本" && isBoolean "$parameter" "recovery_mode2" && recovery_mode2="$nsx"
} || {
isBoolean "$recovery_mode2" "recovery_mode2" && recovery_mode2="$nsx"
}
}
[[ $media_recovery = "" ]] && {
Enter_options "是否恢復多媒體\n -輸入1僅恢復0不恢復" "恢復" "不恢復" && isBoolean "$parameter" "media_recovery" && media_recovery="$nsx"
} || {
isBoolean "$media_recovery" "media_recovery" && media_recovery="$nsx"
}
[[ $modules_recovery = "" ]] && {
Enter_options "是否刷入Magisk模塊\n -輸入1刷入 0不刷入" "刷入模塊" "跳過刷入模塊" && isBoolean "$parameter" "modules_recovery" && modules_recovery="$nsx"
} || {
isBoolean "$modules_recovery" "modules_recovery" && modules_recovery="$nsx"
}
[[ $Background_apps_ignore = "" ]] && {
Enter_options "存在進程忽略恢復\n -輸入1不恢復0恢復" "忽略" "恢復" && isBoolean "$parameter" "Background_apps_ignore" && Background_apps_ignore="$nsx"
} || {
isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx"
} ;;
*) echoRgb "$conf_path Lo=$Lo填寫錯誤正確值0 1 2" "0" && exit 2 ;;
esac
[[ $recovery_mode2 = false ]] && exit 2 [[ $recovery_mode2 = false ]] && exit 2
if [[ $recovery_mode = true ]]; then if [[ $recovery_mode = true ]]; then
echoRgb "獲取未安裝應用中" echoRgb "獲取未安裝應用中"
[[ $user = 0 ]] && Apk_info="$(appinfo -sort-i -o pn -3 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" || Apk_info="$(appinfo -sort-i -o pn $(pm list packages -3 --user "$user" | cut -f2 -d ':') 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" Apk_info="$(pm list packages -e --user "$user" | cut -f2 -d ':' | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
[[ $Apk_info = "" ]] && echoRgb "appinfo輸出失敗" "0" && exit 2 if [[ $Apk_info != "" ]]; then
[[ $Apk_info = *"Failure calling service package"* ]] && Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
else
Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
fi
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
while read -r ; do while read -r ; do
if [[ $(echo "$REPLY" | sed 's/^[ \t]*//') != \#* ]]; then if [[ $(echo "$REPLY" | sed 's/^[ \t]*//') != \#* ]]; then
app=($REPLY $REPLY) app=($REPLY $REPLY)
[[ ${app[1]} != "" && ${app[2]} != "" ]] && { [[ ${app[1]} != "" && ${app[2]} != "" ]] && {
[[ $(echo "$Apk_info" | egrep -w "^${app[1]}$") = "" ]] && Tmplist="$Tmplist\n$REPLY" [[ $(echo "$Apk_info" | egrep -o "${app[1]}") = "" ]] && Tmplist="$Tmplist\n$REPLY"
} }
fi fi
done < "$txt" done < "$txt"
@@ -2016,8 +2189,13 @@ Restore|Restore2)
if [[ $r != "" ]]; then if [[ $r != "" ]]; then
echoRgb "獲取完成 預計安裝$r個應用" echoRgb "獲取完成 預計安裝$r個應用"
txt="$Tmplist" txt="$Tmplist"
case $Lo in
0|1)
echoRgb "未安裝應用列表\n$txt\n確認無誤使用音量上繼續恢復音量下退出腳本" "1" echoRgb "未安裝應用列表\n$txt\n確認無誤使用音量上繼續恢復音量下退出腳本" "1"
get_version "恢復安裝" "退出腳本" get_version "恢復安裝" "退出腳本" ;;
2)
Enter_options "未安裝應用列表\n$txt\n-輸入1退出腳本0恢復" "退出腳本" "恢復安裝" isBoolean "$parameter" "branch" && branch="$nsx" ;;
esac
[[ $branch = false ]] && exit [[ $branch = false ]] && exit
else else
echoRgb "獲取完成 但備份內應用都已安裝....正在退出腳本" "0" && exit 0 echoRgb "獲取完成 但備份內應用都已安裝....正在退出腳本" "0" && exit 0
@@ -2065,8 +2243,8 @@ Restore|Restore2)
name2="$(echo "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" name2="$(echo "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
} }
else else
name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" name1="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
name2="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" name2="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
fi fi
notification --tag="105" --title="App恢復" --text="恢復 $name1 \"$name2\"" notification --tag="105" --title="App恢復" --text="恢復 $name1 \"$name2\""
unset No_backupdata apk_version Permissions unset No_backupdata apk_version Permissions
@@ -2080,7 +2258,6 @@ Restore|Restore2)
app_details="$Backup_folder/app_details.json" app_details="$Backup_folder/app_details.json"
else else
echoRgb "$Backup_folder/app_details.json不存在" "0" echoRgb "$Backup_folder/app_details.json不存在" "0"
exit 2
fi fi
[[ $name2 = "" ]] && echoRgb "應用包名獲取失敗" "0" && exit 1 [[ $name2 = "" ]] && echoRgb "應用包名獲取失敗" "0" && exit 1
fi fi
@@ -2098,12 +2275,12 @@ Restore|Restore2)
fi fi
if [[ $(pm path --user "$user" "$name2" 2>/dev/null) != "" ]]; then if [[ $(pm path --user "$user" "$name2" 2>/dev/null) != "" ]]; then
if [[ $No_backupdata = "" ]]; then if [[ $No_backupdata = "" ]]; then
[[ $name2 != *mt* ]] && {
kill_app kill_app
find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f 2>/dev/null | sort | while read; do find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f 2>/dev/null | sort | while read; do
Release_data "$REPLY" Release_data "$REPLY"
done done
unset G unset G
Set_service
restore_permissions restore_permissions
Ssaid="$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")" Ssaid="$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")"
if [[ $Ssaid != "" ]]; then if [[ $Ssaid != "" ]]; then
@@ -2121,6 +2298,7 @@ Restore|Restore2)
fi fi
unset Ssaid unset Ssaid
fi fi
}
fi fi
else else
[[ $No_backupdata = "" ]]&& echoRgb "$name1沒有安裝無法恢復數據" "0" [[ $No_backupdata = "" ]]&& echoRgb "$name1沒有安裝無法恢復數據" "0"
@@ -2146,10 +2324,10 @@ Restore|Restore2)
txt="$MODDIR/mediaList.txt" txt="$MODDIR/mediaList.txt"
sort -u "$txt" -o "$txt" 2>/dev/null sort -u "$txt" -o "$txt" 2>/dev/null
A=1 A=1
B="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')" 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 -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && B=0
while [[ $A -le $B ]]; do while [[ $A -le $B ]]; do
name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')" name1="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')"
starttime2="$(date -u "+%s")" starttime2="$(date -u "+%s")"
echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))" "3" echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))" "3"
Release_data "$Backup_folder2/$name1" Release_data "$Backup_folder2/$name1"
@@ -2178,7 +2356,6 @@ Restore|Restore2)
fi fi
let i++ en++ nskg++ let i++ en++ nskg++
done done
restore_freeze
Set_screen_pause_seconds off Set_screen_pause_seconds off
starttime1="$TIME" starttime1="$TIME"
[[ $background_execution = 2 ]] && app_process /system/bin io.github.qqlittleice233.magic.Notification -send --importance=3 --tag="105" --title="恢復" --text="恢復完成 $(endtime 1 "$DX開始到結束")" [[ $background_execution = 2 ]] && app_process /system/bin io.github.qqlittleice233.magic.Notification -send --importance=3 --tag="105" --title="恢復" --text="恢復完成 $(endtime 1 "$DX開始到結束")"
@@ -2190,9 +2367,14 @@ Restore|Restore2)
Restore3) Restore3)
kill_Serve kill_Serve
self_test self_test
case $Lo in
0|1)
echoRgb "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -音量上繼續恢復自定義資料夾,音量下離開腳本" "2" echoRgb "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -音量上繼續恢復自定義資料夾,音量下離開腳本" "2"
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0" echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0"
get_version "恢復自定義資料夾" "離開腳本" && [[ "$branch" = false ]] && exit 0 get_version "恢復自定義資料夾" "離開腳本" && [[ $branch = false ]] && exit 0 ;;
2)
Enter_options "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -輸入1繼續恢復自定義資料夾輸入0離開腳本" "恢復" "退出腳本" && isBoolean "$parameter" "branch" && branch="$nsx" && [[ $branch = false ]] && exit 0 ;;
esac
mediaDir="$MODDIR/Media" mediaDir="$MODDIR/Media"
[[ -f "$mediaDir/app_details.json" ]] && app_details="$mediaDir/app_details.json" [[ -f "$mediaDir/app_details.json" ]] && app_details="$mediaDir/app_details.json"
Backup_folder2="$mediaDir" Backup_folder2="$mediaDir"
@@ -2211,14 +2393,14 @@ Restore3)
} }
starttime1="$(date -u "+%s")" starttime1="$(date -u "+%s")"
A=1 A=1
B="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')" B="$(egrep -v '#|' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
Set_screen_pause_seconds off Set_screen_pause_seconds off
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && exit 1 [[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && exit 1
echo "$script">"$TMPDIR/scriptTMP" echo "$script">"$TMPDIR/scriptTMP"
{ {
notification --tag="108" --title="Media恢復" --text="Media恢復開始" notification --tag="108" --title="Media恢復" --text="Media恢復開始"
while [[ $A -le $B ]]; do while [[ $A -le $B ]]; do
name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')" name1="$(egrep -v '#|' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')"
starttime2="$(date -u "+%s")" starttime2="$(date -u "+%s")"
echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))" "3" echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))" "3"
Release_data "$mediaDir/$name1" Release_data "$mediaDir/$name1"
@@ -2238,20 +2420,27 @@ Getlist)
esac esac
#效驗選填是否正確 #效驗選填是否正確
isBoolean "$debug_list" "debug_list" && debug_list="$nsx" isBoolean "$debug_list" "debug_list" && debug_list="$nsx"
isBoolean "$Lo" "Lo" && Lo="$nsx" case $Lo in
if [[ $Lo = false ]]; then 0)
[[ $blacklist_mode != "" ]] && isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx" || { [[ $blacklist_mode != "" ]] && isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx" || {
echoRgb "選擇黑名單模式\n -音量上不備份,音量下僅備份安裝檔" "2" echoRgb "選擇黑名單模式\n -音量上不輸出,音量下輸出應用列表" "2"
get_version "不備份" "備份安裝檔" && blacklist_mode="$branch" get_version "不輸出" "輸出應用列表" && blacklist_mode="$branch"
} } ;;
else 1)
if [[ $(echo "$blacklist" | grep -v "#" | wc -l) -gt 0 ]]; then if [[ $(echo "$blacklist" | egrep -v '#|' | wc -l) -gt 0 ]]; then
[[ $blacklist_mode = "" ]] && { [[ $blacklist_mode = "" ]] && {
echoRgb "選擇黑名單模式\n -音量上不備份,音量下僅備份安裝檔" "2" echoRgb "選擇黑名單模式\n -音量上不輸出,音量下輸出應用列表" "2"
get_version "不備份" "備份安裝檔" && blacklist_mode="$branch" get_version "不輸出" "輸出應用列表" && blacklist_mode="$branch"
} || isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx" } || isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
fi fi ;;
fi 2)
[[ $blacklist_mode = "" ]] && {
Enter_options "選擇黑名單模式輸入1不輸出輸入0輸出應用列表" "不輸出" "輸出應用列表" && isBoolean "$parameter" "blacklist_mode" && blacklist_mode="$nsx"
} || {
isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
} ;;
*) echoRgb "$conf_path Lo=$Lo填寫錯誤正確值0 1 2" "0" && exit 2 ;;
esac
txtpath="$MODDIR" txtpath="$MODDIR"
[[ $debug_list = true ]] && txtpath="${txtpath/'/storage/emulated/'/'/data/media/'}" [[ $debug_list = true ]] && txtpath="${txtpath/'/storage/emulated/'/'/data/media/'}"
nametxt="$txtpath/appList.txt" nametxt="$txtpath/appList.txt"
@@ -2276,10 +2465,11 @@ Getlist)
rb="0" rb="0"
Output_list() { Output_list() {
if [[ $(cat "$nametxt" | cut -f2 -d ' ' | egrep -w "^${app_1[1]}$") != ${app_1[1]} ]]; then if [[ $(cat "$nametxt" | cut -f2 -d ' ' | egrep -w "^${app_1[1]}$") != ${app_1[1]} ]]; then
add_entry "${app_1[2]}" "${app_1[1]}" "$REPLY2"
case ${app_1[1]} in case ${app_1[1]} in
*oneplus* | *miui* | *xiaomi* | *oppo* | *flyme* | *meizu* | com.android.soundrecorder | com.mfashiongallery.emag | com.mi.health | *coloros*) *oneplus* | *miui* | *xiaomi* | *oppo* | *flyme* | *meizu* | com.android.soundrecorder | com.mfashiongallery.emag | com.mi.health | *coloros*)
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
echoRgb "${app_1[2]}為Xposed模塊 進行添加" "0" echoRgb "$app_name為Xposed模塊 進行添加" "0"
if [[ $REPLY2 = "" ]]; then if [[ $REPLY2 = "" ]]; then
REPLY2="$REPLY" && [[ $tmp = "" ]] && tmp="1" REPLY2="$REPLY" && [[ $tmp = "" ]] && tmp="1"
else else
@@ -2293,26 +2483,31 @@ Getlist)
else else
REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1" REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1"
fi fi
echoRgb "$REPLY($rgb_a)" echoRgb "$app_name ${app_1[1]}($rgb_a)"
let i++ let i++
else else
echoRgb "${app_1[2]} 預裝應用 忽略輸出" "0" echoRgb "$app_name 預裝應用 忽略輸出" "0"
if [[ $REPLY2 = "" ]]; then
REPLY2="#$REPLY" && [[ $tmp = "" ]] && tmp="1"
else
REPLY2="$REPLY2\n#$REPLY" && [[ $tmp = "" ]] && tmp="1"
fi
let rc++ let rc++
fi fi
fi fi
;; ;;
*) *)
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
echoRgb "Xposed: $REPLY($rgb_a)"
let rd++
else
echoRgb "$REPLY($rgb_a)"
fi
if [[ $REPLY2 = "" ]]; then if [[ $REPLY2 = "" ]]; then
REPLY2="$REPLY" && [[ $tmp = "" ]] && tmp="1" REPLY2="$REPLY" && [[ $tmp = "" ]] && tmp="1"
else else
REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1" REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1"
fi fi
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
echoRgb "Xposed: $app_name ${app_1[1]}($rgb_a)"
let rd++
else
echoRgb "$app_name ${app_1[1]}($rgb_a)"
fi
let i++ let i++
;; ;;
esac esac
@@ -2320,7 +2515,7 @@ Getlist)
let Q++ let Q++
fi fi
} }
[[ $(echo "$blacklist" | grep -v "#") != "" ]] && NZK=1 [[ $(echo "$blacklist" | egrep -v '#|') != "" ]] && NZK=1
echo "$Apk_info" | sed 's/\///g ; s/\://g ; s/(//g ; s/)//g ; s/\[//g ; s/\]//g ; s/\-//g ; s/!//g' | while read; do echo "$Apk_info" | sed 's/\///g ; s/\://g ; s/(//g ; s/)//g ; s/\[//g ; s/\]//g ; s/\-//g ; s/!//g' | while read; do
[[ $rgb_a -ge 229 ]] && rgb_a=118 [[ $rgb_a -ge 229 ]] && rgb_a=118
app_1=($REPLY $REPLY) app_1=($REPLY $REPLY)
@@ -2346,16 +2541,17 @@ Getlist)
echoRgb "\n -輸出異常 請將$conf_path中的debug_list=\"0\"改為1或是重新執行本腳本" "0" echoRgb "\n -輸出異常 請將$conf_path中的debug_list=\"0\"改為1或是重新執行本腳本" "0"
exit exit
fi fi
echoRgb "已經將預裝應用輸出至appList.txt並註釋# 需要備份則去掉#" "0"
[[ $tmp != "" ]] && echoRgb "\n -第三方apk數量=\"$Apk_Quantity\"\n -已過濾=\"$rc\"\n -xposed=\"$rd\"\n -黑名單應用=\"$rb\"\n -存在列表中=\"$Q\"\n -輸出=\"$i\"" [[ $tmp != "" ]] && echoRgb "\n -第三方apk數量=\"$Apk_Quantity\"\n -已過濾=\"$rc\"\n -xposed=\"$rd\"\n -黑名單應用=\"$rb\"\n -存在列表中=\"$Q\"\n -輸出=\"$i\""
fi fi
let rgb_a++ LR++ let rgb_a++ LR++
done done
if [[ -f $nametxt ]]; then if [[ -f $nametxt ]]; then
while read -r ; do while read -r ; do
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then
app=($REPLY $REPLY) app=($REPLY $REPLY)
if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then
if [[ $(echo "$Apk_info2" | egrep -w "^${app[1]}$") != "" ]]; then if [[ $(echo "$Apk_info2" | egrep -o "${app[1]}") != "" ]]; then
[[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market僅忽略數據' [[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market僅忽略數據'
Tmplist="$Tmplist\n$REPLY" Tmplist="$Tmplist\n$REPLY"
else else
@@ -2366,7 +2562,6 @@ Getlist)
Tmplist="$Tmplist\n$REPLY" Tmplist="$Tmplist\n$REPLY"
fi fi
done < "$nametxt" done < "$nametxt"
#echo "$Tmplist"
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$nametxt" [[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$nametxt"
fi fi
wait wait
@@ -2379,7 +2574,7 @@ backup_media)
backup_path backup_path
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0" echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0"
A=1 A=1
B="$(echo "$Custom_path" | grep -v "#" | awk 'NF != 0 { count++ } END { print count }')" B="$(echo "$Custom_path" | egrep -v '#|' | awk 'NF != 0 { count++ } END { print count }')"
if [[ $B != "" ]]; then if [[ $B != "" ]]; then
starttime1="$(date -u "+%s")" starttime1="$(date -u "+%s")"
Backup_folder="$Backup/Media" Backup_folder="$Backup/Media"

View File

@@ -1,6 +1,7 @@
if [ -f "${0%/*}/tools/tools.sh" ]; then if [ -f "${0%/*}/tools/tools.sh" ]; then
MODDIR="${0%/*}" MODDIR="${0%/*}"
operate="kill_script" operate="kill_script"
conf_path="${0%/*}/backup_settings.conf"
[[ $(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f 2>/dev/null) ]] && echo "警告!此腳本不能拿來更新腳本" && exit 2 [[ $(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f 2>/dev/null) ]] && echo "警告!此腳本不能拿來更新腳本" && exit 2
. "$MODDIR/tools/tools.sh" . "$MODDIR/tools/tools.sh"
echoRgb "等待腳本停止中,請稍後....." echoRgb "等待腳本停止中,請稍後....."