diff --git a/app/build.gradle b/app/build.gradle index 30c71c5..47c886b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ plugins { } android { - namespace 'com.example.studyapp' + namespace 'com.example.retention' compileSdk 35 signingConfigs { diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 7632a3f..fcb656f 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -4,7 +4,7 @@ "type": "APK", "kind": "Directory" }, - "applicationId": "com.example.studyapp", + "applicationId": "com.example.retention", "variantName": "release", "elements": [ { diff --git a/app/src/androidTest/java/com/example/studyapp/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/studyapp/ExampleInstrumentedTest.java index 5a2d90e..b2f4be8 100644 --- a/app/src/androidTest/java/com/example/studyapp/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/example/studyapp/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.example.studyapp; +package com.example.retention; import android.content.Context; @@ -21,6 +21,6 @@ public class ExampleInstrumentedTest { public void useAppContext() { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.example.studyapp", appContext.getPackageName()); + assertEquals("com.example.retention", appContext.getPackageName()); } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1913d8f..59e670a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,7 +45,7 @@ android:theme="@style/Theme.StudyApp" tools:targetApi="31"> diff --git a/app/src/main/java/com/example/studyapp/MainActivity.java b/app/src/main/java/com/example/retention/MainActivity.java similarity index 95% rename from app/src/main/java/com/example/studyapp/MainActivity.java rename to app/src/main/java/com/example/retention/MainActivity.java index 832400b..a9fd35d 100644 --- a/app/src/main/java/com/example/studyapp/MainActivity.java +++ b/app/src/main/java/com/example/retention/MainActivity.java @@ -1,16 +1,13 @@ -package com.example.studyapp; +package com.example.retention; -import static com.example.studyapp.task.TaskUtil.infoUpload; -import static com.example.studyapp.utils.Utils.isNetworkAvailable; +import static com.example.retention.task.TaskUtil.infoUpload; +import static com.example.retention.utils.Utils.isNetworkAvailable; import android.app.Activity; import android.app.AlertDialog; import android.net.Uri; import android.content.Context; import android.content.Intent; -import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkCapabilities; import android.os.Build; import android.os.Bundle; import android.provider.Settings; @@ -30,20 +27,17 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.work.PeriodicWorkRequest; import androidx.work.WorkManager; -import com.example.studyapp.autoJS.AutoJsUtil; -import com.example.studyapp.device.ChangeDeviceInfoUtil; +import com.example.retention.R; +import com.example.retention.autoJS.AutoJsUtil; +import com.example.retention.device.ChangeDeviceInfoUtil; -import com.example.studyapp.proxy.ClashUtil; -import com.example.studyapp.service.MyAccessibilityService; -import com.example.studyapp.task.TaskUtil; -import com.example.studyapp.utils.LogFileUtil; -import com.example.studyapp.utils.ShellUtils; -import com.example.studyapp.utils.Utils; -import com.example.studyapp.utils.ZipUtils; -import com.example.studyapp.worker.CheckAccessibilityWorker; -import com.example.studyapp.worker.LoadDeviceWorker; +import com.example.retention.proxy.ClashUtil; +import com.example.retention.service.MyAccessibilityService; +import com.example.retention.task.TaskUtil; +import com.example.retention.utils.LogFileUtil; +import com.example.retention.worker.CheckAccessibilityWorker; +import com.example.retention.worker.LoadDeviceWorker; -import java.io.File; import java.lang.ref.WeakReference; import java.util.UUID; import java.util.concurrent.ExecutorService; diff --git a/app/src/main/java/com/example/retention/ScriptRepository.kt b/app/src/main/java/com/example/retention/ScriptRepository.kt new file mode 100644 index 0000000..55c4c2f --- /dev/null +++ b/app/src/main/java/com/example/retention/ScriptRepository.kt @@ -0,0 +1,4 @@ +package com.example.retention + +class ScriptRepository { +} \ No newline at end of file diff --git a/app/src/main/java/com/example/studyapp/autoJS/AutoJsUtil.java b/app/src/main/java/com/example/retention/autoJS/AutoJsUtil.java similarity index 96% rename from app/src/main/java/com/example/studyapp/autoJS/AutoJsUtil.java rename to app/src/main/java/com/example/retention/autoJS/AutoJsUtil.java index f962583..6bbb696 100644 --- a/app/src/main/java/com/example/studyapp/autoJS/AutoJsUtil.java +++ b/app/src/main/java/com/example/retention/autoJS/AutoJsUtil.java @@ -1,6 +1,6 @@ -package com.example.studyapp.autoJS; +package com.example.retention.autoJS; -import static com.example.studyapp.task.TaskUtil.downloadCodeFile; +import static com.example.retention.task.TaskUtil.downloadCodeFile; import android.content.BroadcastReceiver; import android.content.Context; @@ -14,9 +14,9 @@ import android.widget.Toast; import androidx.core.content.ContextCompat; -import com.example.studyapp.MainActivity; -import com.example.studyapp.utils.LogFileUtil; -import com.example.studyapp.utils.ShellUtils; +import com.example.retention.MainActivity; +import com.example.retention.utils.LogFileUtil; +import com.example.retention.utils.ShellUtils; import java.io.File; diff --git a/app/src/main/java/com/example/studyapp/config/ConfigLoader.java b/app/src/main/java/com/example/retention/config/ConfigLoader.java similarity index 95% rename from app/src/main/java/com/example/studyapp/config/ConfigLoader.java rename to app/src/main/java/com/example/retention/config/ConfigLoader.java index 2924262..9da6f3e 100644 --- a/app/src/main/java/com/example/studyapp/config/ConfigLoader.java +++ b/app/src/main/java/com/example/retention/config/ConfigLoader.java @@ -1,8 +1,8 @@ -package com.example.studyapp.config; +package com.example.retention.config; import android.content.Context; -import com.example.studyapp.utils.LogFileUtil; +import com.example.retention.utils.LogFileUtil; import org.json.JSONException; import org.json.JSONObject; diff --git a/app/src/main/java/com/example/studyapp/device/AF设备参数.txt b/app/src/main/java/com/example/retention/device/AF设备参数.txt similarity index 100% rename from app/src/main/java/com/example/studyapp/device/AF设备参数.txt rename to app/src/main/java/com/example/retention/device/AF设备参数.txt diff --git a/app/src/main/java/com/example/retention/device/ArmCloudApiClient.java b/app/src/main/java/com/example/retention/device/ArmCloudApiClient.java new file mode 100644 index 0000000..f7861a0 --- /dev/null +++ b/app/src/main/java/com/example/retention/device/ArmCloudApiClient.java @@ -0,0 +1,248 @@ +package com.example.retention.device; + +import android.util.Log; +import com.example.retention.utils.LogFileUtil; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.OkHttpClient.Builder; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * @Time: 2025-06-08 17:06 + * @Creator: 初屿贤 + * @File: ArmCloudApiClient + * @Project: study.App + * @Description: + */ +public class ArmCloudApiClient { + + private final OkHttpClient client; + private final String baseUrl; + private final String accessKey; + private final String secretKey; + + public ArmCloudApiClient(String baseUrl, String accessKey, String secretKey) { + this.client = new Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .readTimeout(10, TimeUnit.SECONDS) + .build(); + this.baseUrl = baseUrl; + this.accessKey = accessKey; + this.secretKey = secretKey; + } + + private static final String ALGORITHM = "HmacSHA256"; + + public static String calculateSignature(String timestamp, String path, String body, String secretKey) throws Exception { + String stringToSign = timestamp + path + (body != null ? body : ""); + Mac hmacSha256 = Mac.getInstance(ALGORITHM); + SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), ALGORITHM); + hmacSha256.init(secretKeySpec); + byte[] hash = hmacSha256.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); + return bytesToHex(hash); + } + + private static String bytesToHex(byte[] bytes) { + StringBuilder hexString = new StringBuilder(); + for (byte b : bytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + return hexString.toString(); + } + + /** + * 修改实例安卓改机属性 静态设置安卓改机属性,需要重启实例才能够生效,一般用于修改设备信息 该接口与修改实例属性接口的区别在于生效时机,该接口生效时间为每次开机初始化 设置实例属性后,属性数据会持久化存储,重启或重置实例无需再调用该接口 + * + * @param padCode 实例 ID,非空 + * @param props 属性映射,非空 + * @param restart 是否自动重启 + * @return 接口返回结果字符串 + * @throws IOException 请求失败或网络错误 + */ + public String updateAndroidModProperties(String padCode, Map props, boolean restart) throws IOException { + // 参数校验 + if (padCode == null || padCode.isEmpty()) { + throw new IllegalArgumentException("padCode 不能为空"); + } + if (props == null) { + throw new IllegalArgumentException("props 不能为 null"); + } + + // 构造请求体 + JSONObject json = new JSONObject(); + + try { + json.put("padCode", padCode); + json.put("props", new JSONObject(props)); + json.put("restart", restart); + } catch (JSONException e) { + LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateAndroidModProperties: JSON error", e); + } + + String jsonBody = json.toString(); + + // 生成时间戳 + String timestamp = String.valueOf(System.currentTimeMillis()); + + String API_PATH = "/openapi/open/pad/updatePadAndroidProp"; + + String signature = ""; + try { + signature = calculateSignature(timestamp, API_PATH, jsonBody, secretKey); + } catch (Exception e) { + LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateAndroidModProperties: Signature error", e); + } + + RequestBody body = RequestBody.create( + MediaType.parse("application/json; charset=utf-8"), + jsonBody + ); + + Request request = new Request.Builder() + .url(baseUrl + API_PATH) + .addHeader("authver", "2.0") + .addHeader("x-ak", accessKey) + .addHeader("x-timestamp", timestamp) + .addHeader("x-sign", signature) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new IOException("请求失败: " + response); + } + + ResponseBody responseBody = response.body(); + if (responseBody == null) { + throw new IOException("响应体为空"); + } + + return responseBody.string(); + } + } + + + /** + * 修改实例属性 动态修改实例的属性信息,包括系统属性和设置 实例需要处于开机状态,该接口为即时生效 + *

+ * 示例: String[] padCodes = new String[]{"AC21020010001"}; List systemProps = Arrays.asList( new PropertyItem("ro.build.id", "QQ3A.200805.001") + * ); List oaidProps = Arrays.asList( new PropertyItem("oaid", "001") ); + *

+ * String response = client.updateInstanceProperties( padCodes, null, // modemPersistProps null, // modemProps null, // systemPersistProps systemProps, + * null, // settingProps oaidProps ); + */ + public String updateInstanceProperties( + String[] padCodes, + List modemPersistProps, + List modemProps, + List systemPersistProps, + List systemProps, + List settingProps, + List oaidProps + ) throws IOException { + if (padCodes == null || padCodes.length == 0) { + throw new IllegalArgumentException("padCodes 不能为空"); + } + + JSONObject json = new JSONObject(); + try { + json.put("padCodes", new JSONArray(padCodes)); + putPropertyItems(json, "modemPersistPropertiesList", modemPersistProps); + putPropertyItems(json, "modemPropertiesList", modemProps); + putPropertyItems(json, "systemPersistPropertiesList", systemPersistProps); + putPropertyItems(json, "systemPropertiesList", systemProps); + putPropertyItems(json, "settingPropertiesList", settingProps); + putPropertyItems(json, "oaidPropertiesList", oaidProps); + + } catch (JSONException e) { + LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateInstanceProperties: JSON error", e); + } + + String jsonBody = json.toString(); + String timestamp = String.valueOf(System.currentTimeMillis()); + String API_PATH = "/openapi/open/pad/updatePadProperties"; + + if (secretKey == null || secretKey.isEmpty()) { + throw new IllegalArgumentException("secretKey 不能为空"); + } + + String signature = null; + try { + signature = calculateSignature(timestamp, API_PATH, jsonBody, secretKey); + } catch (Exception e) { + LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateInstanceProperties: calculateSignature error", e); + } + + RequestBody body = RequestBody.create( + MediaType.parse("application/json; charset=utf-8"), + jsonBody + ); + + Request request = new Request.Builder() + .url(baseUrl + API_PATH) + .addHeader("authver", "2.0") + .addHeader("x-ak", accessKey) + .addHeader("x-timestamp", timestamp) + .addHeader("x-sign", signature) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new IOException("请求失败: " + response); + } + + try (ResponseBody responseBody = response.body()) { + return responseBody != null ? responseBody.string() : ""; + } + } + } + + private void putPropertyItems(JSONObject json, String key, List items) throws JSONException { + if (items != null && !items.isEmpty()) { + JSONArray array = new JSONArray(); + for (PropertyItem item : items) { + array.put(item.toJson()); + } + json.put(key, array); + } + } + + + public static class PropertyItem { + + private String propertiesName; + private String propertiesValue; + + public PropertyItem(String name, String value) { + this.propertiesName = name; + this.propertiesValue = value; + } + + public JSONObject toJson() throws JSONException { + JSONObject json = new JSONObject(); + json.put("propertiesName", propertiesName); + json.put("propertiesValue", propertiesValue); + return json; + } + } +} + + diff --git a/app/src/main/java/com/example/studyapp/device/ChangeDeviceInfoUtil.java b/app/src/main/java/com/example/retention/device/ChangeDeviceInfoUtil.java similarity index 97% rename from app/src/main/java/com/example/studyapp/device/ChangeDeviceInfoUtil.java rename to app/src/main/java/com/example/retention/device/ChangeDeviceInfoUtil.java index 98ff3a5..77bf042 100644 --- a/app/src/main/java/com/example/studyapp/device/ChangeDeviceInfoUtil.java +++ b/app/src/main/java/com/example/retention/device/ChangeDeviceInfoUtil.java @@ -1,27 +1,26 @@ -package com.example.studyapp.device; +package com.example.retention.device; -import static com.example.studyapp.autoJS.AutoJsUtil.isAppInstalled; -import static com.example.studyapp.utils.LogFileUtil.logAndWrite; +import static com.example.retention.autoJS.AutoJsUtil.isAppInstalled; +import static com.example.retention.utils.LogFileUtil.logAndWrite; import android.content.ContentResolver; import android.content.Context; import android.net.Uri; import android.util.Log; -import com.example.studyapp.task.AfInfo; -import com.example.studyapp.task.BigoInfo; -import com.example.studyapp.task.DeviceInfo; -import com.example.studyapp.task.TaskUtil; -import com.example.studyapp.utils.ApkInstaller; -import com.example.studyapp.utils.HttpUtil; -import com.example.studyapp.utils.LogFileUtil; -import com.example.studyapp.utils.ShellUtils; -import com.example.studyapp.utils.ZipUtils; +import com.example.retention.task.AfInfo; +import com.example.retention.task.BigoInfo; +import com.example.retention.task.DeviceInfo; +import com.example.retention.task.TaskUtil; +import com.example.retention.utils.ApkInstaller; +import com.example.retention.utils.HttpUtil; +import com.example.retention.utils.LogFileUtil; +import com.example.retention.utils.ShellUtils; +import com.example.retention.utils.ZipUtils; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; -import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/app/src/main/java/com/example/studyapp/device/Native.java b/app/src/main/java/com/example/retention/device/Native.java similarity index 95% rename from app/src/main/java/com/example/studyapp/device/Native.java rename to app/src/main/java/com/example/retention/device/Native.java index 00cd6bf..a672068 100644 --- a/app/src/main/java/com/example/studyapp/device/Native.java +++ b/app/src/main/java/com/example/retention/device/Native.java @@ -1,4 +1,4 @@ -package com.example.studyapp.device; +package com.example.retention.device; public class Native { static { diff --git a/app/src/main/java/com/example/studyapp/device/bigo设备参数.txt b/app/src/main/java/com/example/retention/device/bigo设备参数.txt similarity index 100% rename from app/src/main/java/com/example/studyapp/device/bigo设备参数.txt rename to app/src/main/java/com/example/retention/device/bigo设备参数.txt diff --git a/app/src/main/java/com/example/studyapp/proxy/ClashUtil.java b/app/src/main/java/com/example/retention/proxy/ClashUtil.java similarity index 96% rename from app/src/main/java/com/example/studyapp/proxy/ClashUtil.java rename to app/src/main/java/com/example/retention/proxy/ClashUtil.java index d69f4e3..9f4d799 100644 --- a/app/src/main/java/com/example/studyapp/proxy/ClashUtil.java +++ b/app/src/main/java/com/example/retention/proxy/ClashUtil.java @@ -1,24 +1,20 @@ -package com.example.studyapp.proxy; +package com.example.retention.proxy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.util.Log; -import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; -import com.example.studyapp.utils.LogFileUtil; +import com.example.retention.utils.LogFileUtil; import java.io.IOException; import java.util.concurrent.CountDownLatch; -import okhttp3.Call; -import okhttp3.Callback; import okhttp3.HttpUrl; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import okhttp3.ResponseBody; import org.json.JSONException; import org.json.JSONObject; diff --git a/app/src/main/java/com/example/studyapp/request/ScriptResultRequest.java b/app/src/main/java/com/example/retention/request/ScriptResultRequest.java similarity index 89% rename from app/src/main/java/com/example/studyapp/request/ScriptResultRequest.java rename to app/src/main/java/com/example/retention/request/ScriptResultRequest.java index f98c185..48b55c3 100644 --- a/app/src/main/java/com/example/studyapp/request/ScriptResultRequest.java +++ b/app/src/main/java/com/example/retention/request/ScriptResultRequest.java @@ -1,4 +1,4 @@ -package com.example.studyapp.request; +package com.example.retention.request; // 这是发送到服务端的请求体(JSON 格式) public class ScriptResultRequest { diff --git a/app/src/main/java/com/example/studyapp/service/MyAccessibilityService.java b/app/src/main/java/com/example/retention/service/MyAccessibilityService.java similarity index 94% rename from app/src/main/java/com/example/studyapp/service/MyAccessibilityService.java rename to app/src/main/java/com/example/retention/service/MyAccessibilityService.java index 36b0edc..15c630d 100644 --- a/app/src/main/java/com/example/studyapp/service/MyAccessibilityService.java +++ b/app/src/main/java/com/example/retention/service/MyAccessibilityService.java @@ -1,4 +1,4 @@ -package com.example.studyapp.service; +package com.example.retention.service; import android.Manifest; import android.accessibilityservice.AccessibilityService; @@ -6,19 +6,17 @@ import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; -import android.app.Service; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.os.Build; -import android.os.IBinder; import android.view.accessibility.AccessibilityEvent; import android.widget.Toast; import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; -import com.example.studyapp.MainActivity; -import com.example.studyapp.R; +import com.example.retention.MainActivity; +import com.example.retention.R; public class MyAccessibilityService extends AccessibilityService { diff --git a/app/src/main/java/com/example/studyapp/task/AfInfo.java b/app/src/main/java/com/example/retention/task/AfInfo.java similarity index 91% rename from app/src/main/java/com/example/studyapp/task/AfInfo.java rename to app/src/main/java/com/example/retention/task/AfInfo.java index 793da1b..5bb5fb5 100644 --- a/app/src/main/java/com/example/studyapp/task/AfInfo.java +++ b/app/src/main/java/com/example/retention/task/AfInfo.java @@ -1,4 +1,4 @@ -package com.example.studyapp.task; +package com.example.retention.task; public class AfInfo { public String advertiserId; diff --git a/app/src/main/java/com/example/studyapp/task/BigoInfo.java b/app/src/main/java/com/example/retention/task/BigoInfo.java similarity index 93% rename from app/src/main/java/com/example/studyapp/task/BigoInfo.java rename to app/src/main/java/com/example/retention/task/BigoInfo.java index d67d5c6..4f09200 100644 --- a/app/src/main/java/com/example/studyapp/task/BigoInfo.java +++ b/app/src/main/java/com/example/retention/task/BigoInfo.java @@ -1,4 +1,4 @@ -package com.example.studyapp.task; +package com.example.retention.task; // 使用 JSON 库动态生成 JSON 请求体 (使用 Gson 示例) public class BigoInfo { diff --git a/app/src/main/java/com/example/studyapp/task/DeviceInfo.java b/app/src/main/java/com/example/retention/task/DeviceInfo.java similarity index 96% rename from app/src/main/java/com/example/studyapp/task/DeviceInfo.java rename to app/src/main/java/com/example/retention/task/DeviceInfo.java index d69a9bc..12e3e2f 100644 --- a/app/src/main/java/com/example/studyapp/task/DeviceInfo.java +++ b/app/src/main/java/com/example/retention/task/DeviceInfo.java @@ -1,4 +1,4 @@ -package com.example.studyapp.task; +package com.example.retention.task; public class DeviceInfo { diff --git a/app/src/main/java/com/example/studyapp/task/TaskUtil.java b/app/src/main/java/com/example/retention/task/TaskUtil.java similarity index 98% rename from app/src/main/java/com/example/studyapp/task/TaskUtil.java rename to app/src/main/java/com/example/retention/task/TaskUtil.java index 657a2e3..f31127e 100644 --- a/app/src/main/java/com/example/studyapp/task/TaskUtil.java +++ b/app/src/main/java/com/example/retention/task/TaskUtil.java @@ -1,15 +1,9 @@ -package com.example.studyapp.task; - -import static androidx.core.content.PackageManagerCompat.LOG_TAG; +package com.example.retention.task; import android.content.Context; -import android.os.Environment; -import android.text.TextUtils; import android.util.Log; -import com.example.studyapp.utils.LogFileUtil; -import com.example.studyapp.utils.ShellUtils; -import com.google.android.gms.common.util.CollectionUtils; -import com.google.android.gms.common.util.MapUtils; +import com.example.retention.utils.LogFileUtil; +import com.example.retention.utils.ShellUtils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; @@ -18,14 +12,10 @@ import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Type; -import java.util.List; import java.util.Map; -import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import okhttp3.Call; -import okhttp3.Callback; import okhttp3.HttpUrl; import okhttp3.MediaType; import okhttp3.MultipartBody; @@ -34,7 +24,6 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.ResponseBody; -import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.FileOutputStream; diff --git a/app/src/main/java/com/example/studyapp/utils/ApkInstaller.java b/app/src/main/java/com/example/retention/utils/ApkInstaller.java similarity index 87% rename from app/src/main/java/com/example/studyapp/utils/ApkInstaller.java rename to app/src/main/java/com/example/retention/utils/ApkInstaller.java index 7e44a3b..ec80bfa 100644 --- a/app/src/main/java/com/example/studyapp/utils/ApkInstaller.java +++ b/app/src/main/java/com/example/retention/utils/ApkInstaller.java @@ -1,14 +1,10 @@ -package com.example.studyapp.utils; +package com.example.retention.utils; -import static com.example.studyapp.utils.ZipUtils.getAllApkFiles; +import static com.example.retention.utils.ZipUtils.getAllApkFiles; -import android.content.Context; import android.util.Log; -import android.widget.Toast; -import java.io.DataOutputStream; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/com/example/studyapp/utils/ClassUtils.java b/app/src/main/java/com/example/retention/utils/ClassUtils.java similarity index 99% rename from app/src/main/java/com/example/studyapp/utils/ClassUtils.java rename to app/src/main/java/com/example/retention/utils/ClassUtils.java index 4df67a3..483ee48 100644 --- a/app/src/main/java/com/example/studyapp/utils/ClassUtils.java +++ b/app/src/main/java/com/example/retention/utils/ClassUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.example.studyapp.utils; +package com.example.retention.utils; import java.lang.reflect.Field; import java.lang.reflect.Modifier; diff --git a/app/src/main/java/com/example/studyapp/utils/HttpUtil.java b/app/src/main/java/com/example/retention/utils/HttpUtil.java similarity index 99% rename from app/src/main/java/com/example/studyapp/utils/HttpUtil.java rename to app/src/main/java/com/example/retention/utils/HttpUtil.java index e46110a..db4c2b3 100644 --- a/app/src/main/java/com/example/studyapp/utils/HttpUtil.java +++ b/app/src/main/java/com/example/retention/utils/HttpUtil.java @@ -1,4 +1,4 @@ -package com.example.studyapp.utils; +package com.example.retention.utils; import android.util.Log; diff --git a/app/src/main/java/com/example/studyapp/utils/IpUtil.java b/app/src/main/java/com/example/retention/utils/IpUtil.java similarity index 96% rename from app/src/main/java/com/example/studyapp/utils/IpUtil.java rename to app/src/main/java/com/example/retention/utils/IpUtil.java index 6b6b639..135423b 100644 --- a/app/src/main/java/com/example/studyapp/utils/IpUtil.java +++ b/app/src/main/java/com/example/retention/utils/IpUtil.java @@ -1,4 +1,4 @@ -package com.example.studyapp.utils; +package com.example.retention.utils; import android.text.TextUtils; @@ -7,7 +7,6 @@ import java.net.UnknownHostException; import org.json.JSONObject; import java.util.concurrent.CompletableFuture; -import java.util.regex.Pattern; public class IpUtil { public static boolean isValidIPAddress(String ipAddress) { diff --git a/app/src/main/java/com/example/studyapp/utils/LogFileUtil.java b/app/src/main/java/com/example/retention/utils/LogFileUtil.java similarity index 99% rename from app/src/main/java/com/example/studyapp/utils/LogFileUtil.java rename to app/src/main/java/com/example/retention/utils/LogFileUtil.java index 13ff5ec..cbb77c7 100644 --- a/app/src/main/java/com/example/studyapp/utils/LogFileUtil.java +++ b/app/src/main/java/com/example/retention/utils/LogFileUtil.java @@ -1,4 +1,4 @@ -package com.example.studyapp.utils; +package com.example.retention.utils; import android.content.Context; import android.os.Build; diff --git a/app/src/main/java/com/example/studyapp/utils/MemberUtils.java b/app/src/main/java/com/example/retention/utils/MemberUtils.java similarity index 99% rename from app/src/main/java/com/example/studyapp/utils/MemberUtils.java rename to app/src/main/java/com/example/retention/utils/MemberUtils.java index 8cffcf4..2701133 100644 --- a/app/src/main/java/com/example/studyapp/utils/MemberUtils.java +++ b/app/src/main/java/com/example/retention/utils/MemberUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.example.studyapp.utils; +package com.example.retention.utils; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Member; diff --git a/app/src/main/java/com/example/studyapp/utils/ReflectionHelper.java b/app/src/main/java/com/example/retention/utils/ReflectionHelper.java similarity index 99% rename from app/src/main/java/com/example/studyapp/utils/ReflectionHelper.java rename to app/src/main/java/com/example/retention/utils/ReflectionHelper.java index daffe5e..688c3b2 100644 --- a/app/src/main/java/com/example/studyapp/utils/ReflectionHelper.java +++ b/app/src/main/java/com/example/retention/utils/ReflectionHelper.java @@ -1,8 +1,6 @@ -package com.example.studyapp.utils; +package com.example.retention.utils; -import android.util.Log; - import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; diff --git a/app/src/main/java/com/example/studyapp/utils/ShellUtils.java b/app/src/main/java/com/example/retention/utils/ShellUtils.java similarity index 99% rename from app/src/main/java/com/example/studyapp/utils/ShellUtils.java rename to app/src/main/java/com/example/retention/utils/ShellUtils.java index 8e6dfad..76f344c 100644 --- a/app/src/main/java/com/example/studyapp/utils/ShellUtils.java +++ b/app/src/main/java/com/example/retention/utils/ShellUtils.java @@ -1,6 +1,4 @@ -package com.example.studyapp.utils; - -import static java.security.AccessController.getContext; +package com.example.retention.utils; import java.io.BufferedOutputStream; import java.io.BufferedReader; diff --git a/app/src/main/java/com/example/studyapp/utils/Utils.java b/app/src/main/java/com/example/retention/utils/Utils.java similarity index 98% rename from app/src/main/java/com/example/studyapp/utils/Utils.java rename to app/src/main/java/com/example/retention/utils/Utils.java index ad6c7fe..7cf71dc 100644 --- a/app/src/main/java/com/example/studyapp/utils/Utils.java +++ b/app/src/main/java/com/example/retention/utils/Utils.java @@ -1,4 +1,4 @@ -package com.example.studyapp.utils; +package com.example.retention.utils; import android.content.Context; import android.content.pm.ApplicationInfo; diff --git a/app/src/main/java/com/example/studyapp/utils/ZipUtils.java b/app/src/main/java/com/example/retention/utils/ZipUtils.java similarity index 98% rename from app/src/main/java/com/example/studyapp/utils/ZipUtils.java rename to app/src/main/java/com/example/retention/utils/ZipUtils.java index 29d1aac..e28be52 100644 --- a/app/src/main/java/com/example/studyapp/utils/ZipUtils.java +++ b/app/src/main/java/com/example/retention/utils/ZipUtils.java @@ -1,4 +1,4 @@ -package com.example.studyapp.utils; +package com.example.retention.utils; import android.util.Log; diff --git a/app/src/main/java/com/example/studyapp/worker/CheckAccessibilityWorker.java b/app/src/main/java/com/example/retention/worker/CheckAccessibilityWorker.java similarity index 96% rename from app/src/main/java/com/example/studyapp/worker/CheckAccessibilityWorker.java rename to app/src/main/java/com/example/retention/worker/CheckAccessibilityWorker.java index 6face92..0b6e35c 100644 --- a/app/src/main/java/com/example/studyapp/worker/CheckAccessibilityWorker.java +++ b/app/src/main/java/com/example/retention/worker/CheckAccessibilityWorker.java @@ -1,4 +1,4 @@ -package com.example.studyapp.worker; +package com.example.retention.worker; import android.accessibilityservice.AccessibilityService; import android.content.ComponentName; @@ -10,7 +10,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.work.CoroutineWorker; import androidx.work.WorkerParameters; -import com.example.studyapp.service.MyAccessibilityService; +import com.example.retention.service.MyAccessibilityService; import kotlin.coroutines.Continuation; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/app/src/main/java/com/example/studyapp/worker/LoadDeviceWorker.java b/app/src/main/java/com/example/retention/worker/LoadDeviceWorker.java similarity index 81% rename from app/src/main/java/com/example/studyapp/worker/LoadDeviceWorker.java rename to app/src/main/java/com/example/retention/worker/LoadDeviceWorker.java index 92aca8e..34c854d 100644 --- a/app/src/main/java/com/example/studyapp/worker/LoadDeviceWorker.java +++ b/app/src/main/java/com/example/retention/worker/LoadDeviceWorker.java @@ -1,12 +1,8 @@ -package com.example.studyapp.worker; +package com.example.retention.worker; -import static com.example.studyapp.utils.Utils.isNetworkAvailable; +import static com.example.retention.utils.Utils.isNetworkAvailable; -import android.app.Activity; import android.content.Context; -import android.os.Environment; -import android.os.Handler; -import android.os.Looper; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; @@ -15,23 +11,15 @@ import androidx.annotation.NonNull; import androidx.work.CoroutineWorker; import androidx.work.WorkerParameters; -import com.example.studyapp.autoJS.AutoJsUtil; -import com.example.studyapp.device.ChangeDeviceInfoUtil; -import com.example.studyapp.proxy.ClashUtil; -import com.example.studyapp.task.TaskUtil; -import com.example.studyapp.utils.LogFileUtil; -import com.example.studyapp.utils.Utils; +import com.example.retention.autoJS.AutoJsUtil; +import com.example.retention.device.ChangeDeviceInfoUtil; +import com.example.retention.proxy.ClashUtil; +import com.example.retention.utils.LogFileUtil; +import com.example.retention.utils.Utils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.Map; import java.util.UUID; import kotlin.coroutines.Continuation; diff --git a/app/src/main/java/com/example/studyapp/ScriptRepository.kt b/app/src/main/java/com/example/studyapp/ScriptRepository.kt deleted file mode 100644 index d4d978e..0000000 --- a/app/src/main/java/com/example/studyapp/ScriptRepository.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.studyapp - -class ScriptRepository { -} \ No newline at end of file diff --git a/app/src/main/java/com/example/studyapp/device/DeviceConfiguration.json b/app/src/main/java/com/example/studyapp/device/DeviceConfiguration.json deleted file mode 100644 index 4756d93..0000000 --- a/app/src/main/java/com/example/studyapp/device/DeviceConfiguration.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "cpuClockSpeed": "cpu_clock_speed_value", - "gaid": "gaid_value", - "userAgent": "User-Agent_value", - "osLang": "os_lang_value", - "osVer": "os_ver_value", - "tz": "tz_value", - "systemCountry": "system_country_value", - "simCountry": "sim_country_value", - "romFreeIn": "rom_free_in_value", - "resolution": "resolution_value", - "vendor": "vendor_value", - "batteryScale": "bat_scale_value", - "net": "net_value", - "dpi": "dpi_value", - "romFreeExt": "rom_free_ext_value", - "dpiF": "dpi_f_value", - "cpuCoreNum": "cpu_core_num_value", - "afDeviceObject": { - "advertiserId": "advertiserId_value", - "model": "model_value", - "brand": "brand_value", - "androidId": "android_id_value", - "xPixels": "x_px_value", - "yPixels": "y_px_value", - "densityDpi": "density_dpi_value", - "country": "country_value", - "batteryLevel": "batteryLevel_value", - "stackInfo": "stack_info_value", - "product": "product_value", - "network": "network_value", - "langCode": "lang_code_value", - "cpuAbi": "cpu_abi_value", - "yDp": "ydp_value", - "lang": "lang_value", - "roProductDetails": { - "brand": "ro_product_brand_value", - "model": "ro_product_model_value", - "manufacturer": "ro_product_manufacturer_value", - "device": "ro_product_device_value", - "name": "ro_product_name_value" - }, - "roBuildDetails": { - "versionIncremental": "ro_build_version_incremental_value", - "fingerprint": "ro_build_fingerprint_value", - "productBuildFingerprint": "ro_product_build_fingerprint_value", - "systemBuildFingerprint": "ro_system_build_fingerprint_value", - "systemExtBuildFingerprint": "ro_system_ext_build_fingerprint_value", - "vendorBuildFingerprint": "ro_vendor_build_fingerprint_value" - }, - "cloudProperties": { - "gpuProperties": { - "glVendor": "persist_sys_cloud_gpu_gl_vendor_value", - "glRenderer": "persist_sys_cloud_gpu_gl_renderer_value", - "glVersion": "persist_sys_cloud_gpu_gl_version_value", - "eglVendor": "persist_sys_cloud_gpu_egl_vendor_value", - "eglVersion": "persist_sys_cloud_gpu_egl_version_value" - }, - "drmId": "persist_sys_cloud_drm_id_value", - "batteryCapacity": "persist_sys_cloud_battery_capacity_value" - } - } -} \ No newline at end of file diff --git a/app/src/main/jniLibs/arm64-v8a/libnative.so b/app/src/main/jniLibs/arm64-v8a/libnative.so deleted file mode 100644 index 0630454..0000000 Binary files a/app/src/main/jniLibs/arm64-v8a/libnative.so and /dev/null differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index fb2dfd4..c0b61fb 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" - tools:context=".MainActivity"> + tools:context="com.example.retention.MainActivity"> 2025-06-23 17:02:14.103 297-6815 CoreBackPreview system_server D Window{e9771a6 u0 org.autojs.autojs6/org.autojs.autojs.core.activity.StartForResultActivity}: Setting back callback null 2025-06-23 17:02:14.104 297-6815 InputManager-JNI system_server W Input channel object 'e9771a6 org.autojs.autojs6/org.autojs.autojs.core.activity.StartForResultActivity (client)' was disposed without first being removed with the input manager! 2025-06-23 17:02:14.251 297-297 NotificationService system_server I Cannot find enqueued record for key: 0|org.autojs.autojs6|207|null|10100 2025-06-23 17:02:15.923 297-3145 NotificationService system_server W Toast already killed. pkg=org.autojs.autojs6 token=android.os.BinderProxy@fb6cbea 2025-06-23 17:02:15.934 1532-1532 NotificationObserver org.autojs.autojs6 D onNotification: [首次 Threds errorFailed to invoke method app.viewFile. Cannot view /sdcard/script/launcher-release.apk as it doesn't exist (/storage/emulated/0/script/main.js#647), AutoJs6]; EventType: TYPE_NOTIFICATION_STATE_CHANGED; EventTime: 870605533; PackageName: org.autojs.autojs6; MovementGranularity: 0; Action: 0; ContentChangeTypes: []; WindowChangeTypes: [] [ ClassName: android.widget.Toast; Text: [首次 Threds errorFailed to invoke method app.viewFile. Cannot view /sdcard/script/launcher-release.apk as it doesn't exist (/storage/emulated/0/script/main.js#647), AutoJs6]; ContentDescription: null; ItemCount: -1; CurrentItemIndex: -1; Enabled: false; Password: false; Checked: false; FullScreen: false; Scrollable: false; BeforeText: null; FromIndex: -1; ToIndex: -1; ScrollX: 0; ScrollY: 0; MaxScrollX: 0; MaxScrollY: 0; ScrollDeltaX: -1; ScrollDeltaY: -1; AddedCount: -1; RemovedCount: -1; ParcelableData: null ]; recordCount: 0 -2025-06-23 17:02:16.164 2002-2092 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=35830, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=139, time=2, total=5956, ts=1750669335563, pr=20, ni=0, virt=1228, shr=84, s=S, cpu=0.0, mem=4.2, args=com.github.kr328.clash), MemEntity(id=null, pid=63204, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=123, time=92, total=5956, ts=1750669335563, pr=20, ni=0, virt=1126, shr=38, s=S, cpu=0.0, mem=3.7, args=com.github.kr328.clash:core), MemEntity(id=null, pid=63228, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=25, time=259, total=5956, ts=1750669335563, pr=20, ni=0, virt=704, shr=10, s=S, cpu=0.0, mem=0.7, args=libclash.so), MemEntity(id=null, pid=51143, user=u0_a234, name=Script helper, pkg=com.example.studyapp, res=212, time=22, total=5956, ts=1750669335563, pr=10, ni=-10, virt=14336, shr=115, s=S, cpu=0.0, mem=6.4, args=com.example.studyapp), MemEntity(id=null, pid=1532, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=314, time=374, total=5956, ts=1750669335563, pr=20, ni=0, virt=33792, shr=179, s=S, cpu=0.0, mem=9.5, args=org.autojs.autojs6), MemEntity(id=null, pid=56880, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=0, time=0, total=5956, ts=1750669335563, pr=20, ni=0, virt=10240, shr=0, s=S, cpu=0.0, mem=0.0, args=sh)] +2025-06-23 17:02:16.164 2002-2092 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=35830, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=139, time=2, total=5956, ts=1750669335563, pr=20, ni=0, virt=1228, shr=84, s=S, cpu=0.0, mem=4.2, args=com.github.kr328.clash), MemEntity(id=null, pid=63204, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=123, time=92, total=5956, ts=1750669335563, pr=20, ni=0, virt=1126, shr=38, s=S, cpu=0.0, mem=3.7, args=com.github.kr328.clash:core), MemEntity(id=null, pid=63228, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=25, time=259, total=5956, ts=1750669335563, pr=20, ni=0, virt=704, shr=10, s=S, cpu=0.0, mem=0.7, args=libclash.so), MemEntity(id=null, pid=51143, user=u0_a234, name=Script helper, pkg=com.example.retention, res=212, time=22, total=5956, ts=1750669335563, pr=10, ni=-10, virt=14336, shr=115, s=S, cpu=0.0, mem=6.4, args=com.example.retention), MemEntity(id=null, pid=1532, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=314, time=374, total=5956, ts=1750669335563, pr=20, ni=0, virt=33792, shr=179, s=S, cpu=0.0, mem=9.5, args=org.autojs.autojs6), MemEntity(id=null, pid=56880, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=0, time=0, total=5956, ts=1750669335563, pr=20, ni=0, virt=10240, shr=0, s=S, cpu=0.0, mem=0.0, args=sh)] 2025-06-23 17:02:18.505 297-3143 NotificationService system_server W Toast already killed. pkg=org.autojs.autojs6 token=android.os.BinderProxy@c258390 2025-06-23 17:02:18.517 1532-1532 NotificationObserver org.autojs.autojs6 D onNotification: [首次 脚本线程 脚本catch结束, AutoJs6]; EventType: TYPE_NOTIFICATION_STATE_CHANGED; EventTime: 870608116; PackageName: org.autojs.autojs6; MovementGranularity: 0; Action: 0; ContentChangeTypes: []; WindowChangeTypes: [] [ ClassName: android.widget.Toast; Text: [首次 脚本线程 脚本catch结束, AutoJs6]; ContentDescription: null; ItemCount: -1; CurrentItemIndex: -1; Enabled: false; Password: false; Checked: false; FullScreen: false; Scrollable: false; BeforeText: null; FromIndex: -1; ToIndex: -1; ScrollX: 0; ScrollY: 0; MaxScrollX: 0; MaxScrollY: 0; ScrollDeltaX: -1; ScrollDeltaY: -1; AddedCount: -1; RemovedCount: -1; ParcelableData: null ]; recordCount: 0 2025-06-23 17:02:21.098 297-3143 NotificationService system_server W Toast already killed. pkg=org.autojs.autojs6 token=android.os.BinderProxy@afcbf66 @@ -197,9 +197,9 @@ 2025-06-23 17:02:23.095 1532-51478 TrafficStats org.autojs.autojs6 I tagSocketFd(92, 1234, -1) failed with errno-9 2025-06-23 17:02:24.589 1532-51478 TrafficStats org.autojs.autojs6 D tagSocket(92) with statsTag=0x4d2, statsUid=-1 2025-06-23 17:02:24.589 1532-51478 TrafficStats org.autojs.autojs6 I tagSocketFd(92, 1234, -1) failed with errno-9 -2025-06-23 17:02:26.771 2002-2092 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=35830, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=139, time=2, total=6027, ts=1750669346510, pr=20, ni=0, virt=1228, shr=84, s=S, cpu=0.0, mem=4.2, args=com.github.kr328.clash), MemEntity(id=null, pid=63204, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=123, time=92, total=6027, ts=1750669346510, pr=20, ni=0, virt=1126, shr=38, s=S, cpu=0.0, mem=3.7, args=com.github.kr328.clash:core), MemEntity(id=null, pid=63228, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=25, time=259, total=6027, ts=1750669346510, pr=20, ni=0, virt=704, shr=10, s=S, cpu=0.0, mem=0.7, args=libclash.so), MemEntity(id=null, pid=51143, user=u0_a234, name=Script helper, pkg=com.example.studyapp, res=212, time=22, total=6027, ts=1750669346510, pr=10, ni=-10, virt=14336, shr=115, s=S, cpu=0.0, mem=6.4, args=com.example.studyapp), MemEntity(id=null, pid=1532, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=315, time=374, total=6027, ts=1750669346510, pr=20, ni=0, virt=33792, shr=179, s=S, cpu=0.0, mem=9.6, args=org.autojs.autojs6), MemEntity(id=null, pid=56880, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=0, time=0, total=6027, ts=1750669346510, pr=20, ni=0, virt=10240, shr=0, s=S, cpu=0.0, mem=0.0, args=sh)] +2025-06-23 17:02:26.771 2002-2092 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=35830, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=139, time=2, total=6027, ts=1750669346510, pr=20, ni=0, virt=1228, shr=84, s=S, cpu=0.0, mem=4.2, args=com.github.kr328.clash), MemEntity(id=null, pid=63204, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=123, time=92, total=6027, ts=1750669346510, pr=20, ni=0, virt=1126, shr=38, s=S, cpu=0.0, mem=3.7, args=com.github.kr328.clash:core), MemEntity(id=null, pid=63228, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=25, time=259, total=6027, ts=1750669346510, pr=20, ni=0, virt=704, shr=10, s=S, cpu=0.0, mem=0.7, args=libclash.so), MemEntity(id=null, pid=51143, user=u0_a234, name=Script helper, pkg=com.example.retention, res=212, time=22, total=6027, ts=1750669346510, pr=10, ni=-10, virt=14336, shr=115, s=S, cpu=0.0, mem=6.4, args=com.example.retention), MemEntity(id=null, pid=1532, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=315, time=374, total=6027, ts=1750669346510, pr=20, ni=0, virt=33792, shr=179, s=S, cpu=0.0, mem=9.6, args=org.autojs.autojs6), MemEntity(id=null, pid=56880, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=0, time=0, total=6027, ts=1750669346510, pr=20, ni=0, virt=10240, shr=0, s=S, cpu=0.0, mem=0.0, args=sh)] 2025-06-23 17:02:35.613 1532-51478 TrafficStats org.autojs.autojs6 D tagSocket(92) with statsTag=0x4d2, statsUid=-1 2025-06-23 17:02:35.613 1532-51478 TrafficStats org.autojs.autojs6 I tagSocketFd(92, 1234, -1) failed with errno-9 2025-06-23 17:02:36.534 1532-51478 TrafficStats org.autojs.autojs6 D tagSocket(92) with statsTag=0x4d2, statsUid=-1 2025-06-23 17:02:36.535 1532-51478 TrafficStats org.autojs.autojs6 I tagSocketFd(92, 1234, -1) failed with errno-9 -2025-06-23 17:02:37.413 2002-2092 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=35830, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=139, time=2, total=6034, ts=1750669357102, pr=20, ni=0, virt=1228, shr=84, s=S, cpu=0.0, mem=4.2, args=com.github.kr328.clash), MemEntity(id=null, pid=63204, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=123, time=92, total=6034, ts=1750669357102, pr=20, ni=0, virt=1126, shr=38, s=S, cpu=0.0, mem=3.7, args=com.github.kr328.clash:core), MemEntity(id=null, pid=63228, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=25, time=259, total=6034, ts=1750669357102, pr=20, ni=0, virt=704, shr=10, s=S, cpu=0.0, mem=0.7, args=libclash.so), MemEntity(id=null, pid=51143, user=u0_a234, name=Script helper, pkg=com.example.studyapp, res=212, time=22, total=6034, ts=1750669357102, pr=10, ni=-10, virt=14336, shr=115, s=S, cpu=0.0, mem=6.4, args=com.example.studyapp), MemEntity(id=null, pid=1532, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=315, time=374, total=6034, ts=1750669357102, pr=20, ni=0, virt=33792, shr=179, s=S, cpu=0.0, mem=9.6, args=org.autojs.autojs6), MemEntity(id=null, pid=56880, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=0, time=0, total=6034, ts=1750669357102, pr=20, ni=0, virt=10240, shr=0, s=S, cpu=0.0, mem=0.0, args=sh)] +2025-06-23 17:02:37.413 2002-2092 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=35830, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=139, time=2, total=6034, ts=1750669357102, pr=20, ni=0, virt=1228, shr=84, s=S, cpu=0.0, mem=4.2, args=com.github.kr328.clash), MemEntity(id=null, pid=63204, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=123, time=92, total=6034, ts=1750669357102, pr=20, ni=0, virt=1126, shr=38, s=S, cpu=0.0, mem=3.7, args=com.github.kr328.clash:core), MemEntity(id=null, pid=63228, user=u0_a104, name=Clash for Android, pkg=com.github.kr328.clash, res=25, time=259, total=6034, ts=1750669357102, pr=20, ni=0, virt=704, shr=10, s=S, cpu=0.0, mem=0.7, args=libclash.so), MemEntity(id=null, pid=51143, user=u0_a234, name=Script helper, pkg=com.example.retention, res=212, time=22, total=6034, ts=1750669357102, pr=10, ni=-10, virt=14336, shr=115, s=S, cpu=0.0, mem=6.4, args=com.example.retention), MemEntity(id=null, pid=1532, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=315, time=374, total=6034, ts=1750669357102, pr=20, ni=0, virt=33792, shr=179, s=S, cpu=0.0, mem=9.6, args=org.autojs.autojs6), MemEntity(id=null, pid=56880, user=u0_a100, name=AutoJs6, pkg=org.autojs.autojs6, res=0, time=0, total=6034, ts=1750669357102, pr=20, ni=0, virt=10240, shr=0, s=S, cpu=0.0, mem=0.0, args=sh)]