6.7.0 - Alpha18 - 内置模块 (dayjs/cheerio/dayjs/i18n) 脱离脚本执行模式, 使用全局懒加载方式替代

This commit is contained in:
SuperMonster003
2026-01-24 20:44:06 +08:00
parent 10a3a8eec0
commit 10d09d3fa0
6 changed files with 31 additions and 78 deletions

View File

@@ -62,7 +62,6 @@
"部分全局对象可能丢失 JavaScript 原型属性及方法的问题", "部分全局对象可能丢失 JavaScript 原型属性及方法的问题",
"使用 XML 语法将 JavaScript 表达式作为属性值时, this 对象可能出现指向错误的问题", "使用 XML 语法将 JavaScript 表达式作为属性值时, this 对象可能出现指向错误的问题",
"dialogs.build 方法 linkify 选项参数功能失效的问题", "dialogs.build 方法 linkify 选项参数功能失效的问题",
"dialogs.build 方法无法使用 MaterialDialog.Builder 原生选项参数的问题",
"dialogs.build 方法可能破坏对象参数原有数据的问题", "dialogs.build 方法可能破坏对象参数原有数据的问题",
"canvas 元素控件 setMaxFps 方法内部帧率计算错误", "canvas 元素控件 setMaxFps 方法内部帧率计算错误",
"images.concat 方法纵向拼接时宽度值计算错误", "images.concat 方法纵向拼接时宽度值计算错误",
@@ -111,10 +110,13 @@
"runtime.loadJar 方法增强兼容性 (by [LYS86](https://github.com/LYS86)) _[`pr #475`](http://pr.autojs6.com/475)_", "runtime.loadJar 方法增强兼容性 (by [LYS86](https://github.com/LYS86)) _[`pr #475`](http://pr.autojs6.com/475)_",
"ui.getStatusBarHeight 方法/statusBarHeight 属性 (getter) 增强一定程度的兼容性", "ui.getStatusBarHeight 方法/statusBarHeight 属性 (getter) 增强一定程度的兼容性",
"console.log 等方法打印全局对象 (images, app, ocr 等) 时支持显示详细信息", "console.log 等方法打印全局对象 (images, app, ocr 等) 时支持显示详细信息",
"android.graphics.Paint#setColor 支持正常解析 ColorInt/ColorHex/ColorName 等颜色参数", "dialogs.build 方法支持使用 MaterialDialog.Builder 原生选项参数",
"dialogs.build 方法 animation/linkify 选项参数支持字符串宽松匹配",
"device.rotation/rotation/width/height 方法获取屏幕方向及宽高数据的稳定性与一致性", "device.rotation/rotation/width/height 方法获取屏幕方向及宽高数据的稳定性与一致性",
"app.launchDual/startDualActivity 等方法提升执行效率并增强兼容性", "app.launchDual/startDualActivity 等方法提升执行效率并增强兼容性",
"android.graphics.Paint#setColor 支持正常解析 ColorInt/ColorHex/ColorName 等颜色参数",
"内置模块相关方法实参类型的异常消息增加类型摘要信息", "内置模块相关方法实参类型的异常消息增加类型摘要信息",
"内置模块 (dayjs/cheerio/dayjs/i18n) 脱离脚本执行模式, 使用全局懒加载方式替代",
"控制台相关方法打印巨型数据时根据上限适当省略部分内容以降低打印耗时", "控制台相关方法打印巨型数据时根据上限适当省略部分内容以降低打印耗时",
"控制台浮动窗口倒计时起始值由 6 秒增加到 9 秒", "控制台浮动窗口倒计时起始值由 6 秒增加到 9 秒",
"控制台浮动窗口内部实现进行无锁化及队列化处理以提升其参数设置效率与成功率", "控制台浮动窗口内部实现进行无锁化及队列化处理以提升其参数设置效率与成功率",

View File

@@ -27,15 +27,10 @@ import java.text.MessageFormat;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import static org.autojs.autojs.script.JavaScriptSource.EXECUTION_MODES; import static org.autojs.autojs.script.JavaScriptSource.EXECUTION_MODES;
import static org.autojs.autojs.script.JavaScriptSource.EXECUTION_MODE_MODULE_AXIOS;
import static org.autojs.autojs.script.JavaScriptSource.EXECUTION_MODE_MODULE_CHEERIO;
import static org.autojs.autojs.script.JavaScriptSource.EXECUTION_MODE_MODULE_DAYJS;
import static org.autojs.autojs.script.JavaScriptSource.EXECUTION_MODE_MODULE_I18N;
/** /**
* Created by Stardust on Jan 23, 2017. * Created by Stardust on Jan 23, 2017.
@@ -44,12 +39,6 @@ public class ScriptEngineService {
private static final String TAG = ScriptEngineService.class.getSimpleName(); private static final String TAG = ScriptEngineService.class.getSimpleName();
public static final List<Integer> GLOBAL_MODULES = List.of(
EXECUTION_MODE_MODULE_AXIOS,
EXECUTION_MODE_MODULE_CHEERIO,
EXECUTION_MODE_MODULE_DAYJS,
EXECUTION_MODE_MODULE_I18N);
private static ScriptEngineService sInstance; private static ScriptEngineService sInstance;
private final Context mApplicationContext; private final Context mApplicationContext;
private final Console mGlobalConsole; private final Console mGlobalConsole;
@@ -160,7 +149,6 @@ public class ScriptEngineService {
} }
ScriptSource source = task.getSource(); ScriptSource source = task.getSource();
if (source instanceof JavaScriptSource src) { if (source instanceof JavaScriptSource src) {
GLOBAL_MODULES.forEach((mode) -> handleGlobalModuleExecution(src, mode, getModuleNameFromMode(mode)));
int mode = src.getExecutionMode(); int mode = src.getExecutionMode();
if ((mode & JavaScriptSource.EXECUTION_MODE_UI) != 0) { if ((mode & JavaScriptSource.EXECUTION_MODE_UI) != 0) {
return ScriptExecuteActivity.execute(mApplicationContext, mScriptEngineManager, task); return ScriptExecuteActivity.execute(mApplicationContext, mScriptEngineManager, task);
@@ -187,15 +175,6 @@ public class ScriptEngineService {
.orElse(null); .orElse(null);
} }
private void handleGlobalModuleExecution(JavaScriptSource source, int executionMode, @Nullable String moduleName) {
if (moduleName == null) return;
if ((source.getExecutionMode() & executionMode) != 0) {
mScriptEngineManager.putGlobal(moduleName, new ScriptModuleIdentifier(moduleName));
} else {
mScriptEngineManager.removeGlobal(moduleName);
}
}
public ScriptExecution execute(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) { public ScriptExecution execute(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) {
return execute(new ScriptExecutionTask(source, listener, config)); return execute(new ScriptExecutionTask(source, listener, config));
} }
@@ -298,14 +277,4 @@ public class ScriptEngineService {
} }
public static class ScriptModuleIdentifier {
public String moduleFileName;
public ScriptModuleIdentifier(String moduleFileName) {
this.moduleFileName = moduleFileName;
}
}
} }

View File

@@ -18,9 +18,7 @@ import org.autojs.autojs.core.console.GlobalConsole
import org.autojs.autojs.core.image.capture.ScreenCaptureRequester import org.autojs.autojs.core.image.capture.ScreenCaptureRequester
import org.autojs.autojs.core.looper.Loopers import org.autojs.autojs.core.looper.Loopers
import org.autojs.autojs.core.pref.Pref import org.autojs.autojs.core.pref.Pref
import org.autojs.autojs.engine.ScriptEngineService
import org.autojs.autojs.rhino.extension.ScriptableExtensions.defineProp import org.autojs.autojs.rhino.extension.ScriptableExtensions.defineProp
import org.autojs.autojs.rhino.extension.ScriptableExtensions.deleteProp
import org.autojs.autojs.rhino.extension.ScriptableExtensions.prop import org.autojs.autojs.rhino.extension.ScriptableExtensions.prop
import org.autojs.autojs.lang.ThreadCompat import org.autojs.autojs.lang.ThreadCompat
import org.autojs.autojs.pio.PFiles import org.autojs.autojs.pio.PFiles
@@ -123,7 +121,6 @@ import org.mozilla.javascript.Scriptable
import org.mozilla.javascript.ScriptableObject import org.mozilla.javascript.ScriptableObject
import org.mozilla.javascript.ScriptableObject.PERMANENT import org.mozilla.javascript.ScriptableObject.PERMANENT
import org.mozilla.javascript.ScriptableObject.READONLY import org.mozilla.javascript.ScriptableObject.READONLY
import org.mozilla.javascript.Wrapper
import java.io.File import java.io.File
import java.io.FileFilter import java.io.FileFilter
import java.io.IOException import java.io.IOException
@@ -180,7 +177,7 @@ import org.autojs.autojs.runtime.api.augment.util.VersionCodes as UtilVersionCod
* Modified by SuperMonster003 as of Dec 29, 2025. * Modified by SuperMonster003 as of Dec 29, 2025.
* Transformed by SuperMonster003 on May 24, 2024. * Transformed by SuperMonster003 on May 24, 2024.
*/ */
@Suppress("unused", "PropertyName", "PrivatePropertyName") @Suppress("unused", "PropertyName")
class ScriptRuntime private constructor(builder: Builder) { class ScriptRuntime private constructor(builder: Builder) {
private val mJob = SupervisorJob() private val mJob = SupervisorJob()
@@ -407,12 +404,12 @@ class ScriptRuntime private constructor(builder: Builder) {
// @Commented by SuperMonster003 on May 24, 2022. // @Commented by SuperMonster003 on May 24, 2022.
// ! Use internal Rhino JSON for better performance and compatibility. // ! Use internal Rhino JSON for better performance and compatibility.
// ! zh-CN: 使用 Rhino 内置的 JSON 以获得更好的性能及兼容性. // ! zh-CN: 使用 Rhino 内置的 JSON 以获得更好的性能及兼容性.
// val js_JSON by lazy { rhinoRequire("json2") as ScriptableObject } // internal val js_JSON by lazy { rhinoRequire("json2") as ScriptableObject }
// @Commented by SuperMonster003 on May 26, 2024. // @Commented by SuperMonster003 on May 26, 2024.
// ! Already implemented in Rhino 1.7.15 . // ! Already implemented in Rhino 1.7.15 .
// ! zh-CN: 已在 Rhino 1.7.15 中实现. // ! zh-CN: 已在 Rhino 1.7.15 中实现.
// val js_polyfill by lazy { rhinoRequire("polyfill") as ScriptableObject } // internal val js_polyfill by lazy { rhinoRequire("polyfill") as ScriptableObject }
/** /**
* @Hint by SuperMonster003 on Apr 17, 2022. * @Hint by SuperMonster003 on Apr 17, 2022.
@@ -441,23 +438,23 @@ class ScriptRuntime private constructor(builder: Builder) {
* Substitution of Promise. * Substitution of Promise.
* zh-CN: Promise 的替代方案. * zh-CN: Promise 的替代方案.
*/ */
val js_Promise by lazy { rhinoRequire("promise") as BaseFunction } internal val js_Promise by lazy { rhinoRequire("promise") as BaseFunction }
val js_ResultAdapter by lazy { rhinoRequire("result-adapter") as BaseFunction } internal val js_ResultAdapter by lazy { rhinoRequire("result-adapter") as BaseFunction }
internal val js_UiExt by lazy { rhinoRequire("ui-ext") as BaseFunction }
internal val js_Module by lazy { rhinoRequire("jvm-npm") as ScriptableObject }
val js_UiExt by lazy { rhinoRequire("ui-ext") as BaseFunction } internal val js_mod_axios by lazy { rhinoRequire("axios") as BaseFunction }
internal val js_mod_cheerio by lazy { rhinoRequire("cheerio") as ScriptableObject }
internal val js_mod_dayjs by lazy { rhinoRequire("dayjs") as BaseFunction }
internal val js_mod_i18n by lazy { rhinoRequire("i18n") as BaseFunction }
private val js_object_observe_lite_min by lazy { rhinoRequire("object-observe-lite.min") as BaseFunction } internal val js_mod_continuation by lazy { rhinoRequire("continuation") as ScriptableObject }
internal val js_mod_internal by lazy { rhinoRequire("internal") as ScriptableObject }
private val js_array_observe_min by lazy { rhinoRequire("array-observe.min") as BaseFunction } internal val js_object_observe_lite_min by lazy { rhinoRequire("object-observe-lite.min") as BaseFunction }
internal val js_array_observe_min by lazy { rhinoRequire("array-observe.min") as BaseFunction }
private val js_structured_clone by lazy { rhinoRequire("structured-clone.min") as BaseFunction } internal val js_structured_clone by lazy { rhinoRequire("structured-clone.min") as BaseFunction }
private val js_mod_continuation by lazy { rhinoRequire("continuation") as ScriptableObject }
private val js_mod_internal by lazy { rhinoRequire("internal") as ScriptableObject }
private val js_Module by lazy { rhinoRequire("jvm-npm") as ScriptableObject }
init { init {
info = accessibilityBridge.infoProvider info = accessibilityBridge.infoProvider
@@ -500,7 +497,6 @@ class ScriptRuntime private constructor(builder: Builder) {
).let { ApiPlugins(mUiHandlerAppContext, it) } ).let { ApiPlugins(mUiHandlerAppContext, it) }
augment(topLevelScope) augment(topLevelScope)
applyExecutionModules(topLevelScope)
applyInternalModules(topLevelScope) applyInternalModules(topLevelScope)
} }
@@ -817,20 +813,6 @@ class ScriptRuntime private constructor(builder: Builder) {
augmentedApp.defineProp(Autojs::class.java.simpleName.lowercase(), augmentedAutojs) augmentedApp.defineProp(Autojs::class.java.simpleName.lowercase(), augmentedAutojs)
} }
private fun applyExecutionModules(global: Scriptable) {
ScriptEngineService.GLOBAL_MODULES.forEach { moduleMode ->
val moduleName = ScriptEngineService.getModuleNameFromMode(moduleMode) ?: return@forEach
var module = global.prop(moduleName) ?: return@forEach
if (module is Wrapper) module = module.unwrap()
when (module) {
is ScriptEngineService.ScriptModuleIdentifier -> {
global.defineProp(moduleName, rhinoRequire(module.moduleFileName), PERMANENT)
}
else -> global.deleteProp(moduleName)
}
}
}
private fun applyInternalModules(global: Scriptable) { private fun applyInternalModules(global: Scriptable) {
js_object_assign(global, js_mod_internal) js_object_assign(global, js_mod_internal)
} }

View File

@@ -5,6 +5,10 @@ import io.github.g00fy2.versioncompare.Version
import org.autojs.autojs.annotation.RhinoFunctionBody import org.autojs.autojs.annotation.RhinoFunctionBody
import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface
import org.autojs.autojs.core.automator.UiObject import org.autojs.autojs.core.automator.UiObject
import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1
import org.autojs.autojs.rhino.ArgumentGuards.Companion.component2
import org.autojs.autojs.rhino.ArgumentGuards.Companion.component3
import org.autojs.autojs.rhino.ArgumentGuards.Companion.component4
import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish
import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief
import org.autojs.autojs.rhino.extension.NumberExtensions.jsString import org.autojs.autojs.rhino.extension.NumberExtensions.jsString
@@ -107,6 +111,10 @@ class Global(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRunti
override val selfAssignmentGetters = listOf<Pair<String, Supplier<Any?>>>( override val selfAssignmentGetters = listOf<Pair<String, Supplier<Any?>>>(
"WIDTH" to Supplier { ScreenMetrics.deviceScreenWidth }, "WIDTH" to Supplier { ScreenMetrics.deviceScreenWidth },
"HEIGHT" to Supplier { ScreenMetrics.deviceScreenHeight }, "HEIGHT" to Supplier { ScreenMetrics.deviceScreenHeight },
"axios" to Supplier { scriptRuntime.js_mod_axios },
"cheerio" to Supplier { scriptRuntime.js_mod_cheerio },
"dayjs" to Supplier { scriptRuntime.js_mod_dayjs },
"i18n" to Supplier { scriptRuntime.js_mod_i18n },
) )
companion object { companion object {

View File

@@ -28,10 +28,6 @@ public abstract class JavaScriptSource extends ScriptSource {
public static final int EXECUTION_MODE_UI = 0x0001; public static final int EXECUTION_MODE_UI = 0x0001;
public static final int EXECUTION_MODE_AUTO = 0x0002; public static final int EXECUTION_MODE_AUTO = 0x0002;
public static final int EXECUTION_MODE_JSOX = 0x0004; public static final int EXECUTION_MODE_JSOX = 0x0004;
public static final int EXECUTION_MODE_MODULE_AXIOS = 0x0010;
public static final int EXECUTION_MODE_MODULE_CHEERIO = 0x0020;
public static final int EXECUTION_MODE_MODULE_DAYJS = 0x0040;
public static final int EXECUTION_MODE_MODULE_I18N = 0x0080;
private static final String LOG_TAG = "JavaScriptSource"; private static final String LOG_TAG = "JavaScriptSource";
@@ -40,10 +36,6 @@ public abstract class JavaScriptSource extends ScriptSource {
.put("auto", EXECUTION_MODE_AUTO) .put("auto", EXECUTION_MODE_AUTO)
.put("jsox", EXECUTION_MODE_JSOX) .put("jsox", EXECUTION_MODE_JSOX)
.put("x", EXECUTION_MODE_JSOX) .put("x", EXECUTION_MODE_JSOX)
.put("axios", EXECUTION_MODE_MODULE_AXIOS)
.put("cheerio", EXECUTION_MODE_MODULE_CHEERIO)
.put("dayjs", EXECUTION_MODE_MODULE_DAYJS)
.put("i18n", EXECUTION_MODE_MODULE_I18N)
.build(); .build();
private static final int PARSING_MAX_TOKEN = 300; private static final int PARSING_MAX_TOKEN = 300;

View File

@@ -1,5 +1,5 @@
#Sat Jan 24 16:10:49 CST 2026 #Sat Jan 24 20:43:27 CST 2026
BUILD_TIME=1769242249875 BUILD_TIME=1769258607559
COMPILE_SDK_VERSION=36 COMPILE_SDK_VERSION=36
IMAGE_QUANT_CMAKE_VERSION=3.22.1 IMAGE_QUANT_CMAKE_VERSION=3.22.1
IMAGE_QUANT_NDK_VERSION=26.1.10909125 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 RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
TARGET_SDK_VERSION=36 TARGET_SDK_VERSION=36
TARGET_SDK_VERSION_INRT=29 TARGET_SDK_VERSION_INRT=29
VERSION_BUILD=3652 VERSION_BUILD=3653
VERSION_NAME=6.7.0 Alpha18 VERSION_NAME=6.7.0 Alpha18
VSCODE_EXT_REQUIRED_VERSION=1.0.13 VSCODE_EXT_REQUIRED_VERSION=1.0.13