From b50a82cad6c5b79feb31e0d8ebf2fc816f619e3b Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Wed, 31 Dec 2025 20:11:00 +0800 Subject: [PATCH] =?UTF-8?q?6.7.0=20-=20Alpha13=20-=20=E6=96=B0=E5=A2=9E=20?= =?UTF-8?q?engines.myEngine().getStartTime()=20=E6=96=B9=E6=B3=95=20(issue?= =?UTF-8?q?=20#449)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changelog/lang_zh-Hans.json | 3 +- .../autojs/autojs/engine/ScriptEngine.java | 32 ++++++++++++++----- version.properties | 6 ++-- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index 56438a12..9c27d80c 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -23,13 +23,14 @@ "autojs.(restart/exit) 方法, 用于重启或退出 AutoJs6 应用, 并支持应用重启时自动运行其参数指定的脚本 _[`issue #460`](http://issues.autojs6.com/460)_", "UiObject#isShifted 方法, 用于检测控件位置变化 _[`issue #469`](http://issues.autojs6.com/469)_", "UiObject#snapshot 方法, 用于捕获控件当前状态 _[`issue #469`](http://issues.autojs6.com/469)_", + "engines.myEngine().getStartTime() 方法, 用于获取脚本引擎启动时间戳 _[`issue #449`](http://issues.autojs6.com/449)_", "crash 全局方法, 用于测试崩溃报告页面", "structuredClone 全局方法, 用于深拷贝 JavaScript 对象 (参阅 [MDN](https://developer.mozilla.org/zh-CN/docs/Web/API/Window/structuredClone))", "等价系列选择器 (UiSelector#id/text/...) 及包含系列选择器 (UiSelector#xxxContains) 支持正则表达式参数", "选择器的正则表达式参数支持使用标志 (i, m, s, u)", "正则表达式支持后瞻断言语法 _[`issue #464`](http://issues.autojs6.com/464)_", "设置页面增加 \"Java 原始类型包装\" 设置选项 _[`issue #435`](http://issues.autojs6.com/435)_", - "设置页面增加 \"定时任务调度引擎\" 设置选项, 支持 AlarmManager/WorkManager/JobScheduler _[`issue #457`](http://issues.autojs6.com/457)_ _[`issue #388`](http://issues.autojs6.com/388)_ _[`issue #163`](http://issues.autojs6.com/163)_ _[`issue #53`](http://issues.autojs6.com/53)_ _[`issue #21`](http://issues.autojs6.com/21)_", + "设置页面增加 \"定时任务调度引擎\" 设置选项, 支持 AlarmManager/WorkManager/JobScheduler _[`issue #457`](http://issues.autojs6.com/457)_ _[`issue #449`](http://issues.autojs6.com/449)_ _[`issue #388`](http://issues.autojs6.com/388)_ _[`issue #163`](http://issues.autojs6.com/163)_ _[`issue #53`](http://issues.autojs6.com/53)_ _[`issue #21`](http://issues.autojs6.com/21)_", "设置页面增加 \"应用启动器图标\" 设置选项, 支持自适应图标/透明背景图标 _[`issue #405`](http://issues.autojs6.com/405)_", "设置页面增加 \"重启策略\" 设置选项, 用于设置主页抽屉栏重启按钮是否使用快速重启策略", "设置页面启动器快捷方式增加 \"插件\" 选项, 用于通过快捷方式跳转到插件中心页面", diff --git a/app/src/main/java/org/autojs/autojs/engine/ScriptEngine.java b/app/src/main/java/org/autojs/autojs/engine/ScriptEngine.java index ea805801..2a415589 100644 --- a/app/src/main/java/org/autojs/autojs/engine/ScriptEngine.java +++ b/app/src/main/java/org/autojs/autojs/engine/ScriptEngine.java @@ -1,10 +1,11 @@ package org.autojs.autojs.engine; import androidx.annotation.CallSuper; - import org.autojs.autojs.execution.ScriptExecution; +import org.autojs.autojs.execution.ScriptExecutionGlobalListener; import org.autojs.autojs.script.ScriptSource; +import java.lang.reflect.Field; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -45,10 +46,10 @@ public interface ScriptEngine { Throwable getUncaughtException(); - void setId(int id); - int getId(); + void setId(int id); + /** * @hide */ @@ -59,6 +60,21 @@ public interface ScriptEngine { */ void init(); + default long getStartTime() { + try { + Field field = ScriptExecutionGlobalListener.class.getDeclaredField("ENGINE_TAG_START_TIME"); + field.setAccessible(true); + String tag = String.valueOf(field.get(null)); + Object o = getTag(tag); + if (o instanceof Long) { + return (long) o; + } + } catch (IllegalAccessException | NoSuchFieldException e) { + /* Ignored. */ + } + return 0; + } + interface OnDestroyListener { void onDestroy(ScriptEngine engine); } @@ -66,10 +82,10 @@ public interface ScriptEngine { abstract class AbstractScriptEngine implements ScriptEngine { private final Map mTags = new ConcurrentHashMap<>(); + private final AtomicInteger mId = new AtomicInteger(ScriptExecution.NO_ID); private OnDestroyListener mOnDestroyListener; private volatile boolean mDestroyed = false; private Throwable mUncaughtException; - private final AtomicInteger mId = new AtomicInteger(ScriptExecution.NO_ID); @Override public void setTag(String key, Object value) { @@ -122,13 +138,13 @@ public interface ScriptEngine { } @Override - public void setId(int id) { - mId.compareAndSet(ScriptExecution.NO_ID, id); + public int getId() { + return mId.get(); } @Override - public int getId() { - return mId.get(); + public void setId(int id) { + mId.compareAndSet(ScriptExecution.NO_ID, id); } private static class DestroyListenerSetMoreThanOneException extends SecurityException { diff --git a/version.properties b/version.properties index 60dc88eb..49a4ef15 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ -#Wed Dec 31 17:28:38 CST 2025 -BUILD_TIME=1767173318339 +#Wed Dec 31 20:04:55 CST 2025 +BUILD_TIME=1767182695685 COMPILE_SDK_VERSION=36 IMAGE_QUANT_CMAKE_VERSION=3.22.1 IMAGE_QUANT_NDK_VERSION=26.1.10909125 @@ -27,6 +27,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13 RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3 TARGET_SDK_VERSION=36 TARGET_SDK_VERSION_INRT=29 -VERSION_BUILD=3571 +VERSION_BUILD=3572 VERSION_NAME=6.7.0 Alpha13 VSCODE_EXT_REQUIRED_VERSION=1.0.8