diff --git a/backup_settings.conf b/backup_settings.conf index 4f008a7..6dc7eba 100644 --- a/backup_settings.conf +++ b/backup_settings.conf @@ -16,7 +16,7 @@ Splist=0 Backup_user_data=1 #是否備份外部數據 即比如原神的數據包(1備份0不備份) -Backup_obb_data=1 +Backup_obb_data=0 #是否在應用數據備份好後備份自定義目錄 backup_media=0 diff --git a/tools/bin/appinfo.dex b/tools/bin/appinfo.dex index c8ee5c9..92ad9e7 100644 Binary files a/tools/bin/appinfo.dex and b/tools/bin/appinfo.dex differ diff --git a/tools/bin/bin.sh b/tools/bin/bin.sh index 3e5d81a..354fbdc 100644 --- a/tools/bin/bin.sh +++ b/tools/bin/bin.sh @@ -112,6 +112,8 @@ echoRgb() { echo -e "\e[38;5;82m -$1\e[0m" elif [[ $2 = 2 ]]; then echo -e "\e[38;5;87m -$1\e[0m" + elif [[ $2 = 3 ]]; then + echo -e "\e[38;5;${en}m -$1\e[0m" else echo -e "\e[38;5;${bn}m -$1\e[0m" fi diff --git a/tools/script/recover.conf b/tools/script/recover.conf new file mode 100644 index 0000000..2705fa5 --- /dev/null +++ b/tools/script/recover.conf @@ -0,0 +1,2 @@ +#恢復模式 1恢復Apk+數據 0恢復apk不恢復數據 +Recovery_mode=1 \ No newline at end of file diff --git a/tools/script/restore b/tools/script/restore index b8d1842..aefcca1 100644 --- a/tools/script/restore +++ b/tools/script/restore @@ -2,7 +2,11 @@ MODDIR="${0%/*}" bin_path="$MODDIR/tools/bin" [[ ! -d $bin_path ]] && echo "$bin_path目錄遺失" && exit 1 +[[ ! -f $MODDIR/recover.conf ]] && echo "recover.conf遺失" && exit 1 . "$bin_path/bin.sh" +. "$MODDIR/recover.conf" +isBoolean "$Recovery_mode" && Recovery_mode="$nsx" +[[ $Recovery_mode = false ]] && echoRgb "當前恢復模式:安裝apk不恢復數據" "0" || echoRgb "當前恢復模式:安裝apk+恢復數據" "1" path="/data/media/0/Android" path2="/data/data" [[ ! -d $TMPDIR ]] && mkdir "$TMPDIR" @@ -91,10 +95,10 @@ starttime1="$(date -u "+%s")" TIME="$starttime1" #記錄error次數起點 ERROR=1 +en=118 { while [[ $i -le $r ]]; do - #let bn++ - #[[ $bn -ge 37 ]] && bn=31 + [[ $en -ge 229 ]] && en=118 echoRgb "恢複第$i個應用 總共$r個 剩下$((r-i))個應用" name1="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" name2="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" @@ -147,16 +151,18 @@ while [[ $i -le $r ]]; do else echoRgb "存在當前系統中略過安裝Apk" fi - if [[ $(pm path "$name2") != "" ]]; then - #停止應用 - [[ $name2 != $Open_apps ]] && am force-stop "$name2" - find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f | sort | while read; do - Release_data "$REPLY" - done - else - echoRgb "$name1沒有安裝無法恢復數據" "0" + if [[ $Recovery_mode = true ]]; then + if [[ $(pm path "$name2") != "" ]]; then + #停止應用 + [[ $name2 != $Open_apps ]] && am force-stop "$name2" + find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f | sort | while read; do + Release_data "$REPLY" + done + else + echoRgb "$name1沒有安裝無法恢復數據" "0" + fi fi - endtime 2 "恢複" && echoRgb "完成$((i*100/r))%" && echoRgb + endtime 2 "恢複" && echoRgb "完成$((i*100/r))%" && echoRgb "____________________________________" "3" else echoRgb "$Backup_folder資料夾遺失,無法恢複" "0" fi @@ -179,7 +185,7 @@ while [[ $i -le $r ]]; do fi fi [[ $ERROR -ge 5 ]] && (echoRgb "錯誤次數達到上限 環境已重設\n -請重新執行腳本" "0" && rm -rf "$filepath" && exit) - let i++ + let i++ en++ done starttime1="$TIME" echoRgb "批量恢複完成" && endtime 1 "批量恢複開始到結束" && echoRgb "應用閃退請重新開機" "0" diff --git a/tools/script/restore2 b/tools/script/restore2 index 97f34db..f78732e 100644 --- a/tools/script/restore2 +++ b/tools/script/restore2 @@ -2,7 +2,11 @@ MODDIR="${0%/*}" bin_path="${MODDIR%/*}/tools/bin" [[ ! -d $bin_path ]] && echo "$bin_path目錄遺失" && exit 1 +[[ ! -f $MODDIR/recover.conf ]] && echo "recover.conf遺失" && exit 1 +. "$MODDIR/recover.conf" . "$bin_path/bin.sh" +isBoolean "$Recovery_mode" && Recovery_mode="$nsx" +[[ $Recovery_mode = false ]] && echoRgb "當前恢復模式:安裝apk不恢復數據" "0" || echoRgb "當前恢復模式:安裝apk+恢復數據" "1" path="/data/media/0/Android" path2="/data/data" [[ ! -d $TMPDIR ]] && mkdir "$TMPDIR" @@ -71,63 +75,65 @@ if [[ $(pm path "$name") = "" ]]; then else echoRgb "存在當前系統中略過安裝Apk" fi -if [[ $(pm path "$name") != "" ]]; then - #停止應用 - [[ $name != $Open_apps ]] && am force-stop "$name" - find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f | sort | while read; do - tar_path="$REPLY" - X="$path2/$name" - FILE_NAME="${tar_path##*/}" - FILE_NAME2="${FILE_NAME%%.*}" - echoRgb "恢復$FILE_NAME2數據" "2" - if [[ $FILE_NAME2 = user ]]; then - if [[ -d $X ]]; then - case ${FILE_NAME##*.} in - lz4) pv "$tar_path" | tar --recursive-unlink -I lz4 -xmpf - -C "$path2" ;; - zst) pv "$tar_path" | tar --recursive-unlink -I zstd -xmpf - -C "$path2" ;; - tar) pv "$tar_path" | tar --recursive-unlink -xmpf - -C "$path2" ;; - *) echoRgb "$FILE_NAME 壓縮包不支持解壓縮" "0" ; Set_back - esac - else - echoRgb "$X不存在 無法恢復$FILE_NAME2數據" "0" ; Set_back - fi - else - case ${FILE_NAME##*.} in - lz4) pv "$tar_path" | tar --recursive-unlink -I lz4 -xmPpf - ;; - zst) pv "$tar_path" | tar --recursive-unlink -I zstd -xmPpf - ;; - tar) pv "$tar_path" | tar --recursive-unlink -xmPpf - ;; - *) echoRgb "$FILE_NAME 壓縮包不支持解壓縮" "0" ; Set_back - esac - fi - echo_log "$FILE_NAME 解壓縮($FILE_NAME2)" - if [[ $result = 0 ]]; then +if [[ $Recovery_mode = true ]]; then + if [[ $(pm path "$name") != "" ]]; then + #停止應用 + [[ $name != $Open_apps ]] && am force-stop "$name" + find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f | sort | while read; do + tar_path="$REPLY" + X="$path2/$name" + FILE_NAME="${tar_path##*/}" + FILE_NAME2="${FILE_NAME%%.*}" + echoRgb "恢復$FILE_NAME2數據" "2" if [[ $FILE_NAME2 = user ]]; then if [[ -d $X ]]; then - if [[ -f /config/sdcardfs/$name/appid ]]; then - G="$(cat "/config/sdcardfs/$name/appid")" - else - G="$(dumpsys package "$name" | awk '/userId=/{print $1}' | cut -f2 -d '=' | head -1)" - fi ; G="$(echo "$G" | grep -Eo '[0-9]+')" - if [[ $G != "" ]]; then - echoRgb "路徑:$X" - Path_details="$(stat -c "%A/%a %U/%G" "$X")" - chown -hR "$G:$G" "$X" - echo_log "設置用戶組:$(echo "$Path_details" | awk '{print $2}')" - restorecon -R "$X" >/dev/null 2>&1 - echo_log "selinux上下文設置" - else - echoRgb "uid獲取失敗" "0" - fi + case ${FILE_NAME##*.} in + lz4) pv "$tar_path" | tar --recursive-unlink -I lz4 -xmpf - -C "$path2" ;; + zst) pv "$tar_path" | tar --recursive-unlink -I zstd -xmpf - -C "$path2" ;; + tar) pv "$tar_path" | tar --recursive-unlink -xmpf - -C "$path2" ;; + *) echoRgb "$FILE_NAME 壓縮包不支持解壓縮" "0" ; Set_back + esac else - echoRgb "路徑$X不存在" "0" + echoRgb "$X不存在 無法恢復$FILE_NAME2數據" "0" ; Set_back fi - elif [[ $FILE_NAME2 = data ]]; then - chown -R "1023:1078" "$path/data/$name" + else + case ${FILE_NAME##*.} in + lz4) pv "$tar_path" | tar --recursive-unlink -I lz4 -xmPpf - ;; + zst) pv "$tar_path" | tar --recursive-unlink -I zstd -xmPpf - ;; + tar) pv "$tar_path" | tar --recursive-unlink -xmPpf - ;; + *) echoRgb "$FILE_NAME 壓縮包不支持解壓縮" "0" ; Set_back + esac fi - fi - done -else - echoRgb "$name2沒有安裝無法恢復數據" "0" + echo_log "$FILE_NAME 解壓縮($FILE_NAME2)" + if [[ $result = 0 ]]; then + if [[ $FILE_NAME2 = user ]]; then + if [[ -d $X ]]; then + if [[ -f /config/sdcardfs/$name/appid ]]; then + G="$(cat "/config/sdcardfs/$name/appid")" + else + G="$(dumpsys package "$name" | awk '/userId=/{print $1}' | cut -f2 -d '=' | head -1)" + fi ; G="$(echo "$G" | grep -Eo '[0-9]+')" + if [[ $G != "" ]]; then + echoRgb "路徑:$X" + Path_details="$(stat -c "%A/%a %U/%G" "$X")" + chown -hR "$G:$G" "$X" + echo_log "設置用戶組:$(echo "$Path_details" | awk '{print $2}')" + restorecon -R "$X" >/dev/null 2>&1 + echo_log "selinux上下文設置" + else + echoRgb "uid獲取失敗" "0" + fi + else + echoRgb "路徑$X不存在" "0" + fi + elif [[ $FILE_NAME2 = data ]]; then + chown -R "1023:1078" "$path/data/$name" + fi + fi + done + else + echoRgb "$name2沒有安裝無法恢復數據" "0" + fi fi } & wait diff --git a/tools/script/應用列表.txt b/tools/script/應用列表.txt new file mode 100644 index 0000000..67b5ec6 --- /dev/null +++ b/tools/script/應用列表.txt @@ -0,0 +1,30 @@ +#不需要恢復還原的應用請在開頭注釋# 比如#xxxxxxxx 酷安 +1DM+ idm.internet.download.manager.plus /data/app/~~QklTSdQI36T815gQ2nlIGQ==/idm.internet.download.manager.plus-h2wEzjxEsuHP7_5UAkoJsA== +AIDA64 com.finalwire.aida64 /data/app/~~aeSfdlS6spLz--43Ilw10g==/com.finalwire.aida64-NZYjvk6JlmT_YOgIkauAvw== +APK編輯器 com.gmail.heagoo.apkeditor.pro /data/app/~~zKIUYzTyGnTq_Sr8GoMGSA==/com.gmail.heagoo.apkeditor.pro-Qgtgtloy1JJcsqrUPT3gjQ== +AccuBattery com.digibites.accubattery /data/app/~~BRsxwFECQ7F2r3SosZ565Q==/com.digibites.accubattery-tgziG4x2ajr_WUgFvNCXTw== +AndroBench com.andromeda.androbench2 /data/app/~~KEGSrfzhJqUGImOxX_t8Cg==/com.andromeda.androbench2-8OFxb_CvIJpQeOOmVIyf2g== +ApktoolM ru.maximoff.apktool /data/app/~~8Qc2W-eoC2hEcZJ8lpe0_Q==/ru.maximoff.apktool-TaSufbX-NUk_XfL33ipKdg== +AuroraStore com.aurora.store /data/app/~~QJyqy00qCjAoNVD81AIheQ==/com.aurora.store-a-cKIG0Om54mEXV96qHCRg== +Chrome com.android.chrome /data/app/~~7_cO2H93KBwhxfjyVCU11Q==/com.android.chrome-ndB94UCIxupWIk3uMFc06g== +Cleaner me.gm.cleaner /data/app/~~yd9fJA05v1z6OBTmUKCLxw==/me.gm.cleaner-UaHaAxEybAPZZ0s0U_FWzg== +DevCheck flar2.devcheck /data/app/~~O5U3ZY3ST6lj_em548tBgw==/flar2.devcheck-oedQjS_9dnjaZcu3_YuQtw== +EXKernelManager flar2.exkernelmanager /data/app/~~MUFH6t_3mgeHfSq_IM8RaQ==/flar2.exkernelmanager-P5tY0AconuDyWCBK7MvPkQ== +Facebook com.facebook.katana /data/app/~~wsC4SQCTsJzVn_eckQVqvg==/com.facebook.katana-LZydcGoXoSk71SplTLbxVw== +GSamBatteryMonitorPro com.gsamlabs.bbm.pro /data/app/~~0agvaH8fpB4aXgxnaMRCYw==/com.gsamlabs.bbm.pro--jOEcv9N324cvJp0kYgkYA== +Gboard com.google.android.inputmethod.latin /data/app/~~1pgBWJMQPv75Ltn8afzDfg==/com.google.android.inputmethod.latin-nFkxIhujetdDxWfxoz08tA== +Gmail com.google.android.gm /data/app/~~cxTL9t_oIK1F_mX3F-OpYA==/com.google.android.gm-JiLNoK0EGF96EEpUyH_Skg== +Google com.google.android.googlequicksearchbox /data/app/~~9r6F2U4JBix5MRuPhcmNbw==/com.google.android.googlequicksearchbox-2P_72XAaZ0evB6DxJpQVww== +Instagram com.instagram.android /data/app/~~BZhzSH2ghrjvCdTHP8-KmA==/com.instagram.android-BcInLzUYdiwlbO2Xmaj-Vw== +JBLPortable com.harman.ble.jbllink /data/app/~~XWN1xyF6MXxAWi9VXztCVQ==/com.harman.ble.jbllink-RwRStVmeqiTS54EtoA_ChA== +LINE jp.naver.line.android /data/app/~~UmPCanbWFixitjBOsa1viw==/jp.naver.line.android-Q2BTlls7Gy-RV6LU6U_WLQ== +LSPosed org.lsposed.manager /data/app/~~M6AeaHvd4nFQ2woSNbkTow==/org.lsposed.manager-gJ0virsXCDTd_2zU7lDQkg== +LibChecker com.absinthe.libchecker /data/app/~~GvmzdfoVqxjh5MBIfjdmVg==/com.absinthe.libchecker-t6LSBuWPg8IWObz5Aa4vUQ== +MT管理器 bin.mt.plus /data/app/~~J2iozDL97Frv1Iqf4Zh1RA==/bin.mt.plus-Doy4vYjhJnwjNGOYD0ZiLQ== +Magisk com.topjohnwu.magisk /data/app/~~YAQU1Qsahwu0v8K1w3ROnA==/com.topjohnwu.magisk-4lGqNC9PctV4BUC9Z-23eQ== +Messenger com.facebook.orca /data/app/~~js5IBml5aYMJhovUYt7DzQ==/com.facebook.orca-GSOaGu0lc-5yjCf7CLUSbA== +NekogramX nekox.messenger /data/app/~~sD6Ko1GIAgBXyMzcr1zUfg==/nekox.messenger-3SEkTuodUPA-N0YrD-qmSw== +NetMonster cz.mroczis.netmonster /data/app/~~rTzF-bi4QlcmzP_Ml4vJOQ==/cz.mroczis.netmonster-4V8_8CaZH87aRpz6unm31Q== +NewPipe org.schabi.newpipe /data/app/~~DUMs2VgIfJmo2YWYrotMog==/org.schabi.newpipe-X_DpF_PbZn9NcB2eF0qa_w== +Phonograph com.kabouzeid.gramophone /data/app/~~jy_1uChaF9d9DPknvJINFw==/com.kabouzeid.gramophone-1qx3U7uf530gft9vTdsfzQ== +Polarr photo.editor.polarr /data/app/~~e91UFarXQZQiZQNBzA6t9g==/photo.editor.polarr-hJ8r834rZ9qpEA6YnBSyAQ== diff --git a/備份應用.sh b/備份應用.sh index d2dfcd2..916a89a 100644 --- a/備份應用.sh +++ b/備份應用.sh @@ -85,6 +85,8 @@ fi [[ $Hybrid_backup = true ]] && echoRgb "當前backup_settings.conf的\n -Hybrid_backup為1將不備份任何應用" "0" [[ ! -d $Backup ]] && mkdir -p "$Backup" [[ ! -f $Backup/應用列表.txt ]] && echo "#不需要恢復還原的應用請在開頭注釋# 比如#xxxxxxxx 酷安" >"$Backup/應用列表.txt" +[[ ! -f $Backup/本地一鍵更新腳本.sh ]] && cp -r "$MODDIR/本地一鍵更新腳本.sh" "$Backup" +[[ ! -f $Backup/recover.conf ]] && cp -r "$script_path/recover.conf" "$Backup" [[ ! -d $Backup/tools ]] && cp -r "$tools_path" "$Backup" && rm -rf "$Backup/tools/bin/zip" "$Backup/tools/META-INF" "$Backup/tools/script" [[ ! -f $Backup/還原備份.sh ]] && cp -r "$script_path/restore" "$Backup/還原備份.sh" [[ ! -f $Backup/掃描資料夾名.sh ]] && cp -r "$script_path/Get_DirName" "$Backup/掃描資料夾名.sh" @@ -132,6 +134,7 @@ Backup_apk() { [[ $PackageName = "" ]] && echo "PackageName=\"$name2\"" >>"$app_details" [[ $ChineseName = "" ]] && echo "ChineseName=\"$name1\"" >>"$app_details" [[ ! -f $Backup_folder/還原備份.sh ]] && cp -r "$script_path/restore2" "$Backup_folder/還原備份.sh" + [[ ! -f $Backup_folder/recover.conf ]] && cp -r "$script_path/recover.conf" "$Backup_folder" fi if [[ $name2 = com.android.chrome ]]; then #刪除所有舊apk ,保留一個最新apk進行備份 @@ -224,8 +227,10 @@ starttime1="$(date -u "+%s")" TIME="$starttime1" #記錄error次數起點 ERROR=1 +en=118 { while [[ $i -le $r ]]; do + [[ $en -ge 229 ]] && en=118 name1="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" name2="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" [[ $name2 = "" ]] && echoRgb "警告! 應用列表.txt應用包名獲取失敗,可能修改有問題" "0" && exit 1 @@ -279,7 +284,7 @@ while [[ $i -le $r ]]; do fi endtime 2 "$name1備份" echoRgb "完成$((i*100/r))% $hx$(df -h "$data" | awk 'END{print "剩餘:"$3"使用率:"$4}')" - echoRgb + echoRgb "____________________________________" "3" recovery_backup else recovery_backup @@ -308,7 +313,7 @@ while [[ $i -le $r ]]; do fi fi [[ $ERROR -ge 5 ]] && echoRgb "錯誤次數達到上限 環境已重設\n -請重新執行腳本" "0" && rm -rf "$filepath" && exit 2 - let i++ + let i++ en++ done echoRgb "你要備份跑路?祝你卡米9008" "2" diff --git a/生成應用列表.sh b/生成應用列表.sh index e6cf540..c0bfe8d 100644 --- a/生成應用列表.sh +++ b/生成應用列表.sh @@ -28,12 +28,26 @@ i=1 bn=118 rm -rf "$MODDIR/tmp" starttime1="$(date -u "+%s")" -appinfo -d " " -o ands,pn -pn $system $launcher_app -3 2>/dev/null | sort | sed 's/\///g ; s/\://g ; s/(//g ; s/)//g ; s/\[//g ; s/\]//g ; s/\-//g' | egrep -v 'ice.message|oneplus|miui|xiaomi|oppo|flyme|meizu|com.android.soundrecorder' | while read; do +appinfo -sort-i -d " " -o ands,pn -pn $system $launcher_app -3 2>/dev/null | sed 's/\///g ; s/\://g ; s/(//g ; s/)//g ; s/\[//g ; s/\]//g ; s/\-//g' | grep -v 'ice.message' | while read; do [[ $bn -ge 229 ]] && bn=118 app_1=($REPLY $REPLY) if [[ $(cat "$nametxt" | grep -oE "${app_1[1]}$") = "" ]]; then - echo "$REPLY" >>"$nametxt" && xz=1 && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp" - echoRgb "$i.$REPLY" + case ${app_1[1]} in + oneplus|miui|xiaomi|oppo|flyme|meizu|com.android.soundrecorder|com.mfashiongallery.emag|com.mi.health) + echoRgb "$REPLY 可能是廠商自帶應用 比對中....." "0" + if [[ $(appinfo -sort-i -d " " -o ands,pn -xm | grep -w "$REPLY") = $REPLY ]]; then + echoRgb "為Xposed模塊 進行添加" "1" + echo "$REPLY" >>"$nametxt" && xz=1 && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp" + echoRgb "$i.$REPLY" + else + echoRgb "非Xposed模塊 忽略輸出" "0" + fi + ;; + *) + echo "$REPLY" >>"$nametxt" && xz=1 && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp" + echoRgb "$i.$REPLY" + ;; + esac else unset xz fi