6.7.0 - Alpha18 - 内置模块 (dayjs/cheerio/dayjs/i18n) 脱离脚本执行模式, 使用全局懒加载方式替代
This commit is contained in:
@@ -27,15 +27,10 @@ import java.text.MessageFormat;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
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.
|
||||
@@ -44,12 +39,6 @@ public class ScriptEngineService {
|
||||
|
||||
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 final Context mApplicationContext;
|
||||
private final Console mGlobalConsole;
|
||||
@@ -160,7 +149,6 @@ public class ScriptEngineService {
|
||||
}
|
||||
ScriptSource source = task.getSource();
|
||||
if (source instanceof JavaScriptSource src) {
|
||||
GLOBAL_MODULES.forEach((mode) -> handleGlobalModuleExecution(src, mode, getModuleNameFromMode(mode)));
|
||||
int mode = src.getExecutionMode();
|
||||
if ((mode & JavaScriptSource.EXECUTION_MODE_UI) != 0) {
|
||||
return ScriptExecuteActivity.execute(mApplicationContext, mScriptEngineManager, task);
|
||||
@@ -187,15 +175,6 @@ public class ScriptEngineService {
|
||||
.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) {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,9 +18,7 @@ import org.autojs.autojs.core.console.GlobalConsole
|
||||
import org.autojs.autojs.core.image.capture.ScreenCaptureRequester
|
||||
import org.autojs.autojs.core.looper.Loopers
|
||||
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.deleteProp
|
||||
import org.autojs.autojs.rhino.extension.ScriptableExtensions.prop
|
||||
import org.autojs.autojs.lang.ThreadCompat
|
||||
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.PERMANENT
|
||||
import org.mozilla.javascript.ScriptableObject.READONLY
|
||||
import org.mozilla.javascript.Wrapper
|
||||
import java.io.File
|
||||
import java.io.FileFilter
|
||||
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.
|
||||
* Transformed by SuperMonster003 on May 24, 2024.
|
||||
*/
|
||||
@Suppress("unused", "PropertyName", "PrivatePropertyName")
|
||||
@Suppress("unused", "PropertyName")
|
||||
class ScriptRuntime private constructor(builder: Builder) {
|
||||
|
||||
private val mJob = SupervisorJob()
|
||||
@@ -407,12 +404,12 @@ class ScriptRuntime private constructor(builder: Builder) {
|
||||
// @Commented by SuperMonster003 on May 24, 2022.
|
||||
// ! Use internal Rhino JSON for better performance and compatibility.
|
||||
// ! 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.
|
||||
// ! Already implemented in 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.
|
||||
@@ -441,23 +438,23 @@ class ScriptRuntime private constructor(builder: Builder) {
|
||||
* Substitution of 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 }
|
||||
|
||||
private 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 }
|
||||
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 }
|
||||
internal val js_structured_clone by lazy { rhinoRequire("structured-clone.min") as BaseFunction }
|
||||
|
||||
init {
|
||||
info = accessibilityBridge.infoProvider
|
||||
@@ -500,7 +497,6 @@ class ScriptRuntime private constructor(builder: Builder) {
|
||||
).let { ApiPlugins(mUiHandlerAppContext, it) }
|
||||
|
||||
augment(topLevelScope)
|
||||
applyExecutionModules(topLevelScope)
|
||||
applyInternalModules(topLevelScope)
|
||||
}
|
||||
|
||||
@@ -817,20 +813,6 @@ class ScriptRuntime private constructor(builder: Builder) {
|
||||
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) {
|
||||
js_object_assign(global, js_mod_internal)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@ import io.github.g00fy2.versioncompare.Version
|
||||
import org.autojs.autojs.annotation.RhinoFunctionBody
|
||||
import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface
|
||||
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.jsBrief
|
||||
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?>>>(
|
||||
"WIDTH" to Supplier { ScreenMetrics.deviceScreenWidth },
|
||||
"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 {
|
||||
|
||||
@@ -28,10 +28,6 @@ public abstract class JavaScriptSource extends ScriptSource {
|
||||
public static final int EXECUTION_MODE_UI = 0x0001;
|
||||
public static final int EXECUTION_MODE_AUTO = 0x0002;
|
||||
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";
|
||||
|
||||
@@ -40,10 +36,6 @@ public abstract class JavaScriptSource extends ScriptSource {
|
||||
.put("auto", EXECUTION_MODE_AUTO)
|
||||
.put("jsox", 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();
|
||||
|
||||
private static final int PARSING_MAX_TOKEN = 300;
|
||||
|
||||
Reference in New Issue
Block a user