Rename and refactor autojs to support future developing of other script language
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<application
|
||||
android:label="@string/app_name"
|
||||
>
|
||||
<activity android:name=".engine.ScriptExecuteActivity"/>
|
||||
<activity android:name=".execution.ScriptExecuteActivity"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.stardust.autojs;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.JavaScriptEngineManager;
|
||||
import com.stardust.autojs.engine.ScriptExecuteActivity;
|
||||
import com.stardust.autojs.engine.AbstractScriptEngineManager;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngineManager;
|
||||
import com.stardust.autojs.execution.ScriptExecuteActivity;
|
||||
import com.stardust.autojs.execution.ExecutionConfig;
|
||||
import com.stardust.autojs.execution.RunnableScriptExecution;
|
||||
import com.stardust.autojs.execution.ScriptExecution;
|
||||
@@ -23,14 +23,9 @@ import com.stardust.util.UiHandler;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.microedition.khronos.opengles.GL;
|
||||
|
||||
import static com.stardust.autojs.runtime.ScriptInterruptedException.causedByInterrupted;
|
||||
|
||||
/**
|
||||
@@ -63,7 +58,7 @@ public class ScriptEngineService {
|
||||
private final Context mContext;
|
||||
private UiHandler mUiHandler;
|
||||
private final Console mGlobalConsole;
|
||||
private final JavaScriptEngineManager mJavaScriptEngineManager;
|
||||
private final ScriptEngineManager mScriptEngineManager;
|
||||
private final EngineLifecycleObserver mEngineLifecycleObserver = new EngineLifecycleObserver();
|
||||
private ScriptExecutionObserver mScriptExecutionObserver = new ScriptExecutionObserver();
|
||||
|
||||
@@ -71,9 +66,9 @@ public class ScriptEngineService {
|
||||
mRuntimeSupplier = builder.mRuntimeSupplier;
|
||||
mUiHandler = builder.mUiHandler;
|
||||
mContext = mUiHandler.getContext();
|
||||
mJavaScriptEngineManager = builder.mJavaScriptEngineManager;
|
||||
mScriptEngineManager = builder.mScriptEngineManager;
|
||||
mGlobalConsole = builder.mGlobalConsole;
|
||||
mJavaScriptEngineManager.setEngineLifecycleCallback(mEngineLifecycleObserver);
|
||||
mScriptEngineManager.setEngineLifecycleCallback(mEngineLifecycleObserver);
|
||||
mScriptExecutionObserver.registerScriptExecutionListener(GLOBAL_LISTENER);
|
||||
EVENT_BUS.register(this);
|
||||
}
|
||||
@@ -82,8 +77,8 @@ public class ScriptEngineService {
|
||||
return mGlobalConsole;
|
||||
}
|
||||
|
||||
public JavaScriptEngine createScriptEngine() {
|
||||
JavaScriptEngine engine = mJavaScriptEngineManager.createEngine();
|
||||
public ScriptEngine createScriptEngine() {
|
||||
ScriptEngine engine = mScriptEngineManager.createEngine();
|
||||
return engine;
|
||||
}
|
||||
|
||||
@@ -91,11 +86,11 @@ public class ScriptEngineService {
|
||||
return mRuntimeSupplier.get();
|
||||
}
|
||||
|
||||
public void registerEngineLifecycleCallback(JavaScriptEngineManager.EngineLifecycleCallback engineLifecycleCallback) {
|
||||
public void registerEngineLifecycleCallback(AbstractScriptEngineManager.EngineLifecycleCallback engineLifecycleCallback) {
|
||||
mEngineLifecycleObserver.registerCallback(engineLifecycleCallback);
|
||||
}
|
||||
|
||||
public void unregisterEngineLifecycleCallback(JavaScriptEngineManager.EngineLifecycleCallback engineLifecycleCallback) {
|
||||
public void unregisterEngineLifecycleCallback(AbstractScriptEngineManager.EngineLifecycleCallback engineLifecycleCallback) {
|
||||
mEngineLifecycleObserver.unregisterCallback(engineLifecycleCallback);
|
||||
}
|
||||
|
||||
@@ -154,7 +149,7 @@ public class ScriptEngineService {
|
||||
}
|
||||
|
||||
public int stopAll() {
|
||||
return mJavaScriptEngineManager.stopAll();
|
||||
return mScriptEngineManager.stopAll();
|
||||
}
|
||||
|
||||
|
||||
@@ -167,43 +162,43 @@ public class ScriptEngineService {
|
||||
}
|
||||
|
||||
public String[] getGlobalFunctions() {
|
||||
return mJavaScriptEngineManager.getGlobalFunctions();
|
||||
return mScriptEngineManager.getGlobalFunctions();
|
||||
}
|
||||
|
||||
public Set<JavaScriptEngine> getEngines() {
|
||||
return mJavaScriptEngineManager.getEngines();
|
||||
public Set<ScriptEngine> getEngines() {
|
||||
return mScriptEngineManager.getEngines();
|
||||
}
|
||||
|
||||
private static class EngineLifecycleObserver implements JavaScriptEngineManager.EngineLifecycleCallback {
|
||||
private static class EngineLifecycleObserver implements AbstractScriptEngineManager.EngineLifecycleCallback {
|
||||
|
||||
private final Set<JavaScriptEngineManager.EngineLifecycleCallback> mEngineLifecycleCallbacks = new LinkedHashSet<>();
|
||||
private final Set<AbstractScriptEngineManager.EngineLifecycleCallback> mEngineLifecycleCallbacks = new LinkedHashSet<>();
|
||||
|
||||
@Override
|
||||
public void onEngineCreate(JavaScriptEngine engine) {
|
||||
public void onEngineCreate(ScriptEngine engine) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
for (JavaScriptEngineManager.EngineLifecycleCallback callback : mEngineLifecycleCallbacks) {
|
||||
for (AbstractScriptEngineManager.EngineLifecycleCallback callback : mEngineLifecycleCallbacks) {
|
||||
callback.onEngineCreate(engine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEngineRemove(JavaScriptEngine engine) {
|
||||
public void onEngineRemove(ScriptEngine engine) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
for (JavaScriptEngineManager.EngineLifecycleCallback callback : mEngineLifecycleCallbacks) {
|
||||
for (AbstractScriptEngineManager.EngineLifecycleCallback callback : mEngineLifecycleCallbacks) {
|
||||
callback.onEngineRemove(engine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void registerCallback(JavaScriptEngineManager.EngineLifecycleCallback callback) {
|
||||
void registerCallback(AbstractScriptEngineManager.EngineLifecycleCallback callback) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
mEngineLifecycleCallbacks.add(callback);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void unregisterCallback(JavaScriptEngineManager.EngineLifecycleCallback callback) {
|
||||
void unregisterCallback(AbstractScriptEngineManager.EngineLifecycleCallback callback) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
mEngineLifecycleCallbacks.remove(callback);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package com.stardust.autojs;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngineManager;
|
||||
import com.stardust.autojs.engine.AbstractScriptEngineManager;
|
||||
import com.stardust.autojs.engine.ScriptEngineManager;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.util.Supplier;
|
||||
@@ -15,7 +14,7 @@ import com.stardust.util.UiHandler;
|
||||
public class ScriptEngineServiceBuilder {
|
||||
|
||||
Supplier<ScriptRuntime> mRuntimeSupplier;
|
||||
JavaScriptEngineManager mJavaScriptEngineManager;
|
||||
ScriptEngineManager mScriptEngineManager;
|
||||
Console mGlobalConsole;
|
||||
UiHandler mUiHandler;
|
||||
|
||||
@@ -33,8 +32,8 @@ public class ScriptEngineServiceBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ScriptEngineServiceBuilder engineManger(JavaScriptEngineManager manager) {
|
||||
mJavaScriptEngineManager = manager;
|
||||
public ScriptEngineServiceBuilder engineManger(ScriptEngineManager manager) {
|
||||
mScriptEngineManager = manager;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,37 +17,28 @@ import java.util.Set;
|
||||
* Created by Stardust on 2017/1/27.
|
||||
*/
|
||||
|
||||
public abstract class JavaScriptEngineManager {
|
||||
public abstract class AbstractScriptEngineManager implements ScriptEngineManager {
|
||||
|
||||
public interface EngineLifecycleCallback {
|
||||
|
||||
void onEngineCreate(JavaScriptEngine engine);
|
||||
|
||||
void onEngineRemove(JavaScriptEngine engine);
|
||||
}
|
||||
|
||||
private static final String TAG = "JavaScriptEngineManager";
|
||||
private static final String TAG = "AbstractScriptEngineManager";
|
||||
|
||||
private Map<String, Object> mGlobalVariableMap = new HashMap<>();
|
||||
private final Set<JavaScriptEngine> mEngines = new HashSet<>();
|
||||
private final Set<ScriptEngine> mEngines = new HashSet<>();
|
||||
private EngineLifecycleCallback mEngineLifecycleCallback;
|
||||
private final ScriptSource INIT_SCRIPT;
|
||||
|
||||
private android.content.Context mContext;
|
||||
|
||||
public JavaScriptEngineManager(Context context) {
|
||||
public AbstractScriptEngineManager(Context context) {
|
||||
mContext = context;
|
||||
INIT_SCRIPT = new StringScriptSource(readInitScript());
|
||||
}
|
||||
|
||||
public JavaScriptEngine createEngine() {
|
||||
JavaScriptEngine engine = createEngineInner();
|
||||
public ScriptEngine createEngine() {
|
||||
ScriptEngine engine = createEngineInner();
|
||||
putProperties(engine);
|
||||
addEngine(engine);
|
||||
return engine;
|
||||
}
|
||||
|
||||
private void addEngine(JavaScriptEngine engine) {
|
||||
private void addEngine(ScriptEngine engine) {
|
||||
synchronized (mEngines) {
|
||||
mEngines.add(engine);
|
||||
if (mEngineLifecycleCallback != null) {
|
||||
@@ -56,7 +47,7 @@ public abstract class JavaScriptEngineManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void put(String varName, Object value) {
|
||||
public void putGlobal(String varName, Object value) {
|
||||
mGlobalVariableMap.put(varName, value);
|
||||
}
|
||||
|
||||
@@ -64,11 +55,11 @@ public abstract class JavaScriptEngineManager {
|
||||
mEngineLifecycleCallback = engineLifecycleCallback;
|
||||
}
|
||||
|
||||
public Set<JavaScriptEngine> getEngines() {
|
||||
public Set<ScriptEngine> getEngines() {
|
||||
return mEngines;
|
||||
}
|
||||
|
||||
protected abstract JavaScriptEngine createEngineInner();
|
||||
protected abstract ScriptEngine createEngineInner();
|
||||
|
||||
public abstract String[] getGlobalFunctions();
|
||||
|
||||
@@ -76,13 +67,13 @@ public abstract class JavaScriptEngineManager {
|
||||
return mContext;
|
||||
}
|
||||
|
||||
protected void putProperties(JavaScriptEngine engine) {
|
||||
protected void putProperties(ScriptEngine engine) {
|
||||
for (Map.Entry<String, Object> variable : mGlobalVariableMap.entrySet()) {
|
||||
engine.put(variable.getKey(), variable.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
void removeEngine(JavaScriptEngine engine) {
|
||||
public void removeEngine(ScriptEngine engine) {
|
||||
synchronized (mEngines) {
|
||||
if (mEngines.remove(engine) && mEngineLifecycleCallback != null) {
|
||||
mEngineLifecycleCallback.onEngineRemove(engine);
|
||||
@@ -90,28 +81,11 @@ public abstract class JavaScriptEngineManager {
|
||||
}
|
||||
}
|
||||
|
||||
private String readInitScript() {
|
||||
try {
|
||||
return PFile.read(mContext.getAssets().open("javascript_engine_init.js"));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public ScriptSource getInitScript() {
|
||||
if (BuildConfig.DEBUG) {
|
||||
// 调试时不缓存INIT_SCRIPT否则修改javascript_engine_init.js后不会更新
|
||||
return new StringScriptSource(readInitScript());
|
||||
} else {
|
||||
return INIT_SCRIPT;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int stopAll() {
|
||||
synchronized (mEngines) {
|
||||
int n = mEngines.size();
|
||||
for (JavaScriptEngine engine : mEngines) {
|
||||
for (ScriptEngine engine : mEngines) {
|
||||
engine.forceStop();
|
||||
}
|
||||
return n;
|
||||
@@ -6,6 +6,7 @@ import com.stardust.autojs.rhino_android.AndroidContextFactory;
|
||||
import com.stardust.autojs.rhino_android.RhinoAndroidHelper;
|
||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.pio.UncheckedIOException;
|
||||
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.ContextFactory;
|
||||
@@ -14,7 +15,8 @@ import org.mozilla.javascript.Scriptable;
|
||||
import org.mozilla.javascript.ScriptableObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Hashtable;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@@ -22,7 +24,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
* Created by Stardust on 2017/4/2.
|
||||
*/
|
||||
|
||||
public class RhinoJavaScriptEngine implements JavaScriptEngine {
|
||||
public class RhinoJavaScriptEngine implements ScriptEngine {
|
||||
|
||||
private static final String LOG_TAG = "RhinoJavaScriptEngine";
|
||||
|
||||
@@ -48,7 +50,15 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
|
||||
|
||||
@Override
|
||||
public Object execute(ScriptSource source) {
|
||||
return mContext.evaluateString(mScriptable, source.getScript(), "<script>", 1, null);
|
||||
Reader reader = source.getScriptReader();
|
||||
if (reader == null) {
|
||||
return mContext.evaluateString(mScriptable, source.getScript(), "<script>", 1, null);
|
||||
}
|
||||
try {
|
||||
return mContext.evaluateReader(mScriptable, source.getScriptReader(), "<script>", 1, null);
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.stardust.autojs.engine;
|
||||
|
||||
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.BuildConfig;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.SequenceScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.pio.PFile;
|
||||
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.Scriptable;
|
||||
@@ -25,12 +27,13 @@ import java.util.List;
|
||||
* Created by Stardust on 2017/3/1.
|
||||
*/
|
||||
|
||||
public class RhinoJavaScriptEngineManager extends JavaScriptEngineManager {
|
||||
public class RhinoJavaScriptEngineManager extends AbstractScriptEngineManager {
|
||||
|
||||
private String[] mFunctions;
|
||||
|
||||
private String mRequirePath = "";
|
||||
|
||||
private ScriptSource mCustomInitScript;
|
||||
private ScriptSource mInitScript;
|
||||
|
||||
public RhinoJavaScriptEngineManager(android.content.Context context) {
|
||||
super(context);
|
||||
@@ -42,6 +45,38 @@ public class RhinoJavaScriptEngineManager extends JavaScriptEngineManager {
|
||||
return engine;
|
||||
}
|
||||
|
||||
public void setInitScript(String script) {
|
||||
setInitScriptSource(new StringScriptSource(script));
|
||||
}
|
||||
|
||||
public void setInitScriptSource(ScriptSource initScriptSource) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
mCustomInitScript = initScriptSource;
|
||||
} else {
|
||||
mInitScript = new SequenceScriptSource("<init>", new StringScriptSource(readInitScript()), initScriptSource);
|
||||
}
|
||||
}
|
||||
|
||||
private String readInitScript() {
|
||||
try {
|
||||
return PFile.read(getContext().getAssets().open("javascript_engine_init.js"));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
ScriptSource getInitScript() {
|
||||
if (mInitScript == null || BuildConfig.DEBUG) {
|
||||
// 调试时不缓存INIT_SCRIPT否则修改javascript_engine_init.js后不会更新
|
||||
if (mCustomInitScript != null) {
|
||||
mInitScript = new SequenceScriptSource("<init>", new StringScriptSource(readInitScript()), mCustomInitScript);
|
||||
} else {
|
||||
mInitScript = new StringScriptSource(readInitScript());
|
||||
}
|
||||
}
|
||||
return mInitScript;
|
||||
}
|
||||
|
||||
public void setRequirePath(String requirePath) {
|
||||
mRequirePath = requirePath;
|
||||
}
|
||||
@@ -64,7 +99,7 @@ public class RhinoJavaScriptEngineManager extends JavaScriptEngineManager {
|
||||
}
|
||||
|
||||
private String[] getGlobalFunctionsInner() {
|
||||
JavaScriptEngine engine = createEngine();
|
||||
ScriptEngine engine = createEngine();
|
||||
ScriptSource source = new StringScriptSource("this", "this");
|
||||
engine.setTag("script", source);
|
||||
Scriptable scriptable = (Scriptable) engine.execute(source);
|
||||
|
||||
@@ -6,15 +6,15 @@ import com.stardust.autojs.script.ScriptSource;
|
||||
* Created by Stardust on 2017/4/2.
|
||||
* <p>
|
||||
* <p>
|
||||
* A JavaScriptEngine is created by {@link JavaScriptEngineManager#createEngine()}, and then can be
|
||||
* used to execute script with {@link JavaScriptEngine#execute(ScriptSource)} in the **same** thread.
|
||||
* A ScriptEngine is created by {@link AbstractScriptEngineManager#createEngine()}, and then can be
|
||||
* used to execute script with {@link ScriptEngine#execute(ScriptSource)} in the **same** thread.
|
||||
* When the execution finish successfully, the engine should be destroy in the thread that created it.
|
||||
* <p>
|
||||
* If you want to stop the engine in other threads, you should call {@link JavaScriptEngine#forceStop()}.
|
||||
* If you want to stop the engine in other threads, you should call {@link ScriptEngine#forceStop()}.
|
||||
* It will throw a {@link com.stardust.autojs.runtime.ScriptStopException}.
|
||||
*/
|
||||
|
||||
public interface JavaScriptEngine {
|
||||
public interface ScriptEngine {
|
||||
|
||||
|
||||
void put(String name, Object value);
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.stardust.autojs.engine;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/5/7.
|
||||
*/
|
||||
|
||||
public interface ScriptEngineManager {
|
||||
|
||||
|
||||
interface EngineLifecycleCallback {
|
||||
|
||||
void onEngineCreate(ScriptEngine engine);
|
||||
|
||||
void onEngineRemove(ScriptEngine engine);
|
||||
}
|
||||
|
||||
ScriptEngine createEngine();
|
||||
|
||||
void putGlobal(String varName, Object value);
|
||||
|
||||
void setEngineLifecycleCallback(EngineLifecycleCallback engineLifecycleCallback);
|
||||
|
||||
void removeEngine(ScriptEngine engine);
|
||||
|
||||
Set<ScriptEngine> getEngines();
|
||||
|
||||
String[] getGlobalFunctions();
|
||||
|
||||
int stopAll();
|
||||
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package com.stardust.autojs.execution;
|
||||
import android.util.Log;
|
||||
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
@@ -14,7 +14,7 @@ import com.stardust.autojs.script.ScriptSource;
|
||||
public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecution implements ScriptExecution, Runnable {
|
||||
|
||||
private static final String TAG = "RunnableScriptExecution";
|
||||
private JavaScriptEngine mJavaScriptEngine;
|
||||
private ScriptEngine mScriptEngine;
|
||||
private ScriptRuntime mScriptRuntime;
|
||||
private ScriptEngineService mScriptEngineService;
|
||||
|
||||
@@ -25,12 +25,12 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
mJavaScriptEngine = mScriptEngineService.createScriptEngine();
|
||||
mScriptEngine = mScriptEngineService.createScriptEngine();
|
||||
mScriptRuntime = mScriptEngineService.createScriptRuntime();
|
||||
execute(mScriptRuntime, mJavaScriptEngine);
|
||||
execute(mScriptRuntime, mScriptEngine);
|
||||
}
|
||||
|
||||
private void execute(ScriptRuntime runtime, JavaScriptEngine engine) {
|
||||
private void execute(ScriptRuntime runtime, ScriptEngine engine) {
|
||||
try {
|
||||
prepare(runtime, engine);
|
||||
doExecution(engine);
|
||||
@@ -43,7 +43,7 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
|
||||
}
|
||||
}
|
||||
|
||||
private void prepare(ScriptRuntime runtime, JavaScriptEngine engine) {
|
||||
private void prepare(ScriptRuntime runtime, ScriptEngine engine) {
|
||||
if ((getSource().getExecutionMode() & ScriptSource.EXECUTION_MODE_AUTO) != 0) {
|
||||
runtime.ensureAccessibilityServiceEnabled();
|
||||
}
|
||||
@@ -51,15 +51,15 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
|
||||
engine.init();
|
||||
}
|
||||
|
||||
private void doExecution(JavaScriptEngine engine) {
|
||||
private void doExecution(ScriptEngine engine) {
|
||||
engine.setTag("script", getSource());
|
||||
getListener().onStart(this);
|
||||
getListener().onSuccess(this, engine.execute(getSource()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public JavaScriptEngine getEngine() {
|
||||
return mJavaScriptEngine;
|
||||
public ScriptEngine getEngine() {
|
||||
return mScriptEngine;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.stardust.autojs.engine;
|
||||
package com.stardust.autojs.execution;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
@@ -6,9 +6,7 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.autojs.execution.ScriptExecution;
|
||||
import com.stardust.autojs.execution.ScriptExecutionListener;
|
||||
import com.stardust.autojs.execution.ScriptExecutionTask;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
@@ -21,7 +19,7 @@ public class ScriptExecuteActivity extends Activity {
|
||||
|
||||
private static ActivityScriptExecution execution;
|
||||
private Object mResult;
|
||||
private JavaScriptEngine mJavaScriptEngine;
|
||||
private ScriptEngine mScriptEngine;
|
||||
private ScriptExecutionListener mExecutionListener;
|
||||
private ScriptSource mScriptSource;
|
||||
|
||||
@@ -39,7 +37,7 @@ public class ScriptExecuteActivity extends Activity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mScriptSource = execution.getSource();
|
||||
mJavaScriptEngine = execution.getEngine();
|
||||
mScriptEngine = execution.getEngine();
|
||||
mExecutionListener = execution.getListener();
|
||||
runScript();
|
||||
}
|
||||
@@ -55,15 +53,15 @@ public class ScriptExecuteActivity extends Activity {
|
||||
}
|
||||
|
||||
private void doExecution() {
|
||||
mJavaScriptEngine.setTag("script", mScriptSource);
|
||||
mScriptEngine.setTag("script", mScriptSource);
|
||||
mExecutionListener.onStart(execution);
|
||||
mResult = mJavaScriptEngine.execute(mScriptSource);
|
||||
mResult = mScriptEngine.execute(mScriptSource);
|
||||
}
|
||||
|
||||
private void prepare() {
|
||||
mJavaScriptEngine.put("activity", this);
|
||||
mJavaScriptEngine.put("__runtime__", execution.getRuntime());
|
||||
mJavaScriptEngine.init();
|
||||
mScriptEngine.put("activity", this);
|
||||
mScriptEngine.put("__runtime__", execution.getRuntime());
|
||||
mScriptEngine.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -75,25 +73,25 @@ public class ScriptExecuteActivity extends Activity {
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
mJavaScriptEngine.put("activity", null);
|
||||
mJavaScriptEngine.destroy();
|
||||
mScriptEngine.put("activity", null);
|
||||
mScriptEngine.destroy();
|
||||
execution = null;
|
||||
}
|
||||
|
||||
private static class ActivityScriptExecution extends ScriptExecution.AbstractScriptExecution {
|
||||
|
||||
private JavaScriptEngine mJavaScriptEngine;
|
||||
private ScriptEngine mScriptEngine;
|
||||
private ScriptRuntime mScriptRuntime;
|
||||
|
||||
ActivityScriptExecution(ScriptEngineService service, ScriptExecutionTask task) {
|
||||
super(task);
|
||||
mJavaScriptEngine = service.createScriptEngine();
|
||||
mScriptEngine = service.createScriptEngine();
|
||||
mScriptRuntime = service.createScriptRuntime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JavaScriptEngine getEngine() {
|
||||
return mJavaScriptEngine;
|
||||
public ScriptEngine getEngine() {
|
||||
return mScriptEngine;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.stardust.autojs.execution;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
@@ -10,7 +10,7 @@ import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
public interface ScriptExecution {
|
||||
|
||||
JavaScriptEngine getEngine();
|
||||
ScriptEngine getEngine();
|
||||
|
||||
ScriptRuntime getRuntime();
|
||||
|
||||
@@ -29,7 +29,7 @@ public interface ScriptExecution {
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract JavaScriptEngine getEngine();
|
||||
public abstract ScriptEngine getEngine();
|
||||
|
||||
@Override
|
||||
public abstract ScriptRuntime getRuntime();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.stardust.autojs.runtime;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.runtime.api.AbstractShell;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
@@ -52,7 +52,7 @@ public abstract class AbstractScriptRuntime {
|
||||
public abstract AbstractShell.Result shell(String cmd, int root);
|
||||
|
||||
@JavascriptInterface
|
||||
public abstract UiSelector selector(JavaScriptEngine engine);
|
||||
public abstract UiSelector selector(ScriptEngine engine);
|
||||
|
||||
@JavascriptInterface
|
||||
public abstract boolean isStopped();
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.stardust.autojs.runtime;
|
||||
import android.os.Build;
|
||||
|
||||
import com.stardust.autojs.R;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.rhino_android.AndroidClassLoader;
|
||||
import com.stardust.autojs.runtime.api.AbstractShell;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
@@ -72,7 +72,7 @@ public class ScriptRuntime extends AbstractScriptRuntime {
|
||||
return ProcessShell.execCommand(cmd, root != 0);
|
||||
}
|
||||
|
||||
public UiSelector selector(JavaScriptEngine engine) {
|
||||
public UiSelector selector(ScriptEngine engine) {
|
||||
return new UiSelector(mAccessibilityBridge);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,8 +2,12 @@ package com.stardust.autojs.script;
|
||||
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.pio.PFile;
|
||||
import com.stardust.pio.UncheckedIOException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.Reader;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
@@ -35,6 +39,15 @@ public class FileScriptSource extends ScriptSource {
|
||||
return mScript;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Reader getScriptReader() {
|
||||
try {
|
||||
return new FileReader(mFile);
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return mFile.toString();
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package com.stardust.autojs.script;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.View;
|
||||
|
||||
import com.stardust.util.MapEntries;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.Serializable;
|
||||
import java.io.StringReader;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -36,8 +40,21 @@ public abstract class ScriptSource implements Serializable {
|
||||
return mName;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public abstract String getScript();
|
||||
|
||||
@Nullable
|
||||
public abstract Reader getScriptReader();
|
||||
|
||||
@NonNull
|
||||
public Reader getNonNullScriptReader() {
|
||||
Reader reader = getScriptReader();
|
||||
if (reader == null) {
|
||||
return new StringReader(getScript());
|
||||
}
|
||||
return reader;
|
||||
}
|
||||
|
||||
public int getExecutionMode() {
|
||||
if (mExecutionMode == -1) {
|
||||
mExecutionMode = parseExecutionMode(getScript());
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
package com.stardust.autojs.script;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
*/
|
||||
|
||||
public class ScriptSourceWithInit extends ScriptSource {
|
||||
|
||||
private String mScript;
|
||||
private ScriptSource mMainScriptSource;
|
||||
|
||||
|
||||
public ScriptSourceWithInit(ScriptSource initScriptSource, ScriptSource mainScriptSource) {
|
||||
super(mainScriptSource.getName());
|
||||
mMainScriptSource = mainScriptSource;
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
if (initScriptSource.getScript() != null)
|
||||
stringBuilder.append(initScriptSource.getScript()).append("\n");
|
||||
stringBuilder.append(mainScriptSource.getScript());
|
||||
mScript = stringBuilder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getScript() {
|
||||
return mScript;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return mMainScriptSource.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.stardust.autojs.script;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.stardust.io.ConcatReader;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
*/
|
||||
|
||||
public class SequenceScriptSource extends ScriptSource {
|
||||
|
||||
private String mScript;
|
||||
private ScriptSource mSecondScriptSource;
|
||||
private ScriptSource mFirstScriptSource;
|
||||
|
||||
|
||||
public SequenceScriptSource(String name, ScriptSource firstScriptSource, ScriptSource secondScriptSource) {
|
||||
super(name);
|
||||
mSecondScriptSource = secondScriptSource;
|
||||
mFirstScriptSource = firstScriptSource;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getScript() {
|
||||
concatScriptsIfNeeded();
|
||||
return mScript;
|
||||
}
|
||||
|
||||
private void concatScriptsIfNeeded() {
|
||||
if (mScript != null)
|
||||
return;
|
||||
mScript = mFirstScriptSource.getScript() + mSecondScriptSource.getScript();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Reader getScriptReader() {
|
||||
if (mScript != null)
|
||||
return new StringReader(mScript);
|
||||
return new ConcatReader(mFirstScriptSource.getNonNullScriptReader(), mSecondScriptSource.getNonNullScriptReader());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return mSecondScriptSource.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,10 @@
|
||||
package com.stardust.autojs.script;
|
||||
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import java.io.Reader;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
*/
|
||||
@@ -24,4 +28,10 @@ public class StringScriptSource extends ScriptSource {
|
||||
return mScript;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Reader getScriptReader() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user