From 2a7132d7b0e378b930c766752bbcad583131c9f8 Mon Sep 17 00:00:00 2001 From: yjj38 Date: Wed, 9 Jul 2025 17:04:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor(retention):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=B9=B6=E6=B7=BB=E5=8A=A0=E6=96=B0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新包名从 com.example.studyapp 到 com.example.retention - 添加 ArmCloudApiClient 类实现设备属性更新功能 - 更新所有相关类和文件以适应新的包名 --- app/build.gradle | 2 +- app/release/output-metadata.json | 2 +- .../studyapp/ExampleInstrumentedTest.java | 4 +- app/src/main/AndroidManifest.xml | 2 +- .../{studyapp => retention}/MainActivity.java | 30 +-- .../com/example/retention/ScriptRepository.kt | 4 + .../autoJS/AutoJsUtil.java | 10 +- .../config/ConfigLoader.java | 4 +- .../device/AF设备参数.txt | 0 .../retention/device/ArmCloudApiClient.java | 248 ++++++++++++++++++ .../device/ChangeDeviceInfoUtil.java | 25 +- .../device/Native.java | 2 +- .../device/bigo设备参数.txt | 0 .../proxy/ClashUtil.java | 8 +- .../request/ScriptResultRequest.java | 2 +- .../service/MyAccessibilityService.java | 8 +- .../{studyapp => retention}/task/AfInfo.java | 2 +- .../task/BigoInfo.java | 2 +- .../task/DeviceInfo.java | 2 +- .../task/TaskUtil.java | 17 +- .../utils/ApkInstaller.java | 8 +- .../utils/ClassUtils.java | 2 +- .../utils/HttpUtil.java | 2 +- .../{studyapp => retention}/utils/IpUtil.java | 3 +- .../utils/LogFileUtil.java | 2 +- .../utils/MemberUtils.java | 2 +- .../utils/ReflectionHelper.java | 4 +- .../utils/ShellUtils.java | 4 +- .../{studyapp => retention}/utils/Utils.java | 2 +- .../utils/ZipUtils.java | 2 +- .../worker/CheckAccessibilityWorker.java | 4 +- .../worker/LoadDeviceWorker.java | 26 +- .../com/example/studyapp/ScriptRepository.kt | 4 - .../studyapp/device/DeviceConfiguration.json | 63 ----- app/src/main/jniLibs/arm64-v8a/libnative.so | Bin 81488 -> 0 bytes app/src/main/res/layout/activity_main.xml | 2 +- .../com/example/studyapp/ExampleUnitTest.java | 2 +- .../example/studyapp/task/TaskUtilTest.java | 4 +- cmd | 2 +- err.log | 30 +-- 40 files changed, 341 insertions(+), 201 deletions(-) rename app/src/main/java/com/example/{studyapp => retention}/MainActivity.java (95%) create mode 100644 app/src/main/java/com/example/retention/ScriptRepository.kt rename app/src/main/java/com/example/{studyapp => retention}/autoJS/AutoJsUtil.java (96%) rename app/src/main/java/com/example/{studyapp => retention}/config/ConfigLoader.java (95%) rename app/src/main/java/com/example/{studyapp => retention}/device/AF设备参数.txt (100%) create mode 100644 app/src/main/java/com/example/retention/device/ArmCloudApiClient.java rename app/src/main/java/com/example/{studyapp => retention}/device/ChangeDeviceInfoUtil.java (97%) rename app/src/main/java/com/example/{studyapp => retention}/device/Native.java (95%) rename app/src/main/java/com/example/{studyapp => retention}/device/bigo设备参数.txt (100%) rename app/src/main/java/com/example/{studyapp => retention}/proxy/ClashUtil.java (96%) rename app/src/main/java/com/example/{studyapp => retention}/request/ScriptResultRequest.java (89%) rename app/src/main/java/com/example/{studyapp => retention}/service/MyAccessibilityService.java (94%) rename app/src/main/java/com/example/{studyapp => retention}/task/AfInfo.java (91%) rename app/src/main/java/com/example/{studyapp => retention}/task/BigoInfo.java (93%) rename app/src/main/java/com/example/{studyapp => retention}/task/DeviceInfo.java (96%) rename app/src/main/java/com/example/{studyapp => retention}/task/TaskUtil.java (98%) rename app/src/main/java/com/example/{studyapp => retention}/utils/ApkInstaller.java (87%) rename app/src/main/java/com/example/{studyapp => retention}/utils/ClassUtils.java (99%) rename app/src/main/java/com/example/{studyapp => retention}/utils/HttpUtil.java (99%) rename app/src/main/java/com/example/{studyapp => retention}/utils/IpUtil.java (96%) rename app/src/main/java/com/example/{studyapp => retention}/utils/LogFileUtil.java (99%) rename app/src/main/java/com/example/{studyapp => retention}/utils/MemberUtils.java (99%) rename app/src/main/java/com/example/{studyapp => retention}/utils/ReflectionHelper.java (99%) rename app/src/main/java/com/example/{studyapp => retention}/utils/ShellUtils.java (99%) rename app/src/main/java/com/example/{studyapp => retention}/utils/Utils.java (98%) rename app/src/main/java/com/example/{studyapp => retention}/utils/ZipUtils.java (98%) rename app/src/main/java/com/example/{studyapp => retention}/worker/CheckAccessibilityWorker.java (96%) rename app/src/main/java/com/example/{studyapp => retention}/worker/LoadDeviceWorker.java (81%) delete mode 100644 app/src/main/java/com/example/studyapp/ScriptRepository.kt delete mode 100644 app/src/main/java/com/example/studyapp/device/DeviceConfiguration.json delete mode 100644 app/src/main/jniLibs/arm64-v8a/libnative.so 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 0630454ec86547a109d68fd6735efd5a36efcb9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81488 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 P1AmWMek>RGN!R~>Fe>T2 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)]