This commit is contained in:
hyb1996
2017-05-02 11:27:04 +08:00
parent 0d39afccb2
commit 68706fbd98
71 changed files with 759 additions and 514 deletions

View File

@@ -0,0 +1,37 @@
package com.stardust.autojs;
import com.stardust.autojs.engine.JavaScriptEngine;
import com.stardust.autojs.runtime.ScriptRuntime;
/**
* Created by Stardust on 2017/5/1.
*/
public class RunnableScriptExecution extends ScriptExecution.AbstarctScriptExecution implements ScriptExecution, Runnable {
private JavaScriptEngine mJavaScriptEngine;
private ScriptRuntime mScriptRuntime;
private ScriptEngineService mScriptEngineService;
public RunnableScriptExecution(ScriptEngineService service, ScriptExecutionTask task) {
super(task);
mScriptEngineService = service;
}
@Override
public void run() {
mJavaScriptEngine = mScriptEngineService.createScriptEngine();
mScriptRuntime = mScriptEngineService.createScriptRuntime();
mScriptExecutionTask.execute(mScriptRuntime, mJavaScriptEngine);
}
@Override
public JavaScriptEngine getEngine() {
return mJavaScriptEngine;
}
@Override
public ScriptRuntime getRuntime() {
return mScriptRuntime;
}
}

View File

@@ -11,6 +11,7 @@ import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.runtime.api.Console;
import com.stardust.autojs.script.ScriptSource;
import com.stardust.lang.ThreadCompat;
import com.stardust.util.Supplier;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -20,6 +21,7 @@ import java.util.Arrays;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* Created by Stardust on 2017/1/23.
@@ -29,16 +31,6 @@ public class ScriptEngineService {
private static final String LOG_TAG = "ScriptEngineService";
private static final EventBus EVENT_BUS = new EventBus();
private static ScriptEngineService instance;
public static ScriptEngineService getInstance() {
return instance;
}
public static void setInstance(ScriptEngineService service) {
instance = service;
}
private static final ScriptExecutionListener DEFAULT_LISTENER = new SimpleScriptExecutionListener() {
@Override
public void onStart(JavaScriptEngine engine, ScriptSource source) {
@@ -54,31 +46,34 @@ public class ScriptEngineService {
};
private final ScriptRuntime mRuntime;
private final Supplier<ScriptRuntime> mRuntimeSupplier;
private final Context mContext;
private final Console mConsole;
private ScriptRuntime mGlobalScriptRuntime;
private final Console mGlobalConsole;
private final JavaScriptEngineManager mJavaScriptEngineManager;
private final EngineLifecycleObserver mEngineLifecycleObserver = new EngineLifecycleObserver();
private ScriptExecutionListener mDefaultScriptExecutionListener = DEFAULT_LISTENER;
ScriptEngineService(ScriptEngineServiceBuilder builder) {
mRuntime = builder.mRuntime;
mRuntimeSupplier = builder.mRuntimeSupplier;
mContext = builder.mContext;
mJavaScriptEngineManager = builder.mJavaScriptEngineManager;
mConsole = builder.mConsole;
mGlobalScriptRuntime = mRuntimeSupplier.get();
mGlobalConsole = mGlobalScriptRuntime.console;
mJavaScriptEngineManager.setEngineLifecycleCallback(mEngineLifecycleObserver);
EVENT_BUS.register(this);
}
public ScriptRuntime getRuntime() {
return mRuntime;
public Console getGlobalConsole() {
return mGlobalConsole;
}
public Console getConsole() {
return mConsole;
public ScriptExecutionListener getDefaultScriptExecutionListener() {
return mDefaultScriptExecutionListener;
}
public ScriptExecutionListener getDefaultListener() {
return DEFAULT_LISTENER;
public void setDefaultScriptExecutionListener(ScriptExecutionListener defaultScriptExecutionListener) {
mDefaultScriptExecutionListener = defaultScriptExecutionListener;
}
public JavaScriptEngine createScriptEngine() {
@@ -87,6 +82,10 @@ public class ScriptEngineService {
return engine;
}
public ScriptRuntime createScriptRuntime() {
return mRuntimeSupplier.get();
}
public void registerEngineLifecycleCallback(JavaScriptEngineManager.EngineLifecycleCallback engineLifecycleCallback) {
mEngineLifecycleObserver.registerCallback(engineLifecycleCallback);
}
@@ -96,18 +95,15 @@ public class ScriptEngineService {
}
public static boolean causedByInterrupted(Throwable e) {
return e.getCause() instanceof ScriptInterrupptedException;
return e instanceof ScriptInterrupptedException || e.getCause() instanceof ScriptInterrupptedException;
}
public ScriptExecution execute(ScriptExecutionTask task) {
ScriptExecutionListener listener = task.getExecutionListenerOrDefault(DEFAULT_LISTENER);
ScriptSource source = task.getSource();
int mode = source.getExecutionMode();
if ((mode & ScriptSource.EXECUTION_MODE_UI) != 0) {
ScriptExecuteActivity.execute(mContext, task);
return null;
task.setDefaultListenerIfNeeded(mDefaultScriptExecutionListener);
if (isUiMode(task)) {
return ScriptExecuteActivity.execute(mContext, this, task);
} else {
RunnableScriptExecution scriptExecution = new RunnableScriptExecution(source, listener, task.getConfig());
RunnableScriptExecution scriptExecution = new RunnableScriptExecution(this, task);
if (task.getConfig().runInNewThread) {
new ThreadCompat(scriptExecution).start();
} else {
@@ -117,6 +113,12 @@ public class ScriptEngineService {
}
}
private boolean isUiMode(ScriptExecutionTask task) {
ScriptSource source = task.getSource();
int mode = source.getExecutionMode();
return (mode & ScriptSource.EXECUTION_MODE_UI) != 0;
}
public ScriptExecution execute(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) {
return execute(new ScriptExecutionTask(source, listener, config));
}
@@ -126,16 +128,16 @@ public class ScriptEngineService {
}
public ScriptExecution execute(ScriptSource source) {
return execute(source, DEFAULT_LISTENER, ExecutionConfig.getDefault());
return execute(source, mDefaultScriptExecutionListener, ExecutionConfig.getDefault());
}
@Subscribe
public void onScriptExecution(ScriptExecutionEvent event) {
if (event.getCode() == ScriptExecutionEvent.ON_START) {
mConsole.v(DateFormat.getTimeInstance().format(new Date()) + " " + mContext.getString(R.string.text_start_running) + " " + event.getMessage());
mGlobalConsole.verbose(DateFormat.getTimeInstance().format(new Date()) + " " + mContext.getString(R.string.text_start_running) + " " + event.getMessage());
} else if (event.getCode() == ScriptExecutionEvent.ON_EXCEPTION) {
mRuntime.toast(mContext.getString(R.string.text_error) + ": " + event.getMessage());
mConsole.e(event.getMessage());
mGlobalScriptRuntime.toast(mContext.getString(R.string.text_error) + ": " + event.getMessage());
mGlobalConsole.error(event.getMessage());
}
}
@@ -147,9 +149,9 @@ public class ScriptEngineService {
public void stopAllAndToast() {
int n = stopAll();
if (n > 0)
mRuntime.toast(String.format(mContext.getString(R.string.text_already_stop_n_scripts), n));
mGlobalScriptRuntime.toast(String.format(mContext.getString(R.string.text_already_stop_n_scripts), n));
else
mRuntime.toast(mContext.getString(R.string.text_no_running_script));
mGlobalScriptRuntime.toast(mContext.getString(R.string.text_no_running_script));
}
public String[] getGlobalFunctions() {
@@ -160,31 +162,6 @@ public class ScriptEngineService {
return mJavaScriptEngineManager.getEngines();
}
private class RunnableScriptExecution extends ScriptExecutionTask implements ScriptExecution, Runnable {
private JavaScriptEngine mJavaScriptEngine;
RunnableScriptExecution(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) {
super(source, listener, config);
}
@Override
public void run() {
mJavaScriptEngine = createScriptEngine();
execute(mRuntime, mJavaScriptEngine);
}
@Override
public JavaScriptEngine getEngine() {
return mJavaScriptEngine;
}
@Override
public ScriptRuntime getRuntime() {
return mRuntime;
}
}
private static class EngineLifecycleObserver implements JavaScriptEngineManager.EngineLifecycleCallback {
private final Set<JavaScriptEngineManager.EngineLifecycleCallback> mEngineLifecycleCallbacks = new LinkedHashSet<>();
@@ -211,6 +188,7 @@ public class ScriptEngineService {
synchronized (mEngineLifecycleCallbacks) {
mEngineLifecycleCallbacks.add(callback);
}
}
void unregisterCallback(JavaScriptEngineManager.EngineLifecycleCallback callback) {

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import com.stardust.autojs.engine.JavaScriptEngineManager;
import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.runtime.api.Console;
import com.stardust.util.Supplier;
/**
* Created by Stardust on 2017/4/2.
@@ -12,17 +13,16 @@ import com.stardust.autojs.runtime.api.Console;
public class ScriptEngineServiceBuilder {
ScriptRuntime mRuntime;
Supplier<ScriptRuntime> mRuntimeSupplier;
Context mContext;
Console mConsole;
JavaScriptEngineManager mJavaScriptEngineManager;
public ScriptEngineServiceBuilder() {
}
public ScriptEngineServiceBuilder runtime(ScriptRuntime runtime) {
mRuntime = runtime;
public ScriptEngineServiceBuilder runtime(Supplier<ScriptRuntime> runtimeSupplier) {
mRuntimeSupplier = runtimeSupplier;
return this;
}
@@ -31,11 +31,6 @@ public class ScriptEngineServiceBuilder {
return this;
}
public ScriptEngineServiceBuilder console(Console console) {
mConsole = console;
return this;
}
public ScriptEngineServiceBuilder engineManger(JavaScriptEngineManager manager) {
mJavaScriptEngineManager = manager;
return this;

View File

@@ -19,4 +19,34 @@ public interface ScriptExecution {
ScriptExecutionListener getListener();
ExecutionConfig getConfig();
abstract class AbstarctScriptExecution implements ScriptExecution {
protected ScriptExecutionTask mScriptExecutionTask;
public AbstarctScriptExecution(ScriptExecutionTask task) {
mScriptExecutionTask = task;
}
@Override
public abstract JavaScriptEngine getEngine();
@Override
public abstract ScriptRuntime getRuntime();
@Override
public ScriptSource getSource() {
return mScriptExecutionTask.getSource();
}
@Override
public ScriptExecutionListener getListener() {
return mScriptExecutionTask.getListener();
}
@Override
public ExecutionConfig getConfig() {
return mScriptExecutionTask.getConfig();
}
}
}

View File

@@ -38,14 +38,12 @@ public class ScriptExecutionTask implements Serializable {
return mExecutionConfig;
}
public void execute(ScriptRuntime runtime, JavaScriptEngine engine) {
try {
if ((mScriptSource.getExecutionMode() & ScriptSource.EXECUTION_MODE_AUTO) != 0) {
runtime.ensureAccessibilityServiceEnabled();
}
mExecutionListener.onStart(engine, mScriptSource);
engine.setTag("script", mScriptSource);
mExecutionListener.onSuccess(engine, mScriptSource, engine.execute(mScriptSource));
prepare(runtime, engine);
doExecution(engine);
} catch (Exception e) {
e.printStackTrace();
mExecutionListener.onException(engine, mScriptSource, e);
@@ -55,9 +53,29 @@ public class ScriptExecutionTask implements Serializable {
}
}
private void prepare(ScriptRuntime runtime, JavaScriptEngine engine) {
if ((mScriptSource.getExecutionMode() & ScriptSource.EXECUTION_MODE_AUTO) != 0) {
runtime.ensureAccessibilityServiceEnabled();
}
engine.put("__runtime__", runtime);
engine.init();
}
private void doExecution(JavaScriptEngine engine) {
engine.setTag("script", mScriptSource);
mExecutionListener.onStart(engine, mScriptSource);
mExecutionListener.onSuccess(engine, mScriptSource, engine.execute(mScriptSource));
}
public ScriptExecutionListener getExecutionListenerOrDefault(ScriptExecutionListener defaultListener) {
if (mExecutionListener == null)
return defaultListener;
return mExecutionListener;
}
public void setDefaultListenerIfNeeded(ScriptExecutionListener defaultScriptExecutionListener) {
if (mExecutionListener == null) {
mExecutionListener = defaultScriptExecutionListener;
}
}
}

View File

@@ -43,7 +43,6 @@ public abstract class JavaScriptEngineManager {
public JavaScriptEngine createEngine() {
JavaScriptEngine engine = createEngineInner();
putProperties(engine);
engine.init();
addEngine(engine);
return engine;
}

View File

@@ -11,12 +11,12 @@ import com.stardust.autojs.runtime.ScriptRuntime;
public class NodeJsJavaScriptEngineManager extends RhinoJavaScriptEngineManager {
public NodeJsJavaScriptEngineManager(Context context, ScriptRuntime runtime) {
super(context, runtime);
public NodeJsJavaScriptEngineManager(Context context) {
super(context);
}
@Override
public NodeJsJavaScriptEngine createEngineInner() {
protected NodeJsJavaScriptEngine createEngineInner() {
NodeJsJavaScriptEngine engine = new NodeJsJavaScriptEngine(this);
initRequireBuilder(engine.getContext(), engine.getScriptable());
return engine;

View File

@@ -43,7 +43,6 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
mThread = Thread.currentThread();
mContext = createContext();
mScriptable = createScope(mContext);
setTag("create-traces", Arrays.toString(Thread.currentThread().getStackTrace()));
}
@Override
@@ -53,8 +52,6 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
@Override
public Object execute(ScriptSource source) {
setTag("execute-traces", Arrays.toString(Thread.currentThread().getStackTrace()));
setTag("execute-source", source);
return mContext.evaluateString(mScriptable, source.getScript(), "<script>", 1, null);
}
@@ -72,17 +69,6 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
public synchronized void destroy() {
Log.d(LOG_TAG, "on destroy");
Context.exit();
// TODO: 2017/4/6 XXX :在这里回收内存池并不好
final AccessibilityNodeInfoAllocator allocator = (AccessibilityNodeInfoAllocator) getTag("allocator");
if (allocator != null) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// FIXME: 2017/4/28
//allocator.recycleAll();
}
}, 1000);
}
mEngineManager.removeEngine(this);
}
@@ -93,10 +79,6 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
@Override
public synchronized Object getTag(String key) {
Object tag = mTags.get(key);
if (tag == null && key.equals("script")) {
Log.i(LOG_TAG, mTags.entrySet().toString());
}
return mTags.get(key);
}

View File

@@ -32,12 +32,11 @@ public class RhinoJavaScriptEngineManager extends JavaScriptEngineManager {
private String mRequirePath = "";
public RhinoJavaScriptEngineManager(android.content.Context context, ScriptRuntime runtime) {
public RhinoJavaScriptEngineManager(android.content.Context context) {
super(context);
put("__runtime__", runtime);
}
public RhinoJavaScriptEngine createEngineInner() {
protected RhinoJavaScriptEngine createEngineInner() {
RhinoJavaScriptEngine engine = new RhinoJavaScriptEngine(this);
initRequireBuilder(engine.getContext(), engine.getScriptable());
return engine;

View File

@@ -5,9 +5,12 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.stardust.autojs.ExecutionConfig;
import com.stardust.autojs.ScriptEngineService;
import com.stardust.autojs.ScriptExecution;
import com.stardust.autojs.ScriptExecutionListener;
import com.stardust.autojs.ScriptExecutionTask;
import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.script.ScriptSource;
/**
@@ -16,44 +19,54 @@ import com.stardust.autojs.script.ScriptSource;
public class ScriptExecuteActivity extends Activity {
private static final String EXTRA_TASK = "EXTRA_TASK";
private static ActivityScriptExecution execution;
private Object mResult;
private JavaScriptEngine mJavaScriptEngine;
private ScriptExecutionListener mExecutionListener;
private ScriptSource mScriptSource;
public static void execute(Context context, ScriptExecutionTask task) {
public static ActivityScriptExecution execute(Context context, ScriptEngineService service, ScriptExecutionTask task) {
if (execution != null) {
return null;
}
execution = new ActivityScriptExecution(service, task);
context.startActivity(new Intent(context, ScriptExecuteActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(EXTRA_TASK, task));
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
return execution;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handleIntent(getIntent());
mJavaScriptEngine = ScriptEngineService.getInstance().createScriptEngine();
mScriptSource = execution.getSource();
mJavaScriptEngine = execution.getEngine();
mExecutionListener = execution.getListener();
runScript();
}
private void handleIntent(Intent intent) {
ScriptExecutionTask scriptExecutionTask = (ScriptExecutionTask) intent.getSerializableExtra(EXTRA_TASK);
mExecutionListener = scriptExecutionTask.getListener();
mScriptSource = scriptExecutionTask.getSource();
}
private void runScript() {
mJavaScriptEngine.put("activity", this);
try {
mJavaScriptEngine.setTag("script", mScriptSource);
mResult = mJavaScriptEngine.execute(mScriptSource);
prepare();
doExecution();
} catch (Exception e) {
mExecutionListener.onException(mJavaScriptEngine, mScriptSource, e);
super.finish();
}
}
private void doExecution() {
mJavaScriptEngine.setTag("script", mScriptSource);
mExecutionListener.onStart(mJavaScriptEngine, mScriptSource);
mResult = mJavaScriptEngine.execute(mScriptSource);
}
private void prepare() {
mJavaScriptEngine.put("activity", this);
mJavaScriptEngine.put("__runtime__", execution.getRuntime());
mJavaScriptEngine.init();
}
@Override
public void finish() {
mExecutionListener.onSuccess(mJavaScriptEngine, mScriptSource, mResult);
@@ -65,6 +78,31 @@ public class ScriptExecuteActivity extends Activity {
super.onDestroy();
mJavaScriptEngine.put("activity", null);
mJavaScriptEngine.destroy();
execution = null;
}
private static class ActivityScriptExecution extends ScriptExecution.AbstarctScriptExecution {
private JavaScriptEngine mJavaScriptEngine;
private ScriptRuntime mScriptRuntime;
ActivityScriptExecution(ScriptEngineService service, ScriptExecutionTask task) {
super(task);
mJavaScriptEngine = service.createScriptEngine();
mScriptRuntime = service.createScriptRuntime();
}
@Override
public JavaScriptEngine getEngine() {
return mJavaScriptEngine;
}
@Override
public ScriptRuntime getRuntime() {
return mScriptRuntime;
}
}
}

View File

@@ -0,0 +1,63 @@
package com.stardust.autojs.runtime;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.autojs.runtime.api.Console;
/**
* Created by Stardust on 2017/5/1.
*/
public abstract class AbstractConsole implements Console {
protected abstract void log(int level, CharSequence charSequence);
public void println(int level, @Nullable Object data, Object... options) {
log(level, format(data, options));
}
public CharSequence format(@Nullable Object data, Object... options) {
if (data == null)
return "\n";
if (options == null || options.length == 0)
return data.toString();
return String.format(data.toString(), options);
}
@Override
public void verbose(@Nullable Object data, Object... options) {
println(Log.VERBOSE, data, options);
}
@Override
public void log(@Nullable Object data, Object... options) {
println(Log.DEBUG, data, options);
}
@Override
public void info(@Nullable Object data, Object... options) {
println(Log.INFO, data, options);
}
@Override
public void warn(@Nullable Object data, Object... options) {
println(Log.WARN, data, options);
}
@Override
public void error(@Nullable Object data, Object... options) {
println(Log.ERROR, data, options);
}
@Override
public void assertTrue(boolean value, @Nullable Object data, Object... options) {
if (!value) {
println(Log.ASSERT, data, options);
throw new ScriptStopException(new AssertionError(format(data, options)));
}
}
}

View File

@@ -53,10 +53,10 @@ public class ScriptRuntime {
private AbstractShell mRootShell;
public ScriptRuntime(Context context, Console console, AccessibilityBridge accessibilityBridge) {
public ScriptRuntime(Context context, Handler uiHandler, Console console, AccessibilityBridge accessibilityBridge) {
mContext = context;
mAccessibilityBridge = accessibilityBridge;
mUIHandler = new Handler(mContext.getMainLooper());
mUIHandler = uiHandler;
app = new AppUtils(context);
info = accessibilityBridge.getInfoProvider();
this.console = console;
@@ -94,8 +94,8 @@ public class ScriptRuntime {
@JavascriptInterface
public void shellExecNotReturnResultWithRoot(String cmd){
if(mRootShell == null){
public void shellExecNotReturnResultWithRoot(String cmd) {
if (mRootShell == null) {
mRootShell = new SlowShell(true);
}
mRootShell.exec(cmd);
@@ -108,12 +108,7 @@ public class ScriptRuntime {
@JavascriptInterface
public UiSelector selector(JavaScriptEngine engine) {
AccessibilityNodeInfoAllocator allocator = (AccessibilityNodeInfoAllocator) engine.getTag("allocator");
if (allocator == null) {
allocator = new AccessibilityNodeInfoAllocator();
engine.setTag("allocator", allocator);
}
return new UiSelector(mAccessibilityBridge, allocator);
return new UiSelector(mAccessibilityBridge);
}
@JavascriptInterface

View File

@@ -11,33 +11,29 @@ import com.stardust.autojs.runtime.JavascriptInterface;
public interface Console {
@JavascriptInterface
void i(@Nullable Object o);
void verbose(@Nullable Object data, Object... options);
@JavascriptInterface
void i(String str);
void log(@Nullable Object data, Object... options);
@JavascriptInterface
void e(String message);
void info(@Nullable Object data, Object... options);
@JavascriptInterface
void e(@Nullable Object o);
void warn(@Nullable Object data, Object... options);
@JavascriptInterface
void v(String v);
void error(@Nullable Object data, Object... options);
@JavascriptInterface
void v(@Nullable Object o);
void assertTrue(boolean value, @Nullable Object data, Object... options);
@JavascriptInterface
void log(@Nullable Object o);
@JavascriptInterface
void log(String string);
void clear();
@JavascriptInterface
void show();
@JavascriptInterface
void clear();
void hide();
}

View File

@@ -9,7 +9,6 @@ import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.autojs.runtime.AccessibilityBridge;
import com.stardust.autojs.runtime.JavascriptInterface;
import com.stardust.autojs.runtime.ScriptInterrupptedException;
import com.stardust.autojs.runtime.ScriptStopException;
import com.stardust.automator.AccessibilityEventCommandHost;
import com.stardust.automator.ActionArgument;
import com.stardust.automator.UiGlobalSelector;
@@ -66,7 +65,7 @@ public class UiSelector extends UiGlobalSelector {
public void execute(AccessibilityService service, AccessibilityEvent event) {
AccessibilityNodeInfo root = service.getRootInActiveWindow();
if (root != null) {
result = findOf(root);
result = findOf(new UiObject(root, mAllocator));
}
}
@@ -75,7 +74,7 @@ public class UiSelector extends UiGlobalSelector {
private static final String TAG = "UiSelector";
private AccessibilityBridge mAccessibilityBridge;
private AccessibilityNodeInfoAllocator mAllocator = AccessibilityNodeInfoAllocator.getGlobal();
private AccessibilityNodeInfoAllocator mAllocator = null;
public UiSelector(AccessibilityBridge accessibilityBridge) {
mAccessibilityBridge = accessibilityBridge;
@@ -97,7 +96,7 @@ public class UiSelector extends UiGlobalSelector {
if (service != null) {
AccessibilityNodeInfo root = service.getRootInActiveWindow();
if (root != null) {
return findOf(mAllocator, root);
return findOf(new UiObject(root, mAllocator));
}
}
return null;
@@ -142,7 +141,7 @@ public class UiSelector extends UiGlobalSelector {
if (!id.contains(":")) {
addFilter(new DfsFilter() {
@Override
protected boolean isIncluded(AccessibilityNodeInfo nodeInfo) {
protected boolean isIncluded(UiObject nodeInfo) {
String fullId = mAccessibilityBridge.getInfoProvider().getLatestPackage() + ":id/" + id;
return fullId.equals(nodeInfo.getViewIdResourceName());
}

View File

@@ -13,11 +13,11 @@ import com.stardust.autojs.runtime.JavascriptInterface;
import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.runtime.api.AutomatorConfig;
import com.stardust.automator.AccessibilityEventCommandHost;
import com.stardust.automator.UiObject;
import com.stardust.automator.simple_action.SimpleAction;
import com.stardust.automator.simple_action.ActionFactory;
import com.stardust.automator.simple_action.ActionTarget;
import com.stardust.util.DeveloperUtils;
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
/**
* Created by Stardust on 2017/4/2.
@@ -198,12 +198,8 @@ public class SimpleActionAutomator {
AccessibilityNodeInfo root = service.getRootInActiveWindow();
if (root == null)
return false;
AccessibilityNodeInfoAllocator allocator = new AccessibilityNodeInfoAllocator();
simpleAction.setAllocator(allocator);
Log.v(TAG, "performAction: " + simpleAction + " root = " + root);
boolean result = simpleAction.perform(root);
allocator.recycleAll();
return result;
return simpleAction.perform(new UiObject(root));
}
private boolean isRunningPackageSelf() {