diff --git a/tools/bin/classes.dex b/tools/bin/classes.dex index 0bd4eb4..ca48b03 100644 Binary files a/tools/bin/classes.dex and b/tools/bin/classes.dex differ diff --git a/tools/bin/tools.sh b/tools/bin/tools.sh index 56442f4..5f41a1e 100644 --- a/tools/bin/tools.sh +++ b/tools/bin/tools.sh @@ -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