refactor(util): 重构实用工具类并优化文件路径方法
- 重构了多个实用工具类,优化了文件路径获取方法 - 将文件路径相关方法统一移至 ContextUtils 类 - 优化了 AppUtils、InstallUtils、TaskUtils 等类的结构- 删除了 FileUtils 类中的冗余方法 - 调整了 ShellUtils、ServiceUtils 等类的实现
This commit is contained in:
parent
af757222c1
commit
dadf5c7551
|
@ -10,6 +10,7 @@ import com.android.grape.data.AppState.isClickRet
|
|||
import com.android.grape.data.AppState.proxyCountry
|
||||
import com.android.grape.data.AppState.ua
|
||||
import com.android.grape.net.MyGet
|
||||
import com.android.grape.util.InstallUtils.setInstallRet
|
||||
import com.android.grape.util.TaskUtils
|
||||
|
||||
class CheckIpJobService : JobIntentService() {
|
||||
|
@ -18,7 +19,7 @@ class CheckIpJobService : JobIntentService() {
|
|||
InstallService.onEvent(this)
|
||||
} else {
|
||||
isClickRet = false
|
||||
TaskUtils.setInstallRet(false)
|
||||
setInstallRet(false)
|
||||
clickErrReason = "networkErr"
|
||||
TaskUtils.setFinish(this)
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Intent
|
|||
import androidx.core.app.JobIntentService
|
||||
import com.android.grape.data.AppState.clickErrReason
|
||||
import com.android.grape.data.AppState.isClickRet
|
||||
import com.android.grape.util.InstallUtils.setInstallRet
|
||||
import com.android.grape.util.TaskUtils
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
|
||||
|
@ -28,7 +29,7 @@ class DownloadAppJobService : JobIntentService() {
|
|||
StartVpnPortJobService.onEvent(this)
|
||||
} else {
|
||||
isClickRet = false
|
||||
TaskUtils.setInstallRet(false)
|
||||
setInstallRet(false)
|
||||
clickErrReason = "downloadErr"
|
||||
TaskUtils.setFinish(this)
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import androidx.core.app.JobIntentService
|
|||
import com.android.grape.data.AppState.isNeedRestored
|
||||
import com.android.grape.data.AppState.recordPackageName
|
||||
import com.android.grape.util.AppUtils.installRecord
|
||||
import com.android.grape.util.InstallUtils.setInstallRet
|
||||
import com.android.grape.util.TaskUtils
|
||||
|
||||
class InstallService : JobIntentService() {
|
||||
|
@ -18,7 +19,7 @@ class InstallService : JobIntentService() {
|
|||
if (installRecord(this)) {
|
||||
Log.i(TAG, "installRecord succ")
|
||||
tryNum = 0
|
||||
TaskUtils.setInstallRet(true)
|
||||
setInstallRet(true)
|
||||
|
||||
println("IOSTQ:isNeedRestored == " + isNeedRestored)
|
||||
if (isNeedRestored) {
|
||||
|
|
|
@ -28,13 +28,13 @@ import com.android.grape.data.AppState.reloginRecordId
|
|||
import com.android.grape.net.AfClient.postData
|
||||
import com.android.grape.util.AppUtils.getAppAfVer
|
||||
import com.android.grape.util.DeviceUtils.getMainUserAndGroup
|
||||
import com.android.grape.util.InstallUtils.isInstallRet
|
||||
import com.android.grape.util.MyPost
|
||||
import com.android.grape.util.ShellUtils.chownSh
|
||||
import com.android.grape.util.ShellUtils.delFileSh
|
||||
import com.android.grape.util.TaskUtils
|
||||
import com.android.grape.util.TaskUtils.HkVer
|
||||
import com.android.grape.util.TaskUtils.getAfLog
|
||||
import com.android.grape.util.TaskUtils.isInstallRet
|
||||
import com.android.grape.util.TaskUtils.setFinish
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
|
|
|
@ -11,9 +11,9 @@ import com.android.grape.data.AppState.proxyCountry
|
|||
import com.android.grape.net.MyGet
|
||||
import com.android.grape.util.ClashUtil
|
||||
import com.android.grape.util.ClashUtil.getProxyPort
|
||||
import com.android.grape.util.InstallUtils.setInstallRet
|
||||
import com.android.grape.util.TaskUtils
|
||||
import com.android.grape.util.TaskUtils.setFinish
|
||||
import com.android.grape.util.TaskUtils.setInstallRet
|
||||
import java.util.Locale
|
||||
|
||||
class StartVpnPortJobService : JobIntentService() {
|
||||
|
|
|
@ -6,10 +6,10 @@ import androidx.core.app.JobIntentService
|
|||
import com.android.grape.data.AppState.recordPackageName
|
||||
import com.android.grape.util.BackupUtils.backUp
|
||||
import com.android.grape.util.FileUtils.delFiles
|
||||
import com.android.grape.util.InstallUtils.setInstallRet
|
||||
import com.android.grape.util.MockTools
|
||||
import com.android.grape.util.TaskUtils
|
||||
import com.android.grape.util.TaskUtils.setFinish
|
||||
import com.android.grape.util.TaskUtils.setInstallRet
|
||||
|
||||
|
||||
class UnInstallService : JobIntentService() {
|
||||
|
|
|
@ -23,8 +23,8 @@ import com.android.grape.sai.prefers.PreferencesHelper
|
|||
import com.android.grape.sai.rootless.AndroidPackageInstallerError
|
||||
import com.android.grape.sai.shell.MiuiUtils
|
||||
import com.android.grape.sai.shell.Shell
|
||||
import com.android.grape.util.InstallUtils.setInstallRet
|
||||
import com.android.grape.util.TaskUtils
|
||||
import com.android.grape.util.TaskUtils.setInstallRet
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import java.io.File
|
||||
import java.util.concurrent.ExecutorService
|
||||
|
|
|
@ -17,15 +17,7 @@ class AndroidFileDownloader(private val context: Context) {
|
|||
|
||||
private val client = OkHttpClient()
|
||||
|
||||
/**
|
||||
* 下载文件到指定路径
|
||||
*
|
||||
* @param url 文件下载URL
|
||||
* @param relativePath 相对于外部存储目录的路径(如 "Downloads/MyApp/file.zip")
|
||||
* @param fileName 文件名(可选,如未提供则从URL提取)
|
||||
* @param progressCallback 进度回调
|
||||
* @param completionCallback 完成回调
|
||||
*/
|
||||
|
||||
fun downloadFile(
|
||||
url: String,
|
||||
relativePath: String,
|
||||
|
|
|
@ -40,17 +40,17 @@ import com.android.grape.sai.param.SaiPiSessionParams
|
|||
import com.android.grape.sai.prefers.PreferencesHelper
|
||||
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.getRecordSdcardApkVerFileName
|
||||
import com.android.grape.util.ContextUtils.getSessionTxtFileName
|
||||
import com.android.grape.util.DeviceUtils.getUserAndGroupSh
|
||||
import com.android.grape.util.FileUtils.forceMakeDir
|
||||
import com.android.grape.util.FileUtils.getFileContent
|
||||
import com.android.grape.util.FileUtils.getRecordDataFileName
|
||||
import com.android.grape.util.FileUtils.getRecordSdcardApkVerFileName
|
||||
import com.android.grape.util.FileUtils.getSessionTxtFileName
|
||||
import com.android.grape.util.InstallUtils.installApks4Tmp
|
||||
import com.android.grape.util.InstallUtils.isInstallRet
|
||||
import com.android.grape.util.ShellUtils.chownSh
|
||||
import com.android.grape.util.ShellUtils.unzipAPkSh
|
||||
import com.android.grape.util.TaskUtils.isInstallRet
|
||||
import com.blankj.utilcode.util.ActivityUtils
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
|
@ -183,7 +183,7 @@ object AppUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public fun recordAppInstalled(context: Context): Boolean {
|
||||
fun recordAppInstalled(context: Context): Boolean {
|
||||
return checkAppInstalled(
|
||||
context,
|
||||
recordPackageName
|
||||
|
@ -276,7 +276,7 @@ object AppUtils {
|
|||
}
|
||||
|
||||
|
||||
public fun filterStr(s: String?): String {
|
||||
fun filterStr(s: String?): String {
|
||||
var s = s
|
||||
val sb = StringBuffer()
|
||||
|
||||
|
@ -303,7 +303,7 @@ object AppUtils {
|
|||
return "101" == tt || "100" == tt
|
||||
}
|
||||
|
||||
public fun getApkDataDir(context: Context, packageName: String): String? {
|
||||
fun getApkDataDir(context: Context, packageName: String): String? {
|
||||
var apkDataPath: String? = null
|
||||
try {
|
||||
apkDataPath = context.packageManager.getApplicationInfo(packageName, 0).dataDir
|
||||
|
@ -350,7 +350,7 @@ object AppUtils {
|
|||
appAfVer = appAfVerV
|
||||
}
|
||||
|
||||
public fun clientInstallSplit(context: Context, apkFile: File, extraFile: File): Boolean {
|
||||
fun clientInstallSplit(context: Context, apkFile: File, extraFile: File): Boolean {
|
||||
val PrintWriter: PrintWriter? = null
|
||||
val process: Process? = null
|
||||
try {
|
||||
|
@ -378,7 +378,7 @@ object AppUtils {
|
|||
}
|
||||
|
||||
|
||||
public fun clientInstallObb(context: Context, apkFile: File, extraFile: File): Boolean {
|
||||
fun clientInstallObb(context: Context, apkFile: File, extraFile: File): Boolean {
|
||||
Log.i(
|
||||
"AppUtils",
|
||||
"start clientInstallObb : $apkFile ; $extraFile"
|
||||
|
@ -394,7 +394,7 @@ object AppUtils {
|
|||
return false
|
||||
}
|
||||
|
||||
public fun installObb(context: Context, extraFile: File) {
|
||||
fun installObb(context: Context, extraFile: File) {
|
||||
val userAndGroup = getUserAndGroupSh(
|
||||
context,
|
||||
context.packageName,
|
||||
|
@ -442,7 +442,7 @@ object AppUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public fun clientInstallOther(context: Context, apkFile: File): Boolean {
|
||||
fun clientInstallOther(context: Context, apkFile: File): Boolean {
|
||||
Log.e("AppUtils", "clientInstallOther: $apkFile")
|
||||
|
||||
if (apkFile.toString().contains("xapk")) {
|
||||
|
@ -500,7 +500,7 @@ object AppUtils {
|
|||
return false
|
||||
}
|
||||
|
||||
public fun clientInstall(apkFile: File): Boolean {
|
||||
fun clientInstall(apkFile: File): Boolean {
|
||||
Log.i("AppUtils", "clientInstall : $apkFile")
|
||||
try {
|
||||
MockTools.exec("chmod 777 $apkFile")
|
||||
|
@ -570,7 +570,7 @@ object AppUtils {
|
|||
|
||||
//安装压缩包中的apk
|
||||
@Throws(IOException::class)
|
||||
public fun installApk() {
|
||||
fun installApk() {
|
||||
val apkpath = "$apk_path/$zip_name"
|
||||
|
||||
Log.e("sss", apkpath)
|
||||
|
@ -598,7 +598,6 @@ object AppUtils {
|
|||
}.start()
|
||||
}
|
||||
|
||||
|
||||
fun execDownloadApp(context: Context): Boolean {
|
||||
try {
|
||||
var url = "http://39.103.73.250/tt/upload/ddj/$recordFileName"
|
||||
|
@ -647,5 +646,4 @@ object AppUtils {
|
|||
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -14,10 +14,11 @@ import com.android.grape.util.AppUtils.getApkDataDir
|
|||
import com.android.grape.util.ContextUtils.getBaseFilesDir
|
||||
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.DeviceUtils.getMainUserAndGroup
|
||||
import com.android.grape.util.DeviceUtils.getUserAndGroupSh
|
||||
import com.android.grape.util.FileUtils.forceMakeDir
|
||||
import com.android.grape.util.FileUtils.getRecordDataFileName
|
||||
import com.android.grape.util.FileUtils.zipSh
|
||||
import com.android.grape.util.ShellUtils.chownSh
|
||||
import com.android.grape.util.ShellUtils.copyFileSh
|
||||
|
@ -69,7 +70,7 @@ object BackupUtils {
|
|||
Log.i("BackupUtils", "backupDataFile->apkDataPath=$apkDataPath")
|
||||
listSh(context, apkDataPath)
|
||||
|
||||
val file = File(FileUtils.getRecordListTxtFileName(context))
|
||||
val file = File(getRecordListTxtFileName(context))
|
||||
if (file.exists()) {
|
||||
val ss = getStringFromFile(context, file.absolutePath)
|
||||
if (ss.isNotEmpty()) {
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
package com.android.grape.util
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import com.android.grape.data.AppState.apkDir
|
||||
import com.android.grape.data.AppState.monitorDir
|
||||
import com.android.grape.data.AppState.recordExtraFileName
|
||||
import com.android.grape.data.AppState.recordFileName
|
||||
import com.android.grape.data.AppState.recordPackageName
|
||||
import java.io.PrintWriter
|
||||
|
||||
/**
|
||||
* @Time: 2025-24-16 16:24
|
||||
|
@ -32,4 +36,57 @@ object ContextUtils {
|
|||
fun getRecordExtraFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordExtraFileName
|
||||
}
|
||||
|
||||
public fun getRecordDataFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".zip"
|
||||
}
|
||||
|
||||
public fun getRecordSdcardApkVerFileName(context: Context): String {
|
||||
return "/sdcard/apks/" + recordFileName
|
||||
}
|
||||
|
||||
public fun getSessionTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/sessionTxt.txt"
|
||||
}
|
||||
|
||||
public fun getRecordTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".txt"
|
||||
}
|
||||
|
||||
public fun getSelfRecordTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt"
|
||||
}
|
||||
|
||||
public fun getRecordApkVerFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordFileName
|
||||
}
|
||||
|
||||
|
||||
public fun getRecordApkFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".apk"
|
||||
}
|
||||
public fun makeFile(fileName: String) {
|
||||
var PrintWriter: PrintWriter? = null
|
||||
var process: Process? = null
|
||||
try {
|
||||
process = Runtime.getRuntime().exec("su")
|
||||
PrintWriter = PrintWriter(process.outputStream)
|
||||
//String cmd = "cd " + path+" \n";
|
||||
val cmd = "touch $fileName"
|
||||
Log.i("TaskUtils", "makefile-> cmd:$cmd")
|
||||
PrintWriter.println(cmd)
|
||||
|
||||
PrintWriter.flush()
|
||||
PrintWriter.close()
|
||||
val value = process.waitFor()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
} finally {
|
||||
process?.destroy()
|
||||
}
|
||||
}
|
||||
|
||||
public fun getRecordListTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".list.txt"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ import com.android.grape.data.AppState.mainUserAndGroup
|
|||
import com.android.grape.data.AppState.monitorDir
|
||||
import com.android.grape.data.AppState.recordPackageName
|
||||
import com.android.grape.util.ContextUtils.getBaseFilesDir
|
||||
import com.android.grape.util.FileUtils.getRecordTxtFileName
|
||||
import com.android.grape.util.FileUtils.getSelfRecordTxtFileName
|
||||
import com.android.grape.util.ContextUtils.getRecordTxtFileName
|
||||
import com.android.grape.util.ContextUtils.getSelfRecordTxtFileName
|
||||
import java.io.File
|
||||
import java.io.InputStreamReader
|
||||
import java.io.LineNumberReader
|
||||
|
|
|
@ -63,14 +63,6 @@ object FileUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public fun getRecordDataFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".zip"
|
||||
}
|
||||
|
||||
public fun getRecordSdcardApkVerFileName(context: Context): String {
|
||||
return "/sdcard/apks/" + recordFileName
|
||||
}
|
||||
|
||||
public fun forceCreteDir(file: File) {
|
||||
if (!file.exists()) {
|
||||
val parent = file.parentFile
|
||||
|
@ -86,51 +78,6 @@ object FileUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public fun getSessionTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/sessionTxt.txt"
|
||||
}
|
||||
|
||||
public fun getRecordTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".txt"
|
||||
}
|
||||
|
||||
public fun getSelfRecordTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + context.packageName + ".txt"
|
||||
}
|
||||
|
||||
public fun getRecordApkVerFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordFileName
|
||||
}
|
||||
|
||||
|
||||
public fun getRecordApkFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".apk"
|
||||
}
|
||||
public fun makeFile(fileName: String) {
|
||||
var PrintWriter: PrintWriter? = null
|
||||
var process: Process? = null
|
||||
try {
|
||||
process = Runtime.getRuntime().exec("su")
|
||||
PrintWriter = PrintWriter(process.outputStream)
|
||||
//String cmd = "cd " + path+" \n";
|
||||
val cmd = "touch $fileName"
|
||||
Log.i("TaskUtils", "makefile-> cmd:$cmd")
|
||||
PrintWriter.println(cmd)
|
||||
|
||||
PrintWriter.flush()
|
||||
PrintWriter.close()
|
||||
val value = process.waitFor()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
} finally {
|
||||
process?.destroy()
|
||||
}
|
||||
}
|
||||
|
||||
public fun getRecordListTxtFileName(context: Context): String {
|
||||
return getBaseFilesDir(context) + "/" + monitorDir + "/" + apkDir + "/" + recordPackageName + ".list.txt"
|
||||
}
|
||||
|
||||
public fun forceMakeDir(file: File) {
|
||||
if (!file.exists()) {
|
||||
val parent = file.parentFile
|
||||
|
|
|
@ -19,7 +19,7 @@ import java.io.UnsupportedEncodingException
|
|||
*/
|
||||
object HookUtils {
|
||||
|
||||
private fun checkHook(context: Context): Boolean {
|
||||
fun checkHook(context: Context): Boolean {
|
||||
val url = "http://127.0.0.1:8090/ctl/test"
|
||||
|
||||
val checked = false
|
||||
|
@ -45,7 +45,7 @@ object HookUtils {
|
|||
return true
|
||||
}
|
||||
|
||||
private fun execHookApp(context: Context) {
|
||||
fun execHookApp(context: Context) {
|
||||
val intent = Intent(Intent.ACTION_MAIN).apply {
|
||||
val cname = ComponentName(hookPackageName, hookAppMainClass)
|
||||
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
|
|
|
@ -2,8 +2,8 @@ package com.android.grape.util
|
|||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import com.android.grape.data.AppState.installRet
|
||||
import com.android.grape.util.ShellUtils.execCommand
|
||||
import com.android.grape.util.TaskUtils.setInstallRet
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
|
@ -65,6 +65,15 @@ object InstallUtils {
|
|||
return bool
|
||||
}
|
||||
|
||||
fun setInstallRet(installRetV: Boolean) {
|
||||
Log.i("TaskUtils", "setInstallRet: $installRetV")
|
||||
installRet = installRetV
|
||||
}
|
||||
|
||||
fun isInstallRet(): Boolean {
|
||||
return installRet ?: false
|
||||
}
|
||||
|
||||
private fun clientInstall0(apkFile: File): Boolean {
|
||||
execCommand("su")
|
||||
execCommand("chmod", "777", apkFile.absolutePath)
|
||||
|
|
|
@ -7,7 +7,7 @@ import android.util.Log
|
|||
import com.android.grape.data.AppState.recordPackageName
|
||||
import com.android.grape.util.AppUtils.getPackageUserID
|
||||
import com.android.grape.util.ContextUtils.getMonitorDir
|
||||
import com.android.grape.util.FileUtils.getRecordListTxtFileName
|
||||
import com.android.grape.util.ContextUtils.getRecordListTxtFileName
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import java.io.BufferedOutputStream
|
||||
import java.io.BufferedReader
|
||||
|
|
|
@ -48,31 +48,16 @@ import com.android.grape.manager.ConfigManager.initDefaultProxyJo
|
|||
import com.android.grape.util.AppUtils.execTargetApp
|
||||
import com.android.grape.util.AppUtils.getApkPackageName
|
||||
import com.android.grape.util.AppUtils.setTopApp
|
||||
import com.android.grape.util.ContextUtils.getBaseFilesDir
|
||||
import com.android.grape.util.ContextUtils.getRecordDataFileName
|
||||
import com.android.grape.util.FileUtils.forceMakeDir
|
||||
import com.android.grape.util.FileUtils.getRecordDataFileName
|
||||
import com.android.grape.util.JsonUtils.execSetJson
|
||||
import com.blankj.utilcode.util.LogUtils
|
||||
import org.json.JSONObject
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.io.PrintWriter
|
||||
import java.util.Locale
|
||||
import kotlin.math.min
|
||||
|
||||
/**
|
||||
* `util`类用作封装多种方法和属性的实用程序类
|
||||
* 用于管理与应用程序相关的数据并执行各种操作。此课程提供
|
||||
* 诸如检索和更新应用程序元数据,管理日志,处理等功能
|
||||
* 备份要求,跟踪用户和组信息以及与shell命令进行交互。
|
||||
*
|
||||
* 它还揭示了使用JSON数据,时间戳,代理配置,软件包的方法
|
||||
* 所有权和其他特定于应用程序的属性。该课程中的许多方法都相关
|
||||
* 将应用程序状态管理和设备上的特定命令执行。
|
||||
*
|
||||
* 注意:此类包括用于初始化和内部配置的方法
|
||||
* 不直接暴露于外部使用。
|
||||
*/
|
||||
|
||||
object TaskUtils {
|
||||
|
||||
init {
|
||||
|
@ -128,16 +113,6 @@ object TaskUtils {
|
|||
return "normal"
|
||||
}
|
||||
|
||||
|
||||
fun setInstallRet(installRetV: Boolean) {
|
||||
Log.i("TaskUtils", "setInstallRet: $installRetV")
|
||||
installRet = installRetV
|
||||
}
|
||||
|
||||
fun isInstallRet(): Boolean {
|
||||
return installRet ?: false
|
||||
}
|
||||
|
||||
fun setAfLog(afLogV: String) {
|
||||
afLog = afLogV
|
||||
}
|
||||
|
@ -169,13 +144,14 @@ object TaskUtils {
|
|||
return "v1060"
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
构建请求参数:获取设备唯一 ID,拼接请求 URL。
|
||||
发送 POST 请求:调用 MyPost.postData 向服务器提交请求。
|
||||
处理响应结果:
|
||||
成功时设置权限、解析 JSON 数据并设置 clickTime。
|
||||
失败或异常时调用 setFinish 结束任务。
|
||||
* 该函数execReloginTask的功能是执行重新登录任务,主要逻辑如下:
|
||||
* 初始化配置并构造请求URL及参数;
|
||||
* 发送POST网络请求到指定地址;
|
||||
* 解析返回结果:
|
||||
* 若成功(code == 1),执行文件权限修改并设置相关数据;
|
||||
* 若失败,记录错误日志并调用setFinish;
|
||||
* 捕获异常并处理错误。
|
||||
*/
|
||||
fun execReloginTask(context: Context) {
|
||||
ConfigManager.init()
|
||||
|
@ -220,11 +196,13 @@ object TaskUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* 初始化并构建请求参数:获取设备唯一 ID(ANDROID_ID),拼接请求 URL。
|
||||
* 发送 POST 请求:通过 MyPost.postData 向服务器提交安装请求。
|
||||
* 处理响应结果:
|
||||
* 成功时解析 JSON 数据、设置权限,并触发 clickTime 为 1 表示需执行点击操作。
|
||||
* 失败或异常时调用 setFinish 结束任务。
|
||||
* 该函数execInstallTask的功能是执行安装任务,主要逻辑如下:
|
||||
* 初始化配置并构建请求地址与参数;
|
||||
* 发送POST网络请求到指定URL;
|
||||
* 解析返回结果:
|
||||
* 若成功(code == 1),修改文件权限并执行设置JSON数据操作;
|
||||
* 若失败,记录错误日志并调用setFinish;
|
||||
* 捕获异常并记录错误信息。
|
||||
*/
|
||||
fun execInstallTask(context: Context) {
|
||||
ConfigManager.init()
|
||||
|
@ -266,10 +244,12 @@ object TaskUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* 根据随机条件执行任务。
|
||||
* 在运行Relogin任务和安装任务之间交替。
|
||||
*
|
||||
* @param上下文执行任务执行的上下文
|
||||
* 该函数execTask的功能是随机执行重新登录或安装任务,具体逻辑如下:
|
||||
* 增加随机数计数器;
|
||||
* 删除插件文件;
|
||||
* 根据计数器决定执行:
|
||||
* 每3次调用执行一次execReloginTask;
|
||||
* 其余情况执行execInstallTask。
|
||||
*/
|
||||
fun execTask(context: Context) {
|
||||
nRandom++
|
||||
|
|
Loading…
Reference in New Issue