data recover

This commit is contained in:
Administrator 2025-07-30 15:04:12 +08:00
parent 1250e0150b
commit a69be9ced5
7 changed files with 32 additions and 43 deletions

View File

@ -11,8 +11,10 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import com.android.grape.databinding.ActivityMainBinding import com.android.grape.databinding.ActivityMainBinding
import com.android.grape.job.MonitorService import com.android.grape.job.MonitorService
import com.android.grape.util.BackupUtils
import com.android.grape.util.BackupUtils.killRecordProcess import com.android.grape.util.BackupUtils.killRecordProcess
import com.android.grape.util.ClashUtil import com.android.grape.util.ClashUtil
import com.android.grape.util.FileUtils 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.ShellUtil
import com.android.grape.util.StoragePermissionHelper import com.android.grape.util.StoragePermissionHelper
import com.android.grape.util.TaskUtils import com.android.grape.util.TaskUtils
import kotlinx.coroutines.launch
/** /**
* public class MainActivity extends AppCompatActivity * public class MainActivity extends AppCompatActivity
@ -78,6 +81,10 @@ class MainActivity : AppCompatActivity() {
} }
viewBinding.stop.setOnClickListener { viewBinding.stop.setOnClickListener {
killRecordProcess(this, packageName) killRecordProcess(this, packageName)
// lifecycleScope.launch {
// BackupUtils.backUp(this@MainActivity, "com.policybazaar")
// BackupUtils.recoverRecordData(this@MainActivity)
// }
} }
} }

View File

@ -243,7 +243,7 @@ class SendCallbackJobService : JobIntentService() {
} }
chownSh(fileName, getMainUserAndGroup(this)) 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 != "") { // if (Util.backUpServerIp != "") {
// url = "http://" + Util.backUpServerIp + "/tt/ddj/backup.do" // url = "http://" + Util.backUpServerIp + "/tt/ddj/backup.do"
// } // }

View File

@ -42,7 +42,9 @@ import com.android.grape.util.ContextUtils.getBaseFilesDir
import com.android.grape.util.ContextUtils.getRecordDataDirName import com.android.grape.util.ContextUtils.getRecordDataDirName
import com.android.grape.util.ContextUtils.getRecordDataFileName import com.android.grape.util.ContextUtils.getRecordDataFileName
import com.android.grape.util.ContextUtils.getRecordExtraFileName 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.getRecordSdcardApkVerFileName
import com.android.grape.util.ContextUtils.getRecordTxtFileName
import com.android.grape.util.ContextUtils.getSessionTxtFileName import com.android.grape.util.ContextUtils.getSessionTxtFileName
import com.android.grape.util.DeviceUtils.getUserAndGroupSh import com.android.grape.util.DeviceUtils.getUserAndGroupSh
import com.android.grape.util.FileUtils.forceMakeDir import com.android.grape.util.FileUtils.forceMakeDir
@ -397,8 +399,8 @@ object AppUtils {
fun installObb(context: Context, extraFile: File) { fun installObb(context: Context, extraFile: File) {
val userAndGroup = getUserAndGroupSh( val userAndGroup = getUserAndGroupSh(
context, context,
context.packageName, recordPackageName,
getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt" getRecordTxtFileName( context)
) )
val destExtraFile = File( val destExtraFile = File(
@ -626,7 +628,7 @@ object AppUtils {
.isNotEmpty() .isNotEmpty()
) { ) {
var restored_zip = 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()) { if (backUpServerIp.isNotEmpty()) {
restored_zip = restored_zip =
"http://" + backUpServerIp + "/tt/" + it.getString("BackupFileUrl1") "http://" + backUpServerIp + "/tt/" + it.getString("BackupFileUrl1")

View File

@ -16,6 +16,7 @@ import com.android.grape.util.ContextUtils.getMonitorDir
import com.android.grape.util.ContextUtils.getRecordDataDirName import com.android.grape.util.ContextUtils.getRecordDataDirName
import com.android.grape.util.ContextUtils.getRecordDataFileName import com.android.grape.util.ContextUtils.getRecordDataFileName
import com.android.grape.util.ContextUtils.getRecordListTxtFileName 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.getMainUserAndGroup
import com.android.grape.util.DeviceUtils.getUserAndGroupSh import com.android.grape.util.DeviceUtils.getUserAndGroupSh
import com.android.grape.util.FileUtils.forceMakeDir import com.android.grape.util.FileUtils.forceMakeDir
@ -86,8 +87,8 @@ object BackupUtils {
} }
val uid = getUserAndGroupSh( val uid = getUserAndGroupSh(
context.applicationContext, context.applicationContext,
context.packageName, recordPackageName,
getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt" getRecordTxtFileName(context)
) )
chownSh(getMonitorDir(context), uid) chownSh(getMonitorDir(context), uid)
val copySucc = FileUtils.copyFolderSh(apkDataPath,zipDirName) val copySucc = FileUtils.copyFolderSh(apkDataPath,zipDirName)
@ -348,8 +349,8 @@ object BackupUtils {
val userAnGroup = getUserAndGroupSh( val userAnGroup = getUserAndGroupSh(
context, context,
context.packageName, recordPackageName ?: return false,
getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt" getRecordTxtFileName( context)
) )
Log.i("BackupUtils", "recoverRecordData->userAndGroup:$userAnGroup") Log.i("BackupUtils", "recoverRecordData->userAndGroup:$userAnGroup")
File(reloginDataDir).parentFile?.absolutePath?.let { File(reloginDataDir).parentFile?.absolutePath?.let {

View File

@ -279,9 +279,6 @@ object FileUtils {
) )
try { try {
val zipDir = File(zipDirName) 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}" val cmdString = "tar -zcvf $zipFileName -C ${zipDir.parentFile?.absolutePath ?: ""} ${zipDir.name}"
Log.i("FileUtils", "zipSh-> cmd:$cmdString") Log.i("FileUtils", "zipSh-> cmd:$cmdString")
MockTools.exec(cmdString) MockTools.exec(cmdString)
@ -708,16 +705,6 @@ object FileUtils {
val src = File(oldPath) val src = File(oldPath)
val dst = File(newPath) val dst = File(newPath)
// if (!src.exists()) {
// LogUtils.d(
// Log.ERROR,
// "TaskUtil",
// "Source path does not exist: $oldPath",
// null
// )
// return false
// }
// 构造命令(注意 shell 特殊字符的转义) // 构造命令(注意 shell 特殊字符的转义)
val safeOldPath = src.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"") val safeOldPath = src.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"")
val safeNewPath = dst.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"") val safeNewPath = dst.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"")
@ -730,20 +717,6 @@ object FileUtils {
val chmod = "chmod 777 \"$safeNewPath\"" val chmod = "chmod 777 \"$safeNewPath\""
val chmodResult: String? = ShellUtils.execRootCmdAndGetResult(chmod) val chmodResult: String? = ShellUtils.execRootCmdAndGetResult(chmod)
recursiveChmod777(dst) 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") Log.i("TaskUtil", "Command executed successfully: $result")
return true return true
} catch (e: java.lang.Exception) { } catch (e: java.lang.Exception) {

View File

@ -20,6 +20,7 @@ import com.android.grape.util.ShellUtils.delFileSh
import com.android.grape.util.ShellUtils.unzipAPkSh import com.android.grape.util.ShellUtils.unzipAPkSh
import com.android.grape.util.ShellUtils.unzipScriptSh import com.android.grape.util.ShellUtils.unzipScriptSh
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import java.io.File
/** /**
* @Time: 2025-16-16 19:16 * @Time: 2025-16-16 19:16
@ -46,8 +47,8 @@ object ScriptUtils {
fun execDownScript(): Boolean { fun execDownScript(): Boolean {
var isDownload = true var isDownload = true
if (isCanAuto) { if (isCanAuto) {
Log.i("TaskUtils", "start to execDownScript")
val script_url = "http://39.103.73.250/tt/" + canAutoLc val script_url = "http://39.103.73.250/tt/" + canAutoLc
Log.i("TaskUtils", "start to execDownScript $script_url")
isDownload = downloadFile(script_url, script_path) isDownload = downloadFile(script_url, script_path)
if (!isDownload) { if (!isDownload) {
Log.i("TaskUtils", "execDownScript isDownload : $isDownload") Log.i("TaskUtils", "execDownScript isDownload : $isDownload")
@ -70,7 +71,14 @@ object ScriptUtils {
} }
return 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() val intent = Intent()
intent.setClassName( intent.setClassName(
"org.autojs.autojs6", "org.autojs.autojs6",

View File

@ -478,8 +478,7 @@ object ShellUtils {
fun delFilesSh(dir: String, prefix: String?) { fun delFilesSh(dir: String, prefix: String?) {
try { try {
var cmd = "cd $dir|" var cmd = "rm -rf $dir$prefix*"
cmd += "rm -rf $prefix*"
Log.i("ShellUtils", "delFilesSh-> cmd:$cmd") Log.i("ShellUtils", "delFilesSh-> cmd:$cmd")
MockTools.exec(cmd) MockTools.exec(cmd)
} catch (e: Exception) { } catch (e: Exception) {
@ -514,10 +513,9 @@ object ShellUtils {
fun unZipFileSh(zipFileName: String, dataDir: String) { fun unZipFileSh(zipFileName: String, dataDir: String) {
try { try {
var cmd = "cd $dataDir|" val cmdString = "tar -zxvf $zipFileName --strip-components=1 -C $dataDir"
cmd += "tar -xvf " + File(zipFileName).name Log.i("ShellUtils", "unZipFileSh-> cmd:$cmdString")
Log.i("ShellUtils", "unZipFileSh-> cmd:$cmd") MockTools.exec(cmdString)
MockTools.exec(cmd)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
} }