This commit is contained in:
Yawasau
2023-10-23 21:26:40 +08:00
parent b5255fed7a
commit b5663adf2e
2 changed files with 77 additions and 55 deletions

Binary file not shown.

View File

@@ -140,9 +140,7 @@ alias down="exec app_process /system/bin --nice-name=down han.core.order.Down $@
alias zstd="zstd -T0 -1 -q --priority=rt"
alias LS="toybox ls -Zd"
alias lz4="zstd -T0 -1 -q --priority=rt --format=lz4"
#curl -V
#export CLASSPATH="$bin_path/ActivityController.dex"
#app_process / Activity.Controller.Ctrl -s -n com.facebook.katana
[[ $1 = --help ]] && appinfo --help
#appinfo -o pn -u | while read; do
# cmd package install-existing "$REPLY"
#done
@@ -173,11 +171,11 @@ get_version() {
keycheck
case $? in
42)
branch=true
[[ $Select_user = true ]] && branch="$1" || branch=true
echoRgb "$1" "1"
;;
41)
branch=false
[[ $Select_user = true ]] && branch="$2" || branch=false
echoRgb "$2" "0"
;;
*)
@@ -243,7 +241,7 @@ else
UFS_MODEL="unknown"
fi
fi
Open_apps="$(appinfo -d "(" -ed ")" -o ands,pn -ta c 2>/dev/null)"
Open_apps="$(appinfo -d "(" -ed ")" -o anwb,pn -ta c 2>/dev/null)"
Open_apps2="$(echo "$Open_apps" | cut -f2 -d '(' | sed 's/)//g')"
echoRgb "---------------------SpeedBackup---------------------"
echoRgb "腳本路徑:$MODDIR\n -已開機:$(Show_boottime)\n -busybox路徑:$(which busybox)\n -busybox版本:$(busybox | head -1 | awk '{print $2}')\n -appinfo版本:$(appinfo --version)\n -腳本版本:$backup_version\n -Magisk版本:$(magisk -c 2>/dev/null)\n -設備架構:$abi\n -品牌:$(getprop ro.product.brand 2>/dev/null)\n -設備代號:$(getprop ro.product.device 2>/dev/null)\n -型號:$(getprop ro.product.model 2>/dev/null)\n -閃存類型:$ROM_TYPE\n -閃存顆粒:$UFS_MODEL\n -Android版本:$(getprop ro.build.version.release 2>/dev/null) SDK:$(getprop ro.build.version.sdk 2>/dev/null)\n -終端:$Open_apps\n -By@YAWAsau\n -Support: https://jq.qq.com/?_wv=1027&k=f5clPNC3"
@@ -389,8 +387,8 @@ update_script
zipFile="$(ls -t /storage/emulated/0/Download/*.zip 2>/dev/null | head -1)"
[[ $(unzip -l "$zipFile" 2>/dev/null | awk '{print $4}' | egrep -wo "^backup_settings.conf$") != "" ]] && update_script
case $operate in
backup|Restore|Restore2|Getlist)
user_id="$(ls -1 "/data/user" 2>/dev/null)"
backup|Restore|Restore2|Getlist|backup_media)
user_id="$(appinfo -listUsers)"
if [[ $user_id != "" ]]; then
echo "$user_id" | while read ; do
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
@@ -399,16 +397,25 @@ backup|Restore|Restore2|Getlist)
if [[ $user = "" ]]; then
if [[ $(echo "$user_id" | wc -l) != 1 ]]; then
echoRgb "設備存在多用戶,選擇操作目標用戶"
while true ;do
if [[ $option != "" ]]; then
user="$option"
break
else
echoRgb "請輸入需要操作目標分區" "1"
read option
fi
done
else
if [[ $(echo "$user_id" | wc -l) -le 2 ]]; then
user1="$(echo "$user_id" | sed -n '1p')"
user2="$(echo "$user_id" | sed -n '2p')"
echoRgb "音量上選擇用戶:$user1,音量下選擇用戶:$user2" "2"
Select_user="true"
get_version "$user1" "$user2" && user="$branch"
unset Select_user
else
while true ;do
if [[ $option != "" ]]; then
user="$option"
break
else
echoRgb "請輸入需要操作目標分區" "1"
read option
fi
done
fi
else
user="0"
fi
fi
@@ -416,17 +423,18 @@ backup|Restore|Restore2|Getlist)
path="/data/media/$user/Android"
path2="/data/user/$user"
[[ ! -d $path2 ]] && echoRgb "$user分區不存在請將上方提示的用戶id按照需求填入\n -$MODDIR_NAME/backup_settings.conf配置項user=,一次只能填寫一個" "0" && exit 2
export USER_ID="$user"
;;
esac
if [[ $(getprop ro.build.version.sdk) -lt 30 ]]; then
alias INSTALL="pm install --user $user -r -t &>/dev/null"
alias create="pm install-create --user $user -t &>/dev/null"
alias create="pm install-create --user $user -t 2>/dev/null"
else
alias INSTALL="pm install --user $user -r -t &>/dev/null"
alias create="pm install-create --user $user -t &>/dev/null"
alias INSTALL="pm install -i com.android.vending --user $user -r -t &>/dev/null"
alias create="pm install-create -i com.android.vending --user $user -t 2>/dev/null"
fi
case $operate in
Getlist|Restore2|Restore3|dumpname|check_file) ;;
Getlist|Restore2|Restore3|dumpname|check_file|backup_media|convert) ;;
*)
isBoolean "$Lo" "Lo" && Lo="$nsx"
if [[ $Lo = false ]]; then
@@ -595,22 +603,22 @@ Calculate_size() {
#計算出備份大小跟差異性
filesizee="$(du -s "$1" | awk '{print $1}')"
if [[ $(expr "$filesize" \> "$filesizee") -eq 0 ]]; then
NJK="+"
NJK="增加"
dsize="$(($((filesizee -filesize)) / 1024))"
else
NJK="-"
NJK="減少"
dsize="$(($((filesize-filesizee)) / 1024))"
fi
echoRgb "備份資料夾路徑↓↓↓\n -$1"
echoRgb "備份資料夾總體大小$(du -ksh "$1" | awk '{print $1}')"
if [[ $dsize -gt 0 ]]; then
if [[ $((dsize / 1000)) -gt 0 ]]; then
NJL="本次備份: $NJK$((dsize / 1000))gb"
NJL="本次備份$NJK: $((dsize / 1000))gb"
else
NJL="本次備份: $NJK${dsize}mb"
NJL="本次備份$NJK: ${dsize}mb"
fi
else
NJL="本次備份: $NJK$(($((filesizee - filesize)) * 1000 / 1024))kb"
NJL="本次備份$NJK: $(($((filesizee - filesize)) * 1000 / 1024))kb"
fi
echoRgb "$NJL"
}
@@ -636,13 +644,25 @@ partition_info() {
[[ $lxj -ge 97 ]] && echoRgb "$hx空間不足,達到$lxj%" "0" && exit 2
}
kill_app() {
[[ $Pause_Freeze = "" ]] && Pause_Freeze="0"
if [[ $name2 != $Open_apps2 ]]; then
pm suspend --user "$user" "$name2" 2>/dev/null | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: true/暫停狀態:凍結/g"
am force-stop --user "$user" "$name2"
if [[ $Pause_Freeze = 0 ]]; then
pm suspend --user "$user" "$name2" 2>/dev/null | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: true/暫停狀態:凍結/g"
am force-stop --user "$user" "$name2"
fi
Pause_Freeze="1"
fi
}
Set_service() {
pm unsuspend "$name2" 2>/dev/null | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: false/暫停狀態:解凍/g"
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 | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: false/暫停狀態:解凍/g"
done
}
Backup_apk() {
#檢測apk狀態進行備份
@@ -823,9 +843,6 @@ Backup_data() {
fi
[[ $Compression_method1 != "" ]] && Compression_method="$Compression_method1"
unset Compression_method1
case $1 in
user|data|obb) Set_service ;;
esac
else
echoRgb "$1數據無發生變化 跳過備份" "2"
fi
@@ -1035,7 +1052,7 @@ get_name(){
echo_log "${REPLY##*/}解壓縮"
if [[ $result = 0 ]]; then
if [[ -f $TMPDIR/base.apk ]]; then
DUMPAPK="$(appinfo -sort-i -d " " -o ands,pn -f "$TMPDIR/base.apk")"
DUMPAPK="$(appinfo -sort-i -d " " -o anwb,pn -f "$TMPDIR/base.apk")"
if [[ $DUMPAPK != "" ]]; then
app=($DUMPAPK $DUMPAPK)
PackageName="${app[1]}"
@@ -1199,13 +1216,15 @@ backup)
while [[ $D -le $C ]]; do
name1="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${D}p" | awk '{print $1}')"
name2="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${D}p" | awk '{print $2}')"
if [[ $(echo "$Apk_info" | egrep -w "^$name2$") = "" ]]; then
echoRgb "$name1不存在系統,從列表中刪除" "0"
echo "$(sed -e "s/$name1 $name2//g ; /^$/d" "$txt")" >"$Tmplist"
if [[ $(echo "$Apk_info" | egrep -w "^$name2$") != "" ]]; then
[[ ! -f $Tmplist ]] && echo '#不需要備份的應用請在開頭注釋# 比如#酷安 xxxxxxxx\n#不需要備份數據比如!酷安 xxxxxxxx應用名前方方加一個驚嘆號即可 注意是應用名不是包名' >"$Tmplist"
echo "$name1 $name2">>"$Tmplist"
else
echoRgb "$name1 $name2不存在系統,從列表中刪除" "0"
fi
let D++
done
[[ -f $Tmplist ]] && mv "$Tmplist" "$txt"
[[ -f $Tmplist ]] && sed -e '/^$/d' "$Tmplist" | sort>"$txt" && rm -rf "$Tmplist"
r="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n '$=')"
[[ $1 != "" ]] && r=1
[[ $r = "" ]] && echoRgb "$MODDIR_NAME/appList.txt是空的或是包名被注釋備份個鬼\n -檢查是否注釋亦或者執行$MODDIR_NAME/生成應用列表.sh" "0" && exit 1
@@ -1229,6 +1248,7 @@ backup)
[[ $filesha256 != $filesha256_1 ]] && cp -r "$bin_path/tools.sh" "$Backup/tools/bin/tools.sh"
filesize="$(du -s "$Backup" | awk '{print $1}')"
Quantity=0
restore_freeze
#開始循環$txt內的資料進行備份
#記錄開始時間
starttime1="$(date -u "+%s")"
@@ -1245,13 +1265,8 @@ backup)
while [[ $i -le $r ]]; do
[[ $en -ge 229 ]] && en=118
unset name1 name2 apk_path apk_path2
if [[ $1 != "" ]]; then
name1="$(appinfo -sort-i -d " " -o ands -pn "$1")"
name2="$1"
else
name1="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
name2="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
fi
name1="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
name2="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
[[ $name2 = "" ]] && echoRgb "警告! appList.txt應用包名獲取失敗可能修改有問題" "0" && exit 1
apk_path="$(pm path --user "$user" "$name2" 2>/dev/null | cut -f2 -d ':')"
apk_path2="$(echo "$apk_path" | head -1)"
@@ -1301,6 +1316,7 @@ backup)
[[ $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 = moe.shizuku.redirectstorage ]] && Backup_data "storage-isolation" "/data/adb/storage-isolation"
Set_service
fi
endtime 2 "$name1 備份" "3"
Occupation_status="$(df -h "${Backup%/*}" | sed -n 's|% /.*|%|p' | awk '{print $(NF-1),$(NF)}')"
@@ -1329,7 +1345,7 @@ backup)
ime enable "$keyboard" &>/dev/null
ime set "$keyboard" &>/dev/null
settings put secure default_input_method "$keyboard" &>/dev/null
echo_log "設置鍵盤$(appinfo -d "(" -ed ")" -o ands,pn -pn "${keyboard%/*}" 2>/dev/null)"
echo_log "設置鍵盤$(appinfo -d "(" -ed ")" -o anwb,pn -pn "${keyboard%/*}" 2>/dev/null)"
fi
[[ $update_apk2 = "" ]] && update_apk2="暫無更新"
[[ $add_app2 = "" ]] && add_app2="暫無更新"
@@ -1370,6 +1386,7 @@ backup)
fi
let i++ en++ nskg++
done
restore_freeze
rm -rf "$TMPDIR/scriptTMP"
Calculate_size "$Backup"
echoRgb "批量備份完成"
@@ -1385,7 +1402,7 @@ backup)
pkg="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
name1="$(grep -v "#" "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
if [[ $(echo "$pkg" | egrep -wo "^$am_start$") = $pkg ]]; then
am start -n "$(appinfo -sort-i -d "/" -o pn,sa -pn "$pkg" 2>/dev/null)" &>/dev/null
am start -n "$(appinfo -o sa -pn "$pkg" 2>/dev/null)" &>/dev/null
echo_log "啟動$name1"
fi
let i++
@@ -1496,8 +1513,7 @@ Restore)
fi
if [[ $(pm path --user "$user" "$name2" 2>/dev/null) != "" ]]; then
if [[ $No_backupdata = "" ]]; then
#停止應用
kill_app
kill_app
find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f 2>/dev/null | sort | while read; do
Release_data "$REPLY"
done
@@ -1549,6 +1565,7 @@ Restore)
fi
let i++ en++ nskg++
done
restore_freeze
rm -rf "$TMPDIR/scriptTMP" "$TXT"
starttime1="$TIME"
echoRgb "批量恢複完成" && endtime 1 "批量恢複開始到結束" && echoRgb "如發現應用閃退請重新開機"
@@ -1593,7 +1610,6 @@ Restore2)
fi
fi
if [[ $(pm path --user "$user" "$name2" 2>/dev/null) != "" ]]; then
#停止應用
kill_app
find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f 2>/dev/null | sort | while read; do
Release_data "$REPLY"
@@ -1602,6 +1618,7 @@ Restore2)
else
echoRgb "$name1沒有安裝無法恢復數據" "0"
fi
restore_freeze
endtime 1 "恢複開始到結束" && echoRgb "如發現應用閃退請重新開機" && rm -rf "$TMPDIR"/*
rm -rf "$TMPDIR/scriptTMP"
wait && exit
@@ -1663,8 +1680,11 @@ Getlist)
starttime1="$(date -u "+%s")"
echoRgb "提示!因為系統自帶app(位於data分區或是可卸載預裝應用)備份恢復可能存在問題\n -所以不會輸出..但是檢測為Xposed類型包名將輸出\n -如果提示不是Xposed但他就是Xposed可能為此應用元數據不符合規範導致" "0"
xposed_name="$(appinfo -o pn -xm)"
[[ $user = 0 ]] && Apk_info="$(appinfo -sort-i -d " " -o addXpTag:'Xposed: ',ands,pn -pn $system -3 | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" || Apk_info="$(appinfo -sort-i -d " " -o addXpTag:'Xposed 'ands,pn -pn $system $(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 || Apk_info="$(echo "$Apk_info" | sed 's/Xposed: //g')" && Apk_info2="$(echo "$Apk_info" | awk '{print $2}')"
Apk_info="$(appinfo -sort-i -d " " -o addXpTag:'Xposed: ',anwb,pn -pn $system -3 | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
[[ $Apk_info = "" ]] && {
echoRgb "appinfo輸出失敗,請截圖畫面回報作者" "0"
appinfo -sort-i -d " " -o addXpTag:'Xposed: ',anwb,pn -pn $system -3 | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u
exit 2 ; } || Apk_info="$(echo "$Apk_info" | sed 's/Xposed: //g')" && Apk_info2="$(echo "$Apk_info" | awk '{print $2}')"
Apk_Quantity="$(echo "$Apk_info" | wc -l)"
LR="1"
echoRgb "列出第三方應用......." "2"
@@ -1724,9 +1744,11 @@ Getlist)
while [[ $D -le $C ]]; do
name1="$(grep -v "#" "$nametxt" | sed -e '/^$/d' | sed -n "${D}p" | awk '{print $1}')"
name2="$(grep -v "#" "$nametxt" | sed -e '/^$/d' | sed -n "${D}p" | awk '{print $2}')"
if [[ $(echo "$Apk_info2" | egrep -w "^$name2$") = "" ]]; then
echoRgb "$name1 $name2不存在系統,從列表中刪除" "0"
echo "$(sed -e "s/$name1 $name2//g" "$nametxt")" >"$Tmplist"
if [[ $(echo "$Apk_info2" | egrep -w "^$name2$") != "" ]]; then
[[ ! -f $Tmplist ]] && echo '#不需要備份的應用請在開頭注釋# 比如#酷安 xxxxxxxx\n#不需要備份數據比如!酷安 xxxxxxxx應用名前方方加一個驚嘆號即可 注意是應用名不是包名' >"$Tmplist"
echo "$name1 $name2">>"$Tmplist"
else
echoRgb "$name1 $name2不存在系統,從列表中刪除" "0"
fi
let D++
done