diff --git a/tools/apk/Message.apk b/tools/apk/Message.apk new file mode 100644 index 0000000..0ff0025 Binary files /dev/null and b/tools/apk/Message.apk differ diff --git a/tools/bin/tools.sh b/tools/bin/tools.sh index ebdcf54..6a600b2 100644 --- a/tools/bin/tools.sh +++ b/tools/bin/tools.sh @@ -67,7 +67,7 @@ else echo "Magisk busybox Path does not exist" fi export PATH="$PATH" -backup_version="V15.7.0" +backup_version="V15.7.1" #bin_path="${bin_path/'/storage/emulated/'/'/data/media/'}" filepath="/data/backup_tools" busybox="$filepath/busybox" @@ -129,7 +129,8 @@ TMPDIR="/data/local/tmp" if [[ $(which busybox) = "" ]]; then echoRgb "環境變量中沒有找到busybox 請在tools/bin內添加一個\narm64可用的busybox\n或是安裝搞機助手 scene或是Magisk busybox模塊...." "0" exit 1 -elif [[ $(which toybox | egrep -o "system") != system ]]; then +fi +if [[ $(which toybox | egrep -o "system") != system ]]; then echoRgb "環境變量中沒有找到toybox" "0" exit 1 fi @@ -636,7 +637,7 @@ Backup_apk() { apk_version2="$(pm list packages --show-versioncode --user "$user" "$name2" 2>/dev/null | cut -f3 -d ':' | head -n 1)" apk_version3="$(dumpsys package "$name2" 2>/dev/null | awk '/versionName=/{print $1}' | cut -f2 -d '=' | head -1)" if [[ $apk_version = $apk_version2 ]]; then - [[ $(cat "$txt2" | grep -v "#" | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2" + [[ $(cat "$txt2" | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2" unset xb let osj++ result=0 @@ -684,7 +685,7 @@ Backup_apk() { lz4 | Lz4 | LZ4) Validation_file "$Backup_folder/apk.tar.lz4" ;; esac if [[ $result = 0 ]]; then - [[ $(cat "$txt2" | grep -v "#" | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2" + [[ $(cat "$txt2" | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2" if [[ $apk_version = "" ]]; then echo "apk_version=\"$apk_version2\"" >>"$app_details" else @@ -730,14 +731,17 @@ Backup_data() { data) Size="$dataSize" ;; obb) Size="$obbSize" ;; *) - [[ -f $app_details ]] && Size="$(cat "$app_details" | awk "/$1Size/"'{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g')" + if [[ -f $app_details ]]; then + Size="$(cat "$app_details" | awk "/$1Size/"'{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g')" + mediapath="$(cat "$app_details" | awk "/$1mediapath/"'{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g')" + fi data_path="$2" if [[ $1 != storage-isolation && $1 != thanox ]]; then Compression_method1="$Compression_method" Compression_method=tar - [[ -d $data_path ]] && echo "$2" >"$2/PATH" fi zsize=1 + zmediapath=1 ;; esac if [[ -d $data_path ]]; then @@ -778,7 +782,6 @@ Backup_data() { esac if [[ $result = 0 ]]; then if [[ $zsize != "" ]]; then - rm -rf "$2/PATH" if [[ $Size != "" ]]; then echo "$(cat "$app_details" | sed "s/$Size/$Filesize/g")">"$app_details" else @@ -791,6 +794,11 @@ Backup_data() { echo "$1Size=\"$Filesize\"" >>"$app_details" fi fi + if [[ $zmediapath != "" ]]; then + if [[ $mediapath = "" ]]; then + echo "#$1mediapath=\"$2\"" >>"$app_details" + fi + fi else rm -rf "$Backup_folder/$1".tar.* fi @@ -831,11 +839,9 @@ Release_data() { *) if [[ $A != "" ]]; then if [[ ${MODDIR_NAME##*/} = Media ]]; then - case ${FILE_NAME##*.} in - tar) tar -xpf "$tar_path" -C "$TMPDIR" --wildcards --no-anchored 'PATH' && FILE_PATH="$(cat "$TMPDIR/$FILE_NAME2/PATH" 2>/dev/null)" ;; - esac + FILE_PATH="$(cat "$app_details" | awk "/${FILE_NAME2}mediapath/"'{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g')" if [[ $FILE_PATH = "" ]]; then - echoRgb "解壓路徑獲取失敗" "0" + echoRgb "路徑獲取失敗" "0" else echoRgb "解壓路徑↓\n -$FILE_PATH" "2" TMPPATH="$FILE_PATH" @@ -1182,6 +1188,7 @@ backup) [[ ! -f $Backup/重新生成應用列表.sh ]] && cp -r "$script_path/Get_DirName" "$Backup/重新生成應用列表.sh" [[ ! -f $Backup/轉換資料夾名稱.sh ]] && cp -r "$script_path/convert" "$Backup/轉換資料夾名稱.sh" [[ ! -f $Backup/壓縮檔完整性檢查.sh ]] && cp -r "$script_path/check_file" "$Backup/壓縮檔完整性檢查.sh" + [[ ! -d $Backup/modules ]] && mkdir -p "$Backup/modules" && echoRgb "$Backup/modules已創建成功\n -請按需要自行放置需要恢復時刷入的模塊在內將自動批量刷入" "1" [[ -d $Backup/Media ]] && cp -r "$script_path/restore3" "$Backup/恢復自定義資料夾.sh" [[ ! -f $Backup/backup_settings.conf ]] && echo "#1開啟0關閉\n\n#是否在每次執行恢復腳本時使用音量鍵詢問如下需求\n#如果是那下面兩項項設置就被忽略,改為音量鍵選擇\nLo=$Lo\n\n#備份與恢復遭遇異常或是結束後發送通知(toast與狀態欄提示)\ntoast_info=$toast_info\n\n#使用者\nuser=\n\n#腳本檢測更新後進行更新?\nupdate=$update\n\n#檢測到更新後的行為(1跳轉瀏覽器 0不跳轉瀏覽器,但是複製連結到剪裁版)\nupdate_behavior=$update_behavior\n\n#恢復模式(1僅恢復未安裝應用0全恢復)\nrecovery_mode=0\n\n#主色\nrgb_a=$rgb_a\n#輔色\nrgb_b=$rgb_b\nrgb_c=$rgb_c">"$Backup/backup_settings.conf" && echo "$(sed 's/true/1/g ; s/false/0/g' "$Backup/backup_settings.conf")">"$Backup/backup_settings.conf" filesha256="$(sha256sum "$bin_path/tools.sh" | cut -d" " -f1)" @@ -1219,7 +1226,7 @@ backup) if [[ -d $apk_path2 ]]; then echoRgb "備份第$i/$r個應用 剩下$((r - i))個" "3" echoRgb "備份 $name1 \"$name2\"" "2" - unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version versionName apk_version2 apk_version3 zsize Size data_path userSize dataSize obbSize + unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version versionName apk_version2 apk_version3 zsize zmediapath Size data_path userSize dataSize obbSize if [[ $name1 = !* || $name1 = !* ]]; then name1="$(echo "$name1" | sed 's/!//g ; s/!//g')" echoRgb "跳過備份所有數據" "0" @@ -1234,7 +1241,7 @@ backup) if [[ -f $app_details ]]; then . "$app_details" &>/dev/null if [[ $PackageName != $name2 ]]; then - unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version versionName apk_version2 apk_version3 zsize Size data_path userSize dataSize obbSize + unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version versionName apk_version2 apk_version3 zsize zmediapath Size data_path userSize dataSize obbSize Backup_folder="$Backup/${name1}[${name2}]" app_details="$Backup_folder/app_details" [[ -f $app_details ]] && . "$app_details" &>/dev/null @@ -1245,6 +1252,8 @@ backup) [[ $name2 = com.tencent.mobileqq ]] && echoRgb "QQ可能恢復備份失敗或是丟失聊天記錄,請自行用你信賴的應用備份" "0" [[ $name2 = com.tencent.mm ]] && echoRgb "WX可能恢復備份失敗或是丟失聊天記錄,請自行用你信賴的應用備份" "0" apk_number="$(echo "$apk_path" | wc -l)" + #停止應用 + [[ $name2 != $Open_apps2 ]] && am force-stop --user "$user" "$name2" if [[ $apk_number = 1 ]]; then Backup_apk "非Split Apk" "3" else @@ -1295,6 +1304,7 @@ backup) [[ $add_app2 = "" ]] && add_app2="暫無更新" echoRgb "\n -已更新的apk=\"$osn\"\n -已新增的備份=\"$osk\"\n -apk版本號無變化=\"$osj\"\n -下列為版本號已變更的應用\n$update_apk2\n -新增的備份....\n$add_app2" "3" echo "$(sort "$txt2" | sed -e '/^$/d')" >"$txt2" + if [[ $backup_media = true ]]; then A=1 B="$(echo "$Custom_path" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')" @@ -1305,14 +1315,14 @@ backup) [[ ! -f $Backup/恢復自定義資料夾.sh ]] && cp -r "$script_path/restore3" "$Backup/恢復自定義資料夾.sh" [[ ! -d $Backup_folder ]] && mkdir -p "$Backup_folder" app_details="$Backup_folder/app_details" - [[ -f $app_details ]] && . "$app_details" &>/dev/null + [[ -f $app_details ]] && . "$app_details" &>/dev/null || touch "$app_details" mediatxt="$Backup/mediaList.txt" [[ ! -f $mediatxt ]] && echo "#不需要恢復的資料夾請在開頭注釋# 比如#媒體" > "$mediatxt" echo "$Custom_path" | grep -v "#" | sed -e '/^$/d' | while read; do echoRgb "備份第$A/$B個資料夾 剩下$((B - A))個" "3" starttime2="$(date -u "+%s")" Backup_data "${REPLY##*/}" "$REPLY" - [[ $result = 0 ]] && [[ $(cat "$mediatxt" | grep -v "#" | sed -e '/^$/d' | grep -w "^${REPLY##*/}.tar$" | head -1) = "" ]] && echo "${REPLY##*/}.tar" >> "$mediatxt" + [[ $result = 0 ]] && [[ $(cat "$mediatxt" | sed -e '/^$/d' | grep -w "${REPLY##*/}.tar$" | head -1) = "" ]] && echo "${REPLY##*/}.tar" >> "$mediatxt" endtime 2 "${REPLY##*/}備份" "1" echoRgb "完成$((A * 100 / B))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$1"使用率:"$2}')" "2" rgb_d="$rgb_a" @@ -1374,6 +1384,8 @@ Restore) sort -u "$txt" -o "$txt" 2>/dev/null r="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')" [[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 1 + Backup_folder2="$MODDIR/Media" + Backup_folder3="$MODDIR/modules" #效驗選填是否正確 isBoolean "$Lo" "Lo" && Lo="$nsx" if [[ $Lo = false ]]; then @@ -1387,6 +1399,20 @@ Restore) echoRgb "檢測當前用戶$user與恢復資料夾用戶:$Get_user不同\n -音量上繼續恢復,下不恢復並離開腳本" get_version "恢復安裝" "不恢復安裝" && recovery_mode2="$branch" fi + if [[ -d $Backup_folder2 ]]; then + Print "是否恢復多媒體數據 音量上恢復,音量下不恢復" + echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2" + 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 + Print "是否刷入Magisk模塊 音量上刷入,音量下不刷入" + echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2" + get_version "刷入模塊" "跳過刷入模塊" + modules_recovery="$branch" + fi [[ $recovery_mode2 = false ]] && exit 2 if [[ $recovery_mode = true ]]; then echoRgb "獲取未安裝應用中" @@ -1429,7 +1455,6 @@ Restore) No_backupdata=1 fi Backup_folder="$MODDIR/$name1" - Backup_folder2="$MODDIR/Media" [[ -f "$Backup_folder/app_details" ]] && app_details="$Backup_folder/app_details" . "$Backup_folder/app_details" &>/dev/null [[ $name2 = "" ]] && echoRgb "應用包名獲取失敗" "0" && exit 1 if [[ -d $Backup_folder ]]; then @@ -1445,6 +1470,8 @@ Restore) fi if [[ $(pm path --user "$user" "$name2" 2>/dev/null) != "" ]]; then if [[ $No_backupdata = "" ]]; then + #停止應用 + [[ $name2 != $Open_apps2 ]] && am force-stop --user "$user" "$name2" find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f 2>/dev/null | sort | while read; do Release_data "$REPLY" done @@ -1461,24 +1488,36 @@ Restore) echoRgb "$Backup_folder資料夾遺失,無法恢複" "0" fi if [[ $i = $r ]]; then - endtime 1 "應用恢復" "2" - if [[ -d $Backup_folder2 ]]; then - Print "是否恢復多媒體數據 音量上恢復,音量下不恢復" - echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2" - get_version "恢復媒體數據" "跳過恢復媒體數據" - starttime1="$(date -u "+%s")" - app_details="$Backup_folder2/app_details" - A=1 - B="$(find "$Backup_folder2" -maxdepth 1 -name "*.tar*" -type f 2>/dev/null | wc -l)" - if [[ $branch = true ]]; then - find "$Backup_folder2" -maxdepth 1 -name "*.tar*" -type f 2>/dev/null | while read; do - starttime2="$(date -u "+%s")" - echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))個" "3" - Release_data "$REPLY" - endtime 2 "$FILE_NAME2恢複" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++ - done - endtime 1 "自定義恢復" "2" - fi + endtime 1 "應用恢復" "2" + if [[ $media_recovery = true ]]; then + starttime1="$(date -u "+%s")" + app_details="$Backup_folder2/app_details" + txt="$MODDIR/mediaList.txt" + sort -u "$txt" -o "$txt" 2>/dev/null + A=1 + B="$(cat "$txt" 2>/dev/null | grep -v "#" | sed -e '/^$/d' | sed -n '$=')" + [[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && B=0 + while [[ $A -le $B ]]; do + name1="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')" + starttime2="$(date -u "+%s")" + echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))個" "3" + Release_data "$Backup_folder2/$name1" + endtime 2 "$FILE_NAME2恢複" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++ + done + endtime 1 "自定義恢復" "2" + fi + if [[ $modules_recovery = true ]]; then + A=1 + B="$(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l)" + starttime1="$(date -u "+%s")" + find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | while read; do + starttime2="$(date -u "+%s")" + echoRgb "刷入第$A/$B個模塊 剩下$((B - A))個" "3" + echoRgb "刷入${REPLY##*/}" "2" + magisk --install-module "$REPLY" + endtime 2 "${REPLY##*/}刷入" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++ + done + endtime 1 "刷入模塊" "2" fi fi let i++ en++ nskg++ @@ -1527,6 +1566,8 @@ Restore2) fi fi if [[ $(pm path --user "$user" "$name2" 2>/dev/null) != "" ]]; then + #停止應用 + [[ $name2 != $Open_apps2 ]] && am force-stop --user "$user" "$name2" find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f 2>/dev/null | sort | while read; do Release_data "$REPLY" done @@ -1692,7 +1733,7 @@ backup_media) starttime2="$(date -u "+%s")" [[ ${REPLY: -1} = / ]] && REPLY="${REPLY%?}" Backup_data "${REPLY##*/}" "$REPLY" - [[ $result = 0 ]] && [[ $(cat "$mediatxt" | grep -v "#" | sed -e '/^$/d' | grep -w "^${REPLY##*/}.tar$" | head -1) = "" ]] && echo "${REPLY##*/}.tar" >> "$mediatxt" + [[ $result = 0 ]] && [[ $(cat "$mediatxt" | sed -e '/^$/d' | grep -w "${REPLY##*/}.tar$" | head -1) = "" ]] && echo "${REPLY##*/}.tar" >> "$mediatxt" endtime 2 "${REPLY##*/}備份" "1" echoRgb "完成$((A * 100 / B))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$1"使用率:"$2}')" "2" && echoRgb "____________________________________" && let A++ done