留存文件恢复
This commit is contained in:
parent
2e26323913
commit
940929a50b
|
@ -24,13 +24,6 @@ class OpenAppService : JobIntentService() {
|
||||||
override fun onHandleWork(intent: Intent) {
|
override fun onHandleWork(intent: Intent) {
|
||||||
println("IOSTQ:isCanAuto() == " + isCanAuto)
|
println("IOSTQ:isCanAuto() == " + isCanAuto)
|
||||||
println("IOSTQ:getCanAutoLc() == " + canAutoLc)
|
println("IOSTQ:getCanAutoLc() == " + canAutoLc)
|
||||||
recordPackageName?.let {
|
|
||||||
ServiceUtils.setEnableApp(it, true)
|
|
||||||
}
|
|
||||||
ServiceUtils.setEnableApp("org.mozilla.firefox", true)
|
|
||||||
ServiceUtils.setEnableApp("com.google.android.webview", true)
|
|
||||||
ServiceUtils.setEnableApp("com.android.chrome", true)
|
|
||||||
ServiceUtils.setEnableApp("com.UCMobile", true)
|
|
||||||
try {
|
try {
|
||||||
ChangeDeviceInfoUtil.changeDevice(callBack = object : ChangeCallBack {
|
ChangeDeviceInfoUtil.changeDevice(callBack = object : ChangeCallBack {
|
||||||
override fun changeSuccess() {
|
override fun changeSuccess() {
|
||||||
|
|
|
@ -35,7 +35,6 @@ import com.android.grape.data.AppState.isNeedRestored
|
||||||
import com.android.grape.data.AppState.keepOpen
|
import com.android.grape.data.AppState.keepOpen
|
||||||
import com.android.grape.data.AppState.lang
|
import com.android.grape.data.AppState.lang
|
||||||
import com.android.grape.data.AppState.logBuffer
|
import com.android.grape.data.AppState.logBuffer
|
||||||
import com.android.grape.data.AppState.paramsJson
|
|
||||||
import com.android.grape.data.AppState.proxyCountry
|
import com.android.grape.data.AppState.proxyCountry
|
||||||
import com.android.grape.data.AppState.proxyIp
|
import com.android.grape.data.AppState.proxyIp
|
||||||
import com.android.grape.data.AppState.proxyPort
|
import com.android.grape.data.AppState.proxyPort
|
||||||
|
@ -93,7 +92,6 @@ object ConfigManager {
|
||||||
isNeedRestored = false
|
isNeedRestored = false
|
||||||
taskJson = null
|
taskJson = null
|
||||||
installRet = false
|
installRet = false
|
||||||
paramsJson = null
|
|
||||||
recordPackageName = null
|
recordPackageName = null
|
||||||
recordFileName = null
|
recordFileName = null
|
||||||
recordExtraFileName = null
|
recordExtraFileName = null
|
||||||
|
|
|
@ -1,23 +1,7 @@
|
||||||
package com.android.grape.net
|
package com.android.grape.net
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.android.grape.data.AppState
|
|
||||||
import com.android.grape.data.AppState.clickServerTimeFromGP
|
|
||||||
import com.android.grape.data.AppState.clickTime
|
|
||||||
import com.android.grape.data.AppState.instalTimeFromGp
|
|
||||||
import com.android.grape.data.AppState.installTime
|
|
||||||
import com.android.grape.data.AppState.lastUpdateTime
|
|
||||||
import com.android.grape.data.AppState.paramsJson
|
|
||||||
import com.android.grape.data.AppState.recordPackageName
|
|
||||||
import com.android.grape.data.AppState.referer
|
|
||||||
import com.android.grape.data.AppState.taskJson
|
|
||||||
import com.android.grape.manager.TrackingManager.genInstallTimeFromGP
|
|
||||||
import com.android.grape.util.DeviceUtils.getGoogleAdId
|
|
||||||
import com.android.grape.util.FileUtils
|
import com.android.grape.util.FileUtils
|
||||||
import com.android.grape.util.ServiceUtils
|
|
||||||
import com.android.grape.util.TaskUtils
|
|
||||||
import com.blankj.utilcode.util.LogUtils
|
|
||||||
import java.io.BufferedInputStream
|
import java.io.BufferedInputStream
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -28,7 +12,6 @@ import java.io.OutputStream
|
||||||
import java.io.UnsupportedEncodingException
|
import java.io.UnsupportedEncodingException
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.net.URLDecoder
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Time: 2025-07-16 16:07
|
* @Time: 2025-07-16 16:07
|
||||||
|
@ -39,90 +22,6 @@ import java.net.URLDecoder
|
||||||
*/
|
*/
|
||||||
object AfClient {
|
object AfClient {
|
||||||
|
|
||||||
@Throws(IOException::class)
|
|
||||||
fun setInfo(context: Context): Boolean {
|
|
||||||
val url = "http://127.0.0.1:8090/ctl/setinfo"
|
|
||||||
|
|
||||||
//安装时间
|
|
||||||
try {
|
|
||||||
clickTime = taskJson!!.getLong("clickTime")
|
|
||||||
val deviceJo = paramsJson!!.getJSONObject("device")
|
|
||||||
// installTimeFromGP = (long) (clickTime / 1000) + (clickTime % 7) + 3;
|
|
||||||
installTime = System.currentTimeMillis()
|
|
||||||
Thread.sleep(2000)
|
|
||||||
Log.d("IOSTQ:installTime == ", installTime.toString() + "")
|
|
||||||
Log.d("IOSTQ:clickTime == ", clickTime.toString() + "")
|
|
||||||
val time = genInstallTimeFromGP(clickTime, installTime)
|
|
||||||
// installTimeFromGP = firstInstallTime / 1000;
|
|
||||||
installTime = System.currentTimeMillis()
|
|
||||||
lastUpdateTime = installTime
|
|
||||||
LogUtils.d("IOSTQ:lastUpdateTime ", lastUpdateTime.toString() + "")
|
|
||||||
deviceJo.put("firstInstallTime", installTime)
|
|
||||||
deviceJo.put("lastUpdateTime", lastUpdateTime)
|
|
||||||
deviceJo.put("installTimeFromGP", instalTimeFromGp)
|
|
||||||
val installServerTimeFromGP = time[1] // + (installTimeFromGP % 2) + 1;
|
|
||||||
deviceJo.put("installServerTimeFromGP", installServerTimeFromGP)
|
|
||||||
val clickTimeToGp = (clickTime / 1000)
|
|
||||||
deviceJo.put("clickTimeToGP", clickTimeToGp)
|
|
||||||
val clickServerTimeToGP = time[0] / 1000 // + (clickTimeToGp % 2) + 1;
|
|
||||||
deviceJo.put("clickServerTimeToGP", clickServerTimeToGP)
|
|
||||||
|
|
||||||
AppState.installServerTimeFromGP = installServerTimeFromGP
|
|
||||||
clickServerTimeFromGP = clickServerTimeToGP
|
|
||||||
|
|
||||||
if (taskJson!!.has("clickData")) {
|
|
||||||
val clickdata = taskJson!!.getJSONObject("clickData")
|
|
||||||
if (clickdata.has("referer") && clickdata.getString("referer").length > 10) {
|
|
||||||
referer = clickdata.getString("referer")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
referer = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
if (referer != null && referer!!.length > 10) {
|
|
||||||
deviceJo.put("referrerFromGP", URLDecoder.decode(referer, "UTF-8"))
|
|
||||||
} else {
|
|
||||||
deviceJo.put("referrerFromGP", "utm_source=google-play&utm_medium=organic")
|
|
||||||
deviceJo.put("clickServerTimeToGP", 0)
|
|
||||||
deviceJo.put("clickTimeToGP", 0)
|
|
||||||
deviceJo.put("installTimeFromGP", 0)
|
|
||||||
deviceJo.put("installServerTimeFromGP", 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
//JSONObject proxyJo = paramsJson.getJSONObject("proxy");
|
|
||||||
//proxyJo.put("forwardIp", Util.getDelegateIp());
|
|
||||||
Log.d("IOSTQ", "firstInstalTime == " + installTime)
|
|
||||||
Log.d("IOSTQ", "paramsJson == " + paramsJson)
|
|
||||||
val origin_gaid: String = getGoogleAdId(context) ?: ""
|
|
||||||
deviceJo.put("origin_gaid", origin_gaid)
|
|
||||||
paramsJson!!.put("device", deviceJo)
|
|
||||||
val params = paramsJson.toString()
|
|
||||||
ServiceUtils.setEnableApp(recordPackageName ?: "", true)
|
|
||||||
ServiceUtils.setEnableApp("org.mozilla.firefox", true)
|
|
||||||
ServiceUtils.setEnableApp("com.google.android.webview", true)
|
|
||||||
ServiceUtils.setEnableApp("com.android.chrome", true)
|
|
||||||
|
|
||||||
ServiceUtils.writeFile("/data/system/device.txt", params)
|
|
||||||
Log.d("IOSTQ:param == ", params)
|
|
||||||
// paramsJson.put("proxy", proxyJo);
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.d("IOSTQ", e.message!!)
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
|
|
||||||
// printStr("execSetJson params:"+params);
|
|
||||||
|
|
||||||
// writeFileToSDCard(params);
|
|
||||||
try {
|
|
||||||
// String ret = new MyPost().PostData(context, params.getBytes("utf-8"), url);
|
|
||||||
|
|
||||||
// Log.i("TaskUtils", "set info ret : " + ret);
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
fun downloadFile(httpUrl: String, fileName: String): Boolean {
|
fun downloadFile(httpUrl: String, fileName: String): Boolean {
|
||||||
Log.i(
|
Log.i(
|
||||||
"AfClient",
|
"AfClient",
|
||||||
|
|
|
@ -222,16 +222,15 @@ object AppUtils {
|
||||||
val file = File(getRecordSdcardApkVerFileName(context))
|
val file = File(getRecordSdcardApkVerFileName(context))
|
||||||
var extraFile: File? = null
|
var extraFile: File? = null
|
||||||
if (recordExtraFileName?.isNotEmpty() == true) {
|
if (recordExtraFileName?.isNotEmpty() == true) {
|
||||||
extraFile = File(ContextUtils.getRecordExtraFileName(context))
|
extraFile = File(getRecordExtraFileName(context))
|
||||||
}
|
}
|
||||||
|
|
||||||
installRet = installApk(context, file, extraFile) && AppUtils.checkAppInstalled(
|
installRet = installApk(context, file, extraFile) && checkAppInstalled(
|
||||||
context,
|
context,
|
||||||
recordPackageName
|
recordPackageName
|
||||||
)
|
)
|
||||||
|
|
||||||
if (installRet && !videoProxy.contains("123.56.44.45")) {
|
if (installRet && !videoProxy.contains("123.56.44.45")) {
|
||||||
//检查是否有新版本
|
|
||||||
file.delete()
|
file.delete()
|
||||||
extraFile?.delete()
|
extraFile?.delete()
|
||||||
}
|
}
|
||||||
|
@ -617,17 +616,12 @@ object AppUtils {
|
||||||
ret = downloadFile(extraUrl, getRecordExtraFileName(context))
|
ret = downloadFile(extraUrl, getRecordExtraFileName(context))
|
||||||
}
|
}
|
||||||
if (isNeedRestored) {
|
if (isNeedRestored) {
|
||||||
println("IOSTQ:开始下载留存文件")
|
Log.i("AppUtils","IOSTQ:开始下载留存文件")
|
||||||
taskJson?.let {
|
taskJson?.let {
|
||||||
if (it.has("BackupFileUrl1") && it.getString("BackupFileUrl1")
|
if (it.has("BackupFileUrl1") && it.getString("BackupFileUrl1")
|
||||||
.isNotEmpty()
|
.isNotEmpty()
|
||||||
) {
|
) {
|
||||||
var restored_zip =
|
var restored_zip = "http://47.83.1.116/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")
|
|
||||||
}
|
|
||||||
ret = downloadFile(restored_zip, getRecordDataFileName(context))
|
ret = downloadFile(restored_zip, getRecordDataFileName(context))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,8 +56,7 @@ object BackupUtils {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
val zipDirName = getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName
|
val zipDirName = getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName
|
||||||
val zipFileName =
|
val zipFileName = getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName + ".zip"
|
||||||
getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName + ".zip"
|
|
||||||
Log.i(
|
Log.i(
|
||||||
"BackupUtils",
|
"BackupUtils",
|
||||||
"backupDataFile-> zipDirName:$zipDirName ; zipFileName:$zipFileName"
|
"backupDataFile-> zipDirName:$zipDirName ; zipFileName:$zipFileName"
|
||||||
|
@ -91,6 +90,7 @@ object BackupUtils {
|
||||||
getRecordTxtFileName(context)
|
getRecordTxtFileName(context)
|
||||||
)
|
)
|
||||||
chownSh(getMonitorDir(context), uid)
|
chownSh(getMonitorDir(context), uid)
|
||||||
|
Log.d("TAG", "backupDataFile: ------------------>")
|
||||||
val copySucc = FileUtils.copyFolderSh(apkDataPath,zipDirName)
|
val copySucc = FileUtils.copyFolderSh(apkDataPath,zipDirName)
|
||||||
Log.i("BackupUtils", "copyFolder($apkDataPath,$zipDirName) = $copySucc")
|
Log.i("BackupUtils", "copyFolder($apkDataPath,$zipDirName) = $copySucc")
|
||||||
if (copySucc) {
|
if (copySucc) {
|
||||||
|
@ -344,8 +344,11 @@ object BackupUtils {
|
||||||
if (reloginDataDir == null) {
|
if (reloginDataDir == null) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
val dataFile = File("$dataDir$recordPackageName")
|
||||||
unZipFileSh(zipFile, dataDir)
|
if (!dataFile.exists()) {
|
||||||
|
dataFile.mkdir()
|
||||||
|
}
|
||||||
|
unZipFileSh(zipFile, dataFile.absolutePath)
|
||||||
|
|
||||||
val userAnGroup = getUserAndGroupSh(
|
val userAnGroup = getUserAndGroupSh(
|
||||||
context,
|
context,
|
||||||
|
@ -355,7 +358,7 @@ object BackupUtils {
|
||||||
Log.i("BackupUtils", "recoverRecordData->userAndGroup:$userAnGroup")
|
Log.i("BackupUtils", "recoverRecordData->userAndGroup:$userAnGroup")
|
||||||
File(reloginDataDir).parentFile?.absolutePath?.let {
|
File(reloginDataDir).parentFile?.absolutePath?.let {
|
||||||
copyFolderSh(
|
copyFolderSh(
|
||||||
"$dataDir/$recordPackageName",
|
"$dataDir$recordPackageName",
|
||||||
it
|
it
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,17 +135,18 @@ object FileUtils {
|
||||||
|
|
||||||
public fun forceMakeDir(file: File) {
|
public fun forceMakeDir(file: File) {
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
val parent = file.parentFile
|
file.mkdirs()
|
||||||
|
// val parent = file.parentFile
|
||||||
parent?.exists()?.let {
|
//
|
||||||
if (!it) {
|
// parent?.exists()?.let {
|
||||||
MockTools.exec("mkdir $parent")
|
// if (!it) {
|
||||||
forceMakeDir(parent)
|
// MockTools.exec("mkdir $parent")
|
||||||
// file.mkdirs();
|
// forceMakeDir(parent)
|
||||||
} else {
|
// // file.mkdirs();
|
||||||
MockTools.exec("mkdir $file")
|
// } else {
|
||||||
}
|
// MockTools.exec("mkdir $file")
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,8 +279,7 @@ object FileUtils {
|
||||||
"start zipSh : $zipDirName ; $zipFileName"
|
"start zipSh : $zipDirName ; $zipFileName"
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
val zipDir = File(zipDirName)
|
val cmdString = "tar -zcvf $zipFileName -C $zipDirName ."
|
||||||
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)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
@ -575,7 +575,7 @@ object FileUtils {
|
||||||
|
|
||||||
fun writeAfLog() {
|
fun writeAfLog() {
|
||||||
val filePath = "/data/data/${recordPackageName}/log.txt"
|
val filePath = "/data/data/${recordPackageName}/log.txt"
|
||||||
ShellUtils.execRootCmdAndGetResult("chmod 777 $filePath")
|
ShellUtil.execRootCmdAndGetResult("chmod 777 $filePath")
|
||||||
val afLog = ShellUtil.execRootCmdAndGetResult("cat $filePath")
|
val afLog = ShellUtil.execRootCmdAndGetResult("cat $filePath")
|
||||||
val file = File(
|
val file = File(
|
||||||
Environment.getExternalStorageDirectory(),
|
Environment.getExternalStorageDirectory(),
|
||||||
|
@ -610,20 +610,20 @@ object FileUtils {
|
||||||
// 构造安全命令
|
// 构造安全命令
|
||||||
val filePath = "/data/data/$packageName/device.txt"
|
val filePath = "/data/data/$packageName/device.txt"
|
||||||
val cmd = "sh -c 'printf %s '\''" + base64Content + "'\'' > " + filePath + "'"
|
val cmd = "sh -c 'printf %s '\''" + base64Content + "'\'' > " + filePath + "'"
|
||||||
val result = ShellUtils.execRootCmdAndGetResult(cmd)
|
val result = ShellUtil.execRootCmdAndGetResult(cmd)
|
||||||
ShellUtils.execRootCmdAndGetResult("chmod 777 $filePath")
|
ShellUtil.execRootCmdAndGetResult("chmod 777 $filePath")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun runPlugin(packageName: String) {
|
fun runPlugin(packageName: String) {
|
||||||
val cmd =
|
val cmd =
|
||||||
"apmt patch add -n ArmCloudAF -p $packageName -f /sdcard/Download/ArmCloudAF_lo.apk"
|
"apmt patch add -n ArmCloudAF -p $packageName -f /sdcard/Download/ArmCloudAF_lo.apk"
|
||||||
val result = ShellUtils.execRootCmdAndGetResult(cmd)
|
val result = ShellUtil.execRootCmdAndGetResult(cmd)
|
||||||
LogUtils.d("FileUtils", "runPlugin: $result")
|
LogUtils.d("FileUtils", "runPlugin: $result")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deletePlugin() {
|
fun deletePlugin() {
|
||||||
val cmd = "apmt patch del -n ArmCloudAF"
|
val cmd = "apmt patch del -n ArmCloudAF"
|
||||||
val result = ShellUtils.execRootCmdAndGetResult(cmd)
|
val result = ShellUtil.execRootCmdAndGetResult(cmd)
|
||||||
LogUtils.d("FileUtils", "deletePlugin: $result")
|
LogUtils.d("FileUtils", "deletePlugin: $result")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -708,7 +708,7 @@ object FileUtils {
|
||||||
// 构造命令(注意 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("\"", "\\\"")
|
||||||
val cmd = "cp -r -f \"$safeOldPath\" \"$safeNewPath\""
|
val cmd = "cp -r -f \"$safeOldPath\"/* \"$safeNewPath\""
|
||||||
|
|
||||||
Log.i("TaskUtil", "copyFolderSh cmd: $cmd")
|
Log.i("TaskUtil", "copyFolderSh cmd: $cmd")
|
||||||
|
|
||||||
|
|
|
@ -5,26 +5,17 @@ import android.util.Log
|
||||||
import com.android.grape.data.AppState.appVersion
|
import com.android.grape.data.AppState.appVersion
|
||||||
import com.android.grape.data.AppState.appVersionCode
|
import com.android.grape.data.AppState.appVersionCode
|
||||||
import com.android.grape.data.AppState.backUpServerIp
|
import com.android.grape.data.AppState.backUpServerIp
|
||||||
import com.android.grape.data.AppState.cacheJson
|
|
||||||
import com.android.grape.data.AppState.canAutoLc
|
import com.android.grape.data.AppState.canAutoLc
|
||||||
import com.android.grape.data.AppState.clickServerTimeFromGP
|
|
||||||
import com.android.grape.data.AppState.clickTime
|
|
||||||
import com.android.grape.data.AppState.ctit
|
import com.android.grape.data.AppState.ctit
|
||||||
import com.android.grape.data.AppState.defaultPRoxyJo
|
|
||||||
import com.android.grape.data.AppState.forwardIp
|
import com.android.grape.data.AppState.forwardIp
|
||||||
import com.android.grape.data.AppState.fuzzy_domain
|
import com.android.grape.data.AppState.fuzzy_domain
|
||||||
import com.android.grape.data.AppState.fuzzy_proxy
|
import com.android.grape.data.AppState.fuzzy_proxy
|
||||||
import com.android.grape.data.AppState.instalTimeFromGp
|
|
||||||
import com.android.grape.data.AppState.installServerTimeFromGP
|
|
||||||
import com.android.grape.data.AppState.installTime
|
|
||||||
import com.android.grape.data.AppState.isCanAuto
|
import com.android.grape.data.AppState.isCanAuto
|
||||||
import com.android.grape.data.AppState.isNeedBackup
|
import com.android.grape.data.AppState.isNeedBackup
|
||||||
import com.android.grape.data.AppState.isNeedReg
|
import com.android.grape.data.AppState.isNeedReg
|
||||||
import com.android.grape.data.AppState.isNeedRestored
|
import com.android.grape.data.AppState.isNeedRestored
|
||||||
import com.android.grape.data.AppState.keepOpen
|
import com.android.grape.data.AppState.keepOpen
|
||||||
import com.android.grape.data.AppState.lang
|
import com.android.grape.data.AppState.lang
|
||||||
import com.android.grape.data.AppState.lastUpdateTime
|
|
||||||
import com.android.grape.data.AppState.paramsJson
|
|
||||||
import com.android.grape.data.AppState.preClickRecordId
|
import com.android.grape.data.AppState.preClickRecordId
|
||||||
import com.android.grape.data.AppState.proxyCountry
|
import com.android.grape.data.AppState.proxyCountry
|
||||||
import com.android.grape.data.AppState.proxyIp
|
import com.android.grape.data.AppState.proxyIp
|
||||||
|
@ -32,27 +23,15 @@ import com.android.grape.data.AppState.proxyPort
|
||||||
import com.android.grape.data.AppState.recordFileName
|
import com.android.grape.data.AppState.recordFileName
|
||||||
import com.android.grape.data.AppState.recordId
|
import com.android.grape.data.AppState.recordId
|
||||||
import com.android.grape.data.AppState.recordPackageName
|
import com.android.grape.data.AppState.recordPackageName
|
||||||
import com.android.grape.data.AppState.referer
|
|
||||||
import com.android.grape.data.AppState.regEmailJson
|
|
||||||
import com.android.grape.data.AppState.reloginRecordId
|
import com.android.grape.data.AppState.reloginRecordId
|
||||||
import com.android.grape.data.AppState.scriptOpenApp
|
import com.android.grape.data.AppState.scriptOpenApp
|
||||||
import com.android.grape.data.AppState.taskJson
|
import com.android.grape.data.AppState.taskJson
|
||||||
import com.android.grape.data.AppState.trackingLink
|
import com.android.grape.data.AppState.trackingLink
|
||||||
import com.android.grape.data.AppState.ua
|
import com.android.grape.data.AppState.ua
|
||||||
import com.android.grape.data.AppState.videoProxy
|
import com.android.grape.data.AppState.videoProxy
|
||||||
import com.android.grape.net.AfClient.postData
|
|
||||||
import com.android.grape.util.DeviceUtils.getGoogleAdId
|
|
||||||
import com.android.grape.util.FileUtils.forceMakeDir
|
|
||||||
import com.android.grape.util.ServiceUtils.WriteFile
|
|
||||||
import com.android.grape.util.TaskUtils.execRecord
|
import com.android.grape.util.TaskUtils.execRecord
|
||||||
import com.android.grape.util.TaskUtils.getReferer
|
|
||||||
import com.android.grape.util.TaskUtils.setFinish
|
import com.android.grape.util.TaskUtils.setFinish
|
||||||
import com.android.grape.util.TaskUtils.setRecordExtraFileName
|
import com.android.grape.util.TaskUtils.setRecordExtraFileName
|
||||||
import com.blankj.utilcode.util.LogUtils
|
|
||||||
import org.json.JSONObject
|
|
||||||
import java.io.File
|
|
||||||
import java.io.IOException
|
|
||||||
import java.net.URLDecoder
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Time: 2025-20-16 17:20
|
* @Time: 2025-20-16 17:20
|
||||||
|
@ -207,165 +186,6 @@ object JsonUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过处理任务 JSON 对象并向参数 JSON 对象添加各种属性来初始化操作所需的 JSON 参数。
|
|
||||||
* 处理设备、优惠和其他相关数据,以准备完整的 JSON 结构。
|
|
||||||
*
|
|
||||||
* @param context 用于执行各种操作的应用程序上下文,例如在初始化期间写入文件和发送事件。
|
|
||||||
* 例如,在初始化期间写入文件和发送事件。
|
|
||||||
* @return 如果 JSON 参数初始化成功,则返回 true,否则返回 false
|
|
||||||
*/
|
|
||||||
fun initParamsJson(context: Context): Boolean {
|
|
||||||
paramsJson = JSONObject().apply {
|
|
||||||
try {
|
|
||||||
taskJson?.let {
|
|
||||||
val deviceJo = it.getJSONObject("device")
|
|
||||||
// LogUtils.d("deviceJo:$deviceJo")
|
|
||||||
val deviceParamJo: JSONObject = DeviceConvertUtil.MGConvert(deviceJo)
|
|
||||||
if (it.has("isCollectURL")) {
|
|
||||||
deviceJo.put("isCollectURL", true)
|
|
||||||
} else {
|
|
||||||
deviceJo.put("isCollectURL", false)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.has("regInfo")) {
|
|
||||||
val regInfo = it.getJSONObject("regInfo")
|
|
||||||
var apks = File("/sdcard/Download/GoogleAccount.txt")
|
|
||||||
if (!apks.exists()) {
|
|
||||||
forceMakeDir(File("/sdcard/Download"))
|
|
||||||
apks = File("/sdcard/Download/GoogleAccount.txt")
|
|
||||||
}
|
|
||||||
WriteFile(apks.toString(), regInfo.toString())
|
|
||||||
sendRegEvent(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
//add 20210409
|
|
||||||
val offerJo = it.getJSONObject("offer")
|
|
||||||
val apkprop = it.getJSONObject("apkProp")
|
|
||||||
val thirdDetect = offerJo.getString("thirdDetect")
|
|
||||||
if ("appsflyer".equals(thirdDetect, ignoreCase = true)) {
|
|
||||||
deviceParamJo.put("afVersion", offerJo.getString("thirdVer"))
|
|
||||||
}
|
|
||||||
deviceParamJo.put("installVersionFromGP", offerJo.getString("apkVer"))
|
|
||||||
|
|
||||||
put("device", deviceParamJo)
|
|
||||||
|
|
||||||
if (it.has("expand")) {
|
|
||||||
put("expand", it.getJSONObject("expand"))
|
|
||||||
}
|
|
||||||
put("offer", offerJo)
|
|
||||||
val proxyJo = defaultPRoxyJo
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
|
|
||||||
Log.i("JsonUtils", "initParamsJson error : " + e.message)
|
|
||||||
setFinish(context)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
@Throws(IOException::class)
|
|
||||||
fun setRrInfo(context: Context): Boolean {
|
|
||||||
try {
|
|
||||||
clickTime = taskJson!!.getLong("clickTime")
|
|
||||||
val deviceJo = paramsJson!!.getJSONObject("device")
|
|
||||||
|
|
||||||
if (isNeedRestored) {
|
|
||||||
if (cacheJson != null) {
|
|
||||||
installTime =
|
|
||||||
cacheJson.getLong("firstInstallTime")
|
|
||||||
lastUpdateTime =
|
|
||||||
cacheJson.getLong("lastUpdateTime")
|
|
||||||
installServerTimeFromGP =
|
|
||||||
cacheJson.getLong("installServerTimeFromGP")
|
|
||||||
clickServerTimeFromGP =
|
|
||||||
cacheJson.getLong("clickServerTimeToGP")
|
|
||||||
instalTimeFromGp =
|
|
||||||
cacheJson.getLong("installTimeFromGP")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
deviceJo.put("firstInstallTime", installTime)
|
|
||||||
deviceJo.put("lastUpdateTime", lastUpdateTime)
|
|
||||||
deviceJo.put("installTimeFromGP", instalTimeFromGp)
|
|
||||||
val installServerTimeFromGP = installServerTimeFromGP
|
|
||||||
deviceJo.put("installServerTimeFromGP", installServerTimeFromGP)
|
|
||||||
val clickTimeToGp = (clickTime / 1000)
|
|
||||||
deviceJo.put("clickTimeToGP", clickTimeToGp)
|
|
||||||
val clickServerTimeToGP = clickServerTimeFromGP
|
|
||||||
deviceJo.put("clickServerTimeToGP", clickServerTimeToGP)
|
|
||||||
|
|
||||||
|
|
||||||
if (taskJson!!.has("clickData")) {
|
|
||||||
val clickdata = taskJson!!.getJSONObject("clickData")
|
|
||||||
if (clickdata.has("referer")) {
|
|
||||||
referer = clickdata.getString("referer")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getReferer() != null) {
|
|
||||||
deviceJo.put("referrerFromGP", URLDecoder.decode(getReferer(), "UTF-8"))
|
|
||||||
} else {
|
|
||||||
deviceJo.put("referrerFromGP", "utm_source=google-play&utm_medium=organic")
|
|
||||||
deviceJo.put("clickServerTimeToGP", 0)
|
|
||||||
deviceJo.put("clickTimeToGP", 0)
|
|
||||||
deviceJo.put("installTimeFromGP", 0)
|
|
||||||
deviceJo.put("installServerTimeFromGP", 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
val origin_gaid: String = getGoogleAdId(context) ?: ""
|
|
||||||
deviceJo.put("origin_gaid", origin_gaid)
|
|
||||||
paramsJson!!.put("device", deviceJo)
|
|
||||||
val params = paramsJson.toString()
|
|
||||||
ServiceUtils.setEnableApp(recordPackageName ?: "", true)
|
|
||||||
ServiceUtils.setEnableApp("org.mozilla.firefox", true)
|
|
||||||
ServiceUtils.setEnableApp("com.google.android.webview", true)
|
|
||||||
ServiceUtils.setEnableApp("com.android.chrome", true)
|
|
||||||
|
|
||||||
ServiceUtils.writeFile("/data/system/device.txt", params)
|
|
||||||
Log.d("IOSTQ:param == ", params)
|
|
||||||
return true
|
|
||||||
// paramsJson.put("proxy", proxyJo);
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过向指定的服务器URL提出邮政请求来发送注册事件。
|
|
||||||
*
|
|
||||||
* @param上下文调用该方法的上下文,用于执行网络操作
|
|
||||||
* @return True如果已成功处理注册事件;错误,如果操作期间发生错误
|
|
||||||
*/
|
|
||||||
private fun sendRegEvent(context: Context): Boolean {
|
|
||||||
val url = "http://123.56.44.45/tt/ddj/reg.do?recordId=$recordId"
|
|
||||||
|
|
||||||
Log.i("JsonUtils", "url:$url")
|
|
||||||
|
|
||||||
try {
|
|
||||||
val ret: String? = postData("".toByteArray(), url)
|
|
||||||
Log.i("JsonUtils", "ret:$ret")
|
|
||||||
|
|
||||||
val jo = JSONObject(ret ?: "")
|
|
||||||
|
|
||||||
if (jo.getInt("code") == 1) {
|
|
||||||
regEmailJson = jo.getJSONObject("emailInfo")
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在JSON配置上执行一组操作。它删除了特定的日志文件,处理JSON参数,
|
* 在JSON配置上执行一组操作。它删除了特定的日志文件,处理JSON参数,
|
||||||
* 并记录所需的数据。如果例外,它会记录错误并执行清理。
|
* 并记录所需的数据。如果例外,它会记录错误并执行清理。
|
||||||
|
@ -376,10 +196,8 @@ object JsonUtils {
|
||||||
@Throws(Exception::class)
|
@Throws(Exception::class)
|
||||||
fun execSetJson(context: Context) {
|
fun execSetJson(context: Context) {
|
||||||
try {
|
try {
|
||||||
JsonUtils.afterJson()
|
afterJson()
|
||||||
if (JsonUtils.initParamsJson(context)) {
|
execRecord(context)
|
||||||
execRecord(context)
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
Log.i("TaskUtils", "execSetJson error : " + e.message)
|
Log.i("TaskUtils", "execSetJson error : " + e.message)
|
||||||
|
|
|
@ -512,7 +512,7 @@ object ShellUtils {
|
||||||
|
|
||||||
fun unZipFileSh(zipFileName: String, dataDir: String) {
|
fun unZipFileSh(zipFileName: String, dataDir: String) {
|
||||||
try {
|
try {
|
||||||
val cmdString = "tar -zxvf $zipFileName --strip-components=1 -C $dataDir"
|
val cmdString = "tar -zxvf $zipFileName -C $dataDir"
|
||||||
Log.i("ShellUtils", "unZipFileSh-> cmd:$cmdString")
|
Log.i("ShellUtils", "unZipFileSh-> cmd:$cmdString")
|
||||||
MockTools.exec(cmdString)
|
MockTools.exec(cmdString)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|
|
@ -7,59 +7,45 @@ import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.android.grape.net.AfClient.downloadFile
|
|
||||||
import com.android.grape.MainApplication
|
import com.android.grape.MainApplication
|
||||||
import com.android.grape.data.AppState
|
import com.android.grape.data.AppState
|
||||||
import com.android.grape.data.AppState.afLog
|
import com.android.grape.data.AppState.afLog
|
||||||
import com.android.grape.data.AppState.apkDir
|
import com.android.grape.data.AppState.apk_path
|
||||||
import com.android.grape.data.AppState.appDataUrl
|
import com.android.grape.data.AppState.appDataUrl
|
||||||
|
import com.android.grape.data.AppState.baoming
|
||||||
import com.android.grape.data.AppState.canAutoLc
|
import com.android.grape.data.AppState.canAutoLc
|
||||||
import com.android.grape.data.AppState.clickTime
|
import com.android.grape.data.AppState.clickTime
|
||||||
import com.android.grape.data.AppState.installRet
|
import com.android.grape.data.AppState.installRet
|
||||||
import com.android.grape.data.AppState.isCanAuto
|
import com.android.grape.data.AppState.isCanAuto
|
||||||
import com.android.grape.data.AppState.logBuffer
|
import com.android.grape.data.AppState.logBuffer
|
||||||
import com.android.grape.data.AppState.monitorDir
|
|
||||||
import com.android.grape.data.AppState.nRandom
|
import com.android.grape.data.AppState.nRandom
|
||||||
import com.android.grape.data.AppState.paramsJson
|
|
||||||
import com.android.grape.data.AppState.recordExtraFileName
|
import com.android.grape.data.AppState.recordExtraFileName
|
||||||
import com.android.grape.data.AppState.recordFileName
|
|
||||||
import com.android.grape.data.AppState.recordPackageName
|
import com.android.grape.data.AppState.recordPackageName
|
||||||
import com.android.grape.data.AppState.referer
|
import com.android.grape.data.AppState.referer
|
||||||
import com.android.grape.data.AppState.regEmailJson
|
import com.android.grape.data.AppState.regEmailJson
|
||||||
import com.android.grape.data.AppState.scriptOpenApp
|
import com.android.grape.data.AppState.scriptOpenApp
|
||||||
import com.android.grape.data.AppState.baoming
|
|
||||||
|
|
||||||
import com.android.grape.util.FileUtils.getName
|
|
||||||
|
|
||||||
import com.android.grape.data.AppState.zip_name
|
|
||||||
|
|
||||||
import com.android.grape.data.AppState.apk_path
|
|
||||||
|
|
||||||
import com.android.grape.net.AfClient.postData
|
|
||||||
|
|
||||||
import com.android.grape.util.ContextUtils.getRecordDataDirName
|
|
||||||
|
|
||||||
import com.android.grape.data.AppState.taskJson
|
import com.android.grape.data.AppState.taskJson
|
||||||
|
import com.android.grape.data.AppState.zip_name
|
||||||
import com.android.grape.job.DownloadAppJobService
|
import com.android.grape.job.DownloadAppJobService
|
||||||
import com.android.grape.job.MonitorService
|
import com.android.grape.job.MonitorService
|
||||||
import com.android.grape.job.UnInstallService
|
import com.android.grape.job.UnInstallService
|
||||||
import com.android.grape.manager.ConfigManager
|
import com.android.grape.manager.ConfigManager
|
||||||
import com.android.grape.manager.ConfigManager.initDefaultAppJo
|
import com.android.grape.manager.ConfigManager.initDefaultAppJo
|
||||||
import com.android.grape.manager.ConfigManager.initDefaultProxyJo
|
import com.android.grape.manager.ConfigManager.initDefaultProxyJo
|
||||||
import com.android.grape.sai.Utils
|
import com.android.grape.net.AfClient.downloadFile
|
||||||
|
import com.android.grape.net.AfClient.postData
|
||||||
import com.android.grape.util.AppUtils.execTargetApp
|
import com.android.grape.util.AppUtils.execTargetApp
|
||||||
import com.android.grape.util.AppUtils.getApkPackageName
|
import com.android.grape.util.AppUtils.getApkPackageName
|
||||||
import com.android.grape.util.AppUtils.setTopApp
|
import com.android.grape.util.AppUtils.setTopApp
|
||||||
import com.android.grape.util.ContextUtils.getBaseFilesDir
|
import com.android.grape.util.ContextUtils.getRecordDataDirName
|
||||||
import com.android.grape.util.FileUtils.forceMakeDir
|
import com.android.grape.util.FileUtils.forceMakeDir
|
||||||
|
import com.android.grape.util.FileUtils.getName
|
||||||
import com.android.grape.util.FileUtils.getRecordDataFileName
|
import com.android.grape.util.FileUtils.getRecordDataFileName
|
||||||
import com.android.grape.util.JsonUtils.execSetJson
|
import com.android.grape.util.JsonUtils.execSetJson
|
||||||
import com.blankj.utilcode.util.LogUtils
|
import com.blankj.utilcode.util.LogUtils
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.PrintWriter
|
|
||||||
import java.util.Locale
|
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -201,20 +187,16 @@ object TaskUtils {
|
||||||
)
|
)
|
||||||
LogUtils.d("IOSTQ:execReloginTask->result:$result")
|
LogUtils.d("IOSTQ:execReloginTask->result:$result")
|
||||||
if (result != null && result.isNotEmpty()) {
|
if (result != null && result.isNotEmpty()) {
|
||||||
taskJson = JSONObject(result).apply {
|
taskJson = JSONObject(result)
|
||||||
val code = getInt("code")
|
val code = taskJson?.getInt("code")
|
||||||
if (code == 1) {
|
if (code == 1) {
|
||||||
MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor")
|
MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor")
|
||||||
MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor/apks")
|
MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor/apks")
|
||||||
JsonUtils.execSetJson(context)
|
execSetJson(context)
|
||||||
clickTime = 1
|
clickTime = 1
|
||||||
} else {
|
} else {
|
||||||
Log.i(
|
Log.i("TaskUtils", "request result code invalid : $code")
|
||||||
"TaskUtils",
|
setFinish(context)
|
||||||
"request result code invalid : $code"
|
|
||||||
)
|
|
||||||
setFinish(context)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.i("TaskUtils", "request result is null")
|
Log.i("TaskUtils", "request result is null")
|
||||||
|
@ -333,23 +315,6 @@ object TaskUtils {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val paramString: String
|
|
||||||
get() = paramsJson.toString()
|
|
||||||
|
|
||||||
|
|
||||||
public fun notcl(context: Context) {
|
|
||||||
val url = "http://127.0.0.1:8090/ctl/notcl"
|
|
||||||
|
|
||||||
try {
|
|
||||||
val ret: String = postData("".toByteArray(charset("utf-8")), url) ?: ""
|
|
||||||
Log.i("TaskUtils", "notcl ret : $ret")
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fun openRecordApp(context: Context) {
|
fun openRecordApp(context: Context) {
|
||||||
if (scriptOpenApp == 0) {
|
if (scriptOpenApp == 0) {
|
||||||
recordPackageName?.let {
|
recordPackageName?.let {
|
||||||
|
|
Loading…
Reference in New Issue