data recover
This commit is contained in:
parent
1250e0150b
commit
a69be9ced5
|
@ -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)
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue