diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7616cb72..b9ae1c9e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -97,7 +97,7 @@
diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
index ac61aee3..253671c0 100644
--- a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
+++ b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
@@ -22,15 +22,15 @@ import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.autojs.runtime.api.Console;
-import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
+import com.stardust.autojs.core.image.ScreenCaptureRequester;
import com.stardust.autojs.core.inputevent.InputEventObserver;
import com.stardust.autojs.script.AutoFileSource;
import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
-import com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity;
-import com.stardust.autojs.runtime.api.Shell;
+import com.stardust.autojs.core.image.ScreenCaptureRequestActivity;
+import com.stardust.autojs.core.util.Shell;
import com.stardust.autojs.core.console.StardustConsole;
import com.stardust.util.ScreenMetrics;
import com.stardust.util.Supplier;
diff --git a/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java b/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java
index 06eb0b75..fc15357d 100644
--- a/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java
+++ b/app/src/main/java/com/stardust/scriptdroid/tool/AccessibilityServiceTool.java
@@ -7,7 +7,7 @@ import android.text.TextUtils;
import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R;
-import com.stardust.autojs.runtime.api.ProcessShell;
+import com.stardust.autojs.core.util.ProcessShell;
import com.stardust.scriptdroid.accessibility.AccessibilityService;
import com.stardust.view.accessibility.AccessibilityServiceUtils;
diff --git a/autojs/src/main/assets/javascript_engine_init.js b/autojs/src/main/assets/javascript_engine_init.js
index 7f17b7e3..fda1ad45 100644
--- a/autojs/src/main/assets/javascript_engine_init.js
+++ b/autojs/src/main/assets/javascript_engine_init.js
@@ -47,4 +47,4 @@ require("__general__")(__runtime__, this);
})(__that__);
__importClass__(android.view.KeyEvent);
-__importClass__(com.stardust.autojs.runtime.api.Shell);
+__importClass__(com.stardust.autojs.core.util.Shell);
diff --git a/autojs/src/main/assets/modules/__RootAutomator__.js b/autojs/src/main/assets/modules/__RootAutomator__.js
index 82a91ba4..8d909602 100644
--- a/autojs/src/main/assets/modules/__RootAutomator__.js
+++ b/autojs/src/main/assets/modules/__RootAutomator__.js
@@ -1,6 +1,6 @@
module.exports = function(__runtime__, scope){
function RootAutomator(){
- this.__ra__ = Object.create(new com.stardust.autojs.runtime.api.RootAutomator(scope.context));
+ this.__ra__ = Object.create(new com.stardust.autojs.core.inputevent.RootAutomator(scope.context));
var methods = ["sendEvent", "touch", "setScreenMetrics", "touchX", "touchY", "sendSync", "sendMtSync", "tap",
"swipe", "press", "longPress", "touchDown", "touchUp", "touchMove", "getDefaultId", "setDefaultId", "exit"];
for(var i = 0; i < methods.length; i++){
diff --git a/autojs/src/main/assets/modules/__images__.js b/autojs/src/main/assets/modules/__images__.js
index d957b25c..68597f3f 100644
--- a/autojs/src/main/assets/modules/__images__.js
+++ b/autojs/src/main/assets/modules/__images__.js
@@ -70,15 +70,15 @@ module.exports = function(__runtime__, scope){
function getColorDetector(color, algorithm, threshold){
switch(algorithm){
case "rgb":
- return new com.stardust.autojs.runtime.api.image.ColorDetector.RGBDistanceDetector(color, threshold);
+ return new com.stardust.autojs.core.image.ColorDetector.RGBDistanceDetector(color, threshold);
case "equal":
- return new com.stardust.autojs.runtime.api.image.ColorDetector.EqualityDetector(color);
+ return new com.stardust.autojs.core.image.ColorDetector.EqualityDetector(color);
case "diff":
- return new com.stardust.autojs.runtime.api.image.ColorDetector.DifferenceDetector(color, threshold);
+ return new com.stardust.autojs.core.image.ColorDetector.DifferenceDetector(color, threshold);
case "rgb+":
- return new com.stardust.autojs.runtime.api.image.ColorDetector.WeightedRGBDistanceDetector(color, threshold);
+ return new com.stardust.autojs.core.image.ColorDetector.WeightedRGBDistanceDetector(color, threshold);
case "hs":
- return new com.stardust.autojs.runtime.api.image.ColorDetector.HSDistanceDetector(color, threshold);
+ return new com.stardust.autojs.core.image.ColorDetector.HSDistanceDetector(color, threshold);
}
throw new Error("Unknown algorithm: " + algorithm);
}
diff --git a/autojs/src/main/assets/modules/__ui__.js b/autojs/src/main/assets/modules/__ui__.js
index c2ecdd52..c4f7e092 100644
--- a/autojs/src/main/assets/modules/__ui__.js
+++ b/autojs/src/main/assets/modules/__ui__.js
@@ -52,7 +52,7 @@ module.exports = function(__runtime__, scope){
}
ui.findViewByStringId = function(view, id){
- return com.stardust.autojs.runtime.api.ui.JsViewHelper.findViewByStringId(view, id);
+ return com.stardust.autojs.core.ui.JsViewHelper.findViewByStringId(view, id);
}
function decorate(view){
diff --git a/autojs/src/main/assets/modules/__web__.js b/autojs/src/main/assets/modules/__web__.js
index 0bbd42cc..12bf0fa3 100644
--- a/autojs/src/main/assets/modules/__web__.js
+++ b/autojs/src/main/assets/modules/__web__.js
@@ -2,11 +2,11 @@
module.exports = function(__runtime__, scope){
scope.newInjectableWebClient = function(){
- return new com.stardust.autojs.runtime.api.InjectableWebClient(org.mozilla.javascript.Context.getCurrentContext(), scope);
+ return new com.stardust.autojs.core.web.InjectableWebClient(org.mozilla.javascript.Context.getCurrentContext(), scope);
}
scope.newInjectableWebView = function(activity){
- return new com.stardust.autojs.runtime.api.InjectableWebView(scope.activity, org.mozilla.javascript.Context.getCurrentContext(), scope);
+ return new com.stardust.autojs.core.web.InjectableWebView(scope.activity, org.mozilla.javascript.Context.getCurrentContext(), scope);
}
}
diff --git a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java
index 16b6785d..605e7dd8 100644
--- a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java
+++ b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java
@@ -6,6 +6,7 @@ import com.stardust.autojs.engine.JavaScriptEngine;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.engine.ScriptEngineManager;
import com.stardust.autojs.execution.ExecutionConfig;
+import com.stardust.autojs.execution.LoopedBasedJavaScriptExecution;
import com.stardust.autojs.execution.RunnableScriptExecution;
import com.stardust.autojs.execution.ScriptExecuteActivity;
import com.stardust.autojs.execution.ScriptExecution;
@@ -130,7 +131,12 @@ public class ScriptEngineService {
return ScriptExecuteActivity.execute(mContext, mScriptEngineManager, task);
}
}
- RunnableScriptExecution r = new RunnableScriptExecution(mScriptEngineManager, task);
+ RunnableScriptExecution r;
+ if (source instanceof JavaScriptSource) {
+ r = new LoopedBasedJavaScriptExecution(mScriptEngineManager, task);
+ } else {
+ r = new RunnableScriptExecution(mScriptEngineManager, task);
+ }
if (task.getConfig().runInNewThread) {
new ThreadCompat(r).start();
} else {
diff --git a/autojs/src/main/java/com/stardust/autojs/codegeneration/AutoScriptGenerator.java b/autojs/src/main/java/com/stardust/autojs/codegeneration/AutoScriptGenerator.java
index 8d815570..3cd6cbfa 100644
--- a/autojs/src/main/java/com/stardust/autojs/codegeneration/AutoScriptGenerator.java
+++ b/autojs/src/main/java/com/stardust/autojs/codegeneration/AutoScriptGenerator.java
@@ -1,9 +1,5 @@
package com.stardust.autojs.codegeneration;
-import com.stardust.autojs.runtime.api.UiSelector;
-import com.stardust.automator.UiGlobalSelector;
-import com.stardust.automator.UiObject;
-
/**
* Created by Stardust on 2017/8/4.
*/
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
rename to autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java
index cb72dcc9..8893e549 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java
@@ -1,10 +1,9 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.core.accessibility;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.accessibility.AccessibilityNodeInfo;
-import com.stardust.autojs.core.accessibility.AccessibilityBridge;
import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.autojs.runtime.accessibility.AutomatorConfig;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java b/autojs/src/main/java/com/stardust/autojs/core/eventloop/EventEmitter.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java
rename to autojs/src/main/java/com/stardust/autojs/core/eventloop/EventEmitter.java
index b9109416..701dc541 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/eventloop/EventEmitter.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.core.eventloop;
import android.support.annotation.NonNull;
@@ -92,7 +92,7 @@ public class EventEmitter {
private Map mListenersMap = new HashMap<>();
public static int defaultMaxListeners = 10;
private int mMaxListeners = defaultMaxListeners;
- ScriptBridges mBridges;
+ protected ScriptBridges mBridges;
public EventEmitter(ScriptBridges bridges) {
mBridges = bridges;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorDetector.java b/autojs/src/main/java/com/stardust/autojs/core/image/ColorDetector.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorDetector.java
rename to autojs/src/main/java/com/stardust/autojs/core/image/ColorDetector.java
index e5a4241d..76a1fef4 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorDetector.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/image/ColorDetector.java
@@ -1,9 +1,7 @@
-package com.stardust.autojs.runtime.api.image;
+package com.stardust.autojs.core.image;
import android.graphics.Color;
-import java.util.Comparator;
-
/**
* Created by Stardust on 2017/5/20.
*/
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java b/autojs/src/main/java/com/stardust/autojs/core/image/ColorFinder.java
similarity index 99%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java
rename to autojs/src/main/java/com/stardust/autojs/core/image/ColorFinder.java
index fb8dd117..ac9053ad 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/image/ColorFinder.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.image;
+package com.stardust.autojs.core.image;
import android.graphics.Point;
import android.graphics.Rect;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorIterator.java b/autojs/src/main/java/com/stardust/autojs/core/image/ColorIterator.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorIterator.java
rename to autojs/src/main/java/com/stardust/autojs/core/image/ColorIterator.java
index e63aec1c..87db8a69 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorIterator.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/image/ColorIterator.java
@@ -1,8 +1,7 @@
-package com.stardust.autojs.runtime.api.image;
+package com.stardust.autojs.core.image;
import android.graphics.Rect;
import android.media.Image;
-import android.util.Log;
import java.nio.ByteBuffer;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ConcurrentColorIterator.java b/autojs/src/main/java/com/stardust/autojs/core/image/ConcurrentColorIterator.java
similarity index 97%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/image/ConcurrentColorIterator.java
rename to autojs/src/main/java/com/stardust/autojs/core/image/ConcurrentColorIterator.java
index e4b0fb95..3a0a0a56 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ConcurrentColorIterator.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/image/ConcurrentColorIterator.java
@@ -1,8 +1,7 @@
-package com.stardust.autojs.runtime.api.image;
+package com.stardust.autojs.core.image;
import android.graphics.Rect;
import android.media.Image;
-import android.util.Log;
import java.nio.ByteBuffer;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCaptureRequestActivity.java b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCaptureRequestActivity.java
similarity index 97%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCaptureRequestActivity.java
rename to autojs/src/main/java/com/stardust/autojs/core/image/ScreenCaptureRequestActivity.java
index ee41dc0b..b87ef052 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCaptureRequestActivity.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCaptureRequestActivity.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.image;
+package com.stardust.autojs.core.image;
import android.app.Activity;
import android.content.Context;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCaptureRequester.java b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCaptureRequester.java
similarity index 97%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCaptureRequester.java
rename to autojs/src/main/java/com/stardust/autojs/core/image/ScreenCaptureRequester.java
index 66a9620b..91707757 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCaptureRequester.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCaptureRequester.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.image;
+package com.stardust.autojs.core.image;
import android.app.Activity;
import android.content.Context;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java
similarity index 99%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java
rename to autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java
index 8749d26f..d966fb8e 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.image;
+package com.stardust.autojs.core.image;
import android.app.Activity;
import android.content.Context;
diff --git a/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventObserver.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventObserver.java
index 99d74dbe..11326c33 100644
--- a/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventObserver.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventObserver.java
@@ -5,7 +5,7 @@ import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.stardust.autojs.core.record.inputevent.EventFormatException;
-import com.stardust.autojs.runtime.api.Shell;
+import com.stardust.autojs.core.util.Shell;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.regex.Matcher;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/RootAutomator.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/RootAutomator.java
similarity index 97%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/RootAutomator.java
rename to autojs/src/main/java/com/stardust/autojs/core/inputevent/RootAutomator.java
index aa164194..bd5e3cfd 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/RootAutomator.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/RootAutomator.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.core.inputevent;
import android.content.Context;
import android.os.SystemClock;
@@ -6,7 +6,9 @@ import android.support.annotation.Nullable;
import android.view.ViewConfiguration;
import com.stardust.autojs.core.inputevent.InputDevices;
+import com.stardust.autojs.core.util.ProcessShell;
import com.stardust.autojs.engine.RootAutomatorEngine;
+import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.util.ScreenMetrics;
diff --git a/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
index 6fd9c6e1..1b81445d 100644
--- a/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
@@ -6,8 +6,8 @@ import android.util.Log;
import com.stardust.autojs.core.inputevent.InputEventCodes;
import com.stardust.autojs.core.inputevent.InputEventObserver;
+import com.stardust.autojs.core.inputevent.RootAutomator;
import com.stardust.autojs.engine.RootAutomatorEngine;
-import com.stardust.autojs.runtime.api.RootAutomator;
import com.stardust.pio.UncheckedIOException;
import com.stardust.util.ScreenMetrics;
diff --git a/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToRootAutomatorRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToRootAutomatorRecorder.java
index b8908b7f..30fba9b0 100644
--- a/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToRootAutomatorRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToRootAutomatorRecorder.java
@@ -1,12 +1,10 @@
package com.stardust.autojs.core.record.inputevent;
import android.support.annotation.NonNull;
-import android.util.Log;
import com.stardust.autojs.core.inputevent.InputEventCodes;
import com.stardust.autojs.core.inputevent.InputEventObserver;
import com.stardust.autojs.engine.RootAutomatorEngine;
-import com.stardust.autojs.runtime.api.RootAutomator;
import static com.stardust.util.ScreenMetrics.getDeviceScreenHeight;
import static com.stardust.util.ScreenMetrics.getDeviceScreenWidth;
diff --git a/autojs/src/main/java/com/stardust/autojs/core/templatematching/Test.java b/autojs/src/main/java/com/stardust/autojs/core/templatematching/Test.java
index 8c406c65..63a8e87c 100644
--- a/autojs/src/main/java/com/stardust/autojs/core/templatematching/Test.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/templatematching/Test.java
@@ -1,10 +1,7 @@
package com.stardust.autojs.core.templatematching;
-import android.graphics.Color;
import android.media.Image;
-import com.stardust.autojs.runtime.api.image.Images;
-
/**
* Created by Stardust on 2017/10/5.
*/
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/BlockedMaterialDialog.java b/autojs/src/main/java/com/stardust/autojs/core/ui/BlockedMaterialDialog.java
similarity index 99%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/BlockedMaterialDialog.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/BlockedMaterialDialog.java
index 25004e3e..1577fcfe 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/BlockedMaterialDialog.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/BlockedMaterialDialog.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui;
+package com.stardust.autojs.core.ui;
import android.app.Activity;
import android.content.Context;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/ConvertLayoutInflater.java b/autojs/src/main/java/com/stardust/autojs/core/ui/ConvertLayoutInflater.java
similarity index 82%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/ConvertLayoutInflater.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/ConvertLayoutInflater.java
index 02b87194..6aa66adf 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/ConvertLayoutInflater.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/ConvertLayoutInflater.java
@@ -1,30 +1,18 @@
-package com.stardust.autojs.runtime.api.ui;
+package com.stardust.autojs.core.ui;
import android.content.Context;
import android.text.InputType;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator;
-import com.stardust.autojs.runtime.api.ui.widget.JsFrameLayout;
-import com.stardust.autojs.runtime.api.ui.xml.XmlConverter;
+import com.stardust.autojs.core.ui.widget.JsFrameLayout;
+import com.stardust.autojs.core.ui.xml.XmlConverter;
import com.stardust.util.MapEntries;
-import org.xml.sax.SAXException;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlPullParserFactory;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.lang.reflect.Field;
-import java.util.HashMap;
import java.util.Map;
-import javax.xml.parsers.ParserConfigurationException;
-
/**
* Created by Stardust on 2017/5/14.
*/
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/JsLayoutInflater.java b/autojs/src/main/java/com/stardust/autojs/core/ui/JsLayoutInflater.java
similarity index 81%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/JsLayoutInflater.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/JsLayoutInflater.java
index fbd06558..b0635818 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/JsLayoutInflater.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/JsLayoutInflater.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui;
+package com.stardust.autojs.core.ui;
import android.content.Context;
import android.view.View;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/JsViewHelper.java b/autojs/src/main/java/com/stardust/autojs/core/ui/JsViewHelper.java
similarity index 95%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/JsViewHelper.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/JsViewHelper.java
index a0e00ade..3d07f45d 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/JsViewHelper.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/JsViewHelper.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui;
+package com.stardust.autojs.core.ui;
import android.content.res.Resources;
import android.support.annotation.Nullable;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsButton.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsButton.java
similarity index 80%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsButton.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsButton.java
index 8c3c43f8..54ceb624 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsButton.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsButton.java
@@ -1,10 +1,7 @@
-package com.stardust.autojs.runtime.api.ui.widget;
+package com.stardust.autojs.core.ui.widget;
import android.content.Context;
-import android.os.Build;
-import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
-import android.widget.Button;
/**
* Created by Stardust on 2017/5/15.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsEditText.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsEditText.java
similarity index 88%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsEditText.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsEditText.java
index c9d79fac..201f8b39 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsEditText.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsEditText.java
@@ -1,8 +1,7 @@
-package com.stardust.autojs.runtime.api.ui.widget;
+package com.stardust.autojs.core.ui.widget;
import android.content.Context;
import android.util.AttributeSet;
-import android.widget.EditText;
/**
* Created by Stardust on 2017/5/15.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsFrameLayout.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsFrameLayout.java
similarity index 86%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsFrameLayout.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsFrameLayout.java
index 00676431..a72f141c 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsFrameLayout.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsFrameLayout.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui.widget;
+package com.stardust.autojs.core.ui.widget;
import android.content.Context;
import android.os.Build;
@@ -11,8 +11,7 @@ import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
-import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator;
-import com.stardust.autojs.runtime.api.ui.JsViewHelper;
+import com.stardust.autojs.core.ui.JsViewHelper;
/**
* Created by Stardust on 2017/5/14.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsLinearLayout.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsLinearLayout.java
similarity index 84%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsLinearLayout.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsLinearLayout.java
index 9a27c169..04fc4ee9 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsLinearLayout.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsLinearLayout.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui.widget;
+package com.stardust.autojs.core.ui.widget;
import android.content.Context;
import android.os.Build;
@@ -8,8 +8,7 @@ import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
-import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator;
-import com.stardust.autojs.runtime.api.ui.JsViewHelper;
+import com.stardust.autojs.core.ui.JsViewHelper;
/**
* Created by Stardust on 2017/5/14.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsRelativeLayout.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsRelativeLayout.java
similarity index 83%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsRelativeLayout.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsRelativeLayout.java
index 26533ba2..e8335c18 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsRelativeLayout.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsRelativeLayout.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui.widget;
+package com.stardust.autojs.core.ui.widget;
import android.content.Context;
import android.os.Build;
@@ -7,8 +7,7 @@ import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
-import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator;
-import com.stardust.autojs.runtime.api.ui.JsViewHelper;
+import com.stardust.autojs.core.ui.JsViewHelper;
/**
* Created by Stardust on 2017/5/14.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsTextView.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsTextView.java
similarity index 81%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsTextView.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsTextView.java
index fc51a9e4..820fe3aa 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/widget/JsTextView.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsTextView.java
@@ -1,11 +1,8 @@
-package com.stardust.autojs.runtime.api.ui.widget;
+package com.stardust.autojs.core.ui.widget;
import android.content.Context;
-import android.os.Build;
import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
-import android.widget.TextView;
/**
* Created by Stardust on 2017/5/15.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/AttributeHandler.java b/autojs/src/main/java/com/stardust/autojs/core/ui/xml/AttributeHandler.java
similarity index 99%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/AttributeHandler.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/xml/AttributeHandler.java
index f23d98b1..e9688860 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/AttributeHandler.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/xml/AttributeHandler.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui.xml;
+package com.stardust.autojs.core.ui.xml;
import org.w3c.dom.Node;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/NodeHandler.java b/autojs/src/main/java/com/stardust/autojs/core/ui/xml/NodeHandler.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/NodeHandler.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/xml/NodeHandler.java
index 893d2a92..963b986d 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/NodeHandler.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/xml/NodeHandler.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api.ui.xml;
+package com.stardust.autojs.core.ui.xml;
import org.w3c.dom.Node;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/XmlConverter.java b/autojs/src/main/java/com/stardust/autojs/core/ui/xml/XmlConverter.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/XmlConverter.java
rename to autojs/src/main/java/com/stardust/autojs/core/ui/xml/XmlConverter.java
index 1aeaf154..dde43b5a 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/xml/XmlConverter.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/ui/xml/XmlConverter.java
@@ -1,6 +1,4 @@
-package com.stardust.autojs.runtime.api.ui.xml;
-
-import com.stardust.util.MapEntries;
+package com.stardust.autojs.core.ui.xml;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
@@ -11,7 +9,6 @@ import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.StringReader;
-import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ProcessShell.java b/autojs/src/main/java/com/stardust/autojs/core/util/ProcessShell.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ProcessShell.java
rename to autojs/src/main/java/com/stardust/autojs/core/util/ProcessShell.java
index 2f8aa0f7..26755b48 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ProcessShell.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/util/ProcessShell.java
@@ -1,8 +1,9 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.core.util;
import android.util.Log;
+import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.util.ProcessUtils;
import com.stardust.pio.UncheckedIOException;
@@ -12,8 +13,6 @@ import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Reader;
/**
* Created by Stardust on 2017/1/20.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Shell.java b/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/Shell.java
rename to autojs/src/main/java/com/stardust/autojs/core/util/Shell.java
index 22581fb4..835ee518 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Shell.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java
@@ -1,10 +1,11 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.core.util;
import android.content.Context;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.util.Log;
+import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.lang.ThreadCompat;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebClient.java b/autojs/src/main/java/com/stardust/autojs/core/web/InjectableWebClient.java
similarity index 99%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebClient.java
rename to autojs/src/main/java/com/stardust/autojs/core/web/InjectableWebClient.java
index 726b4b02..5099e301 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebClient.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/web/InjectableWebClient.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.core.web;
import android.annotation.SuppressLint;
import android.util.Log;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebView.java b/autojs/src/main/java/com/stardust/autojs/core/web/InjectableWebView.java
similarity index 96%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebView.java
rename to autojs/src/main/java/com/stardust/autojs/core/web/InjectableWebView.java
index e40b95b4..7e34f406 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebView.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/web/InjectableWebView.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.core.web;
import android.content.Context;
import android.webkit.ValueCallback;
diff --git a/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java
index b3ef23b9..3a44dc82 100644
--- a/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java
+++ b/autojs/src/main/java/com/stardust/autojs/engine/LoopBasedJavaScriptEngine.java
@@ -8,6 +8,7 @@ import android.os.MessageQueue;
import com.stardust.autojs.runtime.api.Loopers;
import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.autojs.script.ScriptSource;
+import com.stardust.util.Callback;
/**
* Created by Stardust on 2017/7/28.
@@ -24,18 +25,27 @@ public class LoopBasedJavaScriptEngine extends RhinoJavaScriptEngine {
@Override
public Object execute(final JavaScriptSource source) {
+ execute(source, null);
+ return null;
+ }
+
+
+ public void execute(final ScriptSource source, final Callback