diff --git a/app/build.gradle b/app/build.gradle index 55db92e7..9c21e662 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.stardust.scriptdroid" minSdkVersion 17 targetSdkVersion 23 - versionCode 159 - versionName "2.0.16 Beta" + versionCode 160 + versionName "2.0.16 Alpha3" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { diff --git a/app/src/main/assets/help/catalogue.json b/app/src/main/assets/help/catalogue.json index ab01a3bd..b4d48365 100644 --- a/app/src/main/assets/help/catalogue.json +++ b/app/src/main/assets/help/catalogue.json @@ -69,6 +69,11 @@ "type": "markdown", "path":"documentation" }, + { + "title": "需要Root权限的触摸与多点触摸", + "type": "markdown", + "path":"documentation" + }, { "title": "UI(用户界面)", "type": "markdown", diff --git a/app/src/main/assets/help/documentation/脚本引擎.md b/app/src/main/assets/help/documentation/脚本引擎.md index f0acfdcb..9e5872d6 100644 --- a/app/src/main/assets/help/documentation/脚本引擎.md +++ b/app/src/main/assets/help/documentation/脚本引擎.md @@ -41,6 +41,8 @@ engines模块包含了一些与脚本引擎有关的函数,包括运行其他 停止所有正在运行的脚本并显示停止的脚本数量。包括当前脚本自身。 +### engines.myEngine() + # ScriptExecution 执行脚本时返回的对象,可以通过他获取执行的引擎、 diff --git a/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md b/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md index d9ca0e29..15fb4bfe 100644 --- a/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md +++ b/app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md @@ -1,9 +1,13 @@ + +注意:本章节的函数在后续版本很可能有改动!请勿过分依赖本章节函数的副作用。推荐使用RootAutomator(见《需要Root权限的触摸与多点触摸》)代替本章的触摸函数。 + 以下函数均需要root权限,可以实现任意位置的点击、滑动、长按、模拟物理按键等。 这些函数通常首字母大写以表示其特殊的权限。 这些函数均不返回任何值。 并且,这些函数的执行是异步的、非实时的,在不同机型上所用的时间不同。脚本不会等待动作执行完成才继续执行。因此最好在每个函数之后加上适当的sleep来达到期望的效果。 + 例如: ``` Tap(100, 100); diff --git a/app/src/main/assets/help/documentation/需要Root权限的触摸与多点触摸.md b/app/src/main/assets/help/documentation/需要Root权限的触摸与多点触摸.md index 212e03de..2898bed5 100644 --- a/app/src/main/assets/help/documentation/需要Root权限的触摸与多点触摸.md +++ b/app/src/main/assets/help/documentation/需要Root权限的触摸与多点触摸.md @@ -10,7 +10,7 @@ var ra = RootAutomator(context); ### RootAutomator.tap(x, y\[, id\]) * x \ 横坐标 * y \ 纵坐标 -* id \ 多点触摸id。默认值为1,可以通过setDefaultId指定。 +* id \ 多点触摸id,可选,默认为1,可以通过setDefaultId指定。 点击位置(x, y)。其中id是一个整数值,用于区分多点触摸,不同的id表示不同的"手指",例如: ``` @@ -29,7 +29,7 @@ ra.exit(); * x2 \ 滑动终点横坐标 * y2 \ 滑动终点纵坐标 * duration \ 滑动时长,单位毫秒,默认值为300 -* id \ 多点触摸id +* id \ 多点触摸id,可选,默认为1 模拟一次从(x1, y1)到(x2, y2)的时间为duration毫秒的滑动。 @@ -37,28 +37,36 @@ ra.exit(); * x \ 横坐标 * y \ 纵坐标 * duration \ 按下时长 -* id \ 多点触摸id +* id \ 多点触摸id,可选,默认为1 模拟按下位置(x, y),时长为duration毫秒。 +### RootAutomator.longPress(x, y[\, id\]) +* x \ 横坐标 +* y \ 纵坐标 +* duration \ 按下时长 +* id \ 多点触摸id,可选,默认为1 + +模拟长按位置(x, y)。 + 以上为简单模拟触摸操作的函数。如果要模拟一些复杂的手势,需要更底层的函数。 ### RootAutomator.touchDown(x, y[\, id\]) * x \ 横坐标 * y \ 纵坐标 -* id \ 多点触摸id +* id \ 多点触摸id,可选,默认为1 模拟手指按下位置(x, y)。 ### RootAutomator.touchMove(x, y[\, id\]) * x \ 横坐标 * y \ 纵坐标 -* id \ 多点触摸id +* id \ 多点触摸id,可选,默认为1 模拟移动手指到位置(x, y)。 -### RootAutomator.touchUp([\id\]) -* id \ 多点触摸id +### RootAutomator.touchUp(\[id\]) +* id \ 多点触摸id,可选,默认为1 模拟手指弹起。 diff --git a/app/src/main/assets/sample/需要Root权限的自动操作/删除全部空间留言.js b/app/src/main/assets/sample/需要Root权限的自动操作/删除全部空间留言.js index fcd82996..4f36bedd 100644 --- a/app/src/main/assets/sample/需要Root权限的自动操作/删除全部空间留言.js +++ b/app/src/main/assets/sample/需要Root权限的自动操作/删除全部空间留言.js @@ -1,27 +1,28 @@ -"auto"; +var ra = new RootAutomator(); +ra.setScreenMetrics(1080, 1920); -setScreenMetrics(1080, 1920); launchApp("QQ"); sleep(1500); //点击动态图标 -Tap(891, 1851); +ra.tap(891, 1851); //点击好友动态 -Tap(192, 453); +ra.tap(192, 453); //点击头像 -Tap(155, 638); +ra.tap(155, 638); //点击留言 -Tap(747, 775); +ra.tap(747, 775); while(true){ if(currentPackage() == 'com.tencent.mobileqq'){ //点击箭头图标 - Tap(1029, 433); + ra.tap(1029, 433); //点击删除 - Tap(530, 820); + ra.tap(530, 820); //点击确定 - Tap(331, 1122); + ra.tap(331, 1122); } sleep(200); } + diff --git a/autojs/src/main/assets/binary/root_automator b/autojs/src/main/assets/binary/root_automator index 2fcfbcc5..4e296d14 100644 Binary files a/autojs/src/main/assets/binary/root_automator and b/autojs/src/main/assets/binary/root_automator differ diff --git a/autojs/src/main/assets/modules/__RootAutomator__.js b/autojs/src/main/assets/modules/__RootAutomator__.js index 31669b09..3bc1acf8 100644 --- a/autojs/src/main/assets/modules/__RootAutomator__.js +++ b/autojs/src/main/assets/modules/__RootAutomator__.js @@ -2,7 +2,7 @@ module.exports = function(__runtime__, scope){ function RootAutomator(){ this.__ra__ = Object.create(new com.stardust.autojs.runtime.api.RootAutomator(scope.context)); var methods = ["sendEvent", "touch", "setScreenMetrics", "touchX", "touchY", "sendSync", "sendMtSync", "tap", - "swipe","touchDown", "touchUp", "touchMove", "getDefaultId", "setDefaultId", "exit"]; + "swipe", "press", "longPress", "touchDown", "touchUp", "touchMove", "getDefaultId", "setDefaultId", "exit"]; for(var i = 0; i < methods.length; i++){ var method = methods[i]; this[method] = this.__ra__[method].bind(this.__ra__); diff --git a/autojs/src/main/assets/modules/__engines__.js b/autojs/src/main/assets/modules/__engines__.js index cd1d532e..b491308f 100644 --- a/autojs/src/main/assets/modules/__engines__.js +++ b/autojs/src/main/assets/modules/__engines__.js @@ -5,18 +5,19 @@ module.exports = function(__runtime__, scope){ var engines = {}; engines.execScript = function(name, script, config){ - config = fillConfig(config); - return rtEngines.execScript(name, script, config); + return rtEngines.execScript(name, script, fillConfig(config)); } engines.execScriptFile = function(path, config){ - config = fillConfig(config); - return rtEngines.execScriptFile(path, config); + return rtEngines.execScriptFile(path, fillConfig(config)); } engines.execAutoFile = function(path, config){ - config = fillConfig(config); - return rtEngines.execAutoFile(path, config); + return rtEngines.execAutoFile(path, fillConfig(config)); + } + + engines.myEngine = function(){ + return scope.__engine__; } engines.stopAll = rtEngines.stopAll.bind(rtEngines); diff --git a/autojs/src/main/assets/modules/__general__.js b/autojs/src/main/assets/modules/__general__.js index 94768a3f..996b6dca 100644 --- a/autojs/src/main/assets/modules/__general__.js +++ b/autojs/src/main/assets/modules/__general__.js @@ -45,17 +45,17 @@ module.exports = function(__runtime__, scope){ return __runtime__.info.getLatestActivity(); } - scope.waitForActivity = function(activity, delay){ - delay = delay || 200; + scope.waitForActivity = function(activity, period){ + period = period || 200; while(scope.currentActivity() != activity){ - sleep(delay); + sleep(period); } } - scope.waitForPackage = function(packageName, delay){ - delay = delay || 200; + scope.waitForPackage = function(packageName, period){ + period = period || 200; while(scope.currentPackage() != packageName){ - sleep(delay); + sleep(period); } } diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java index c9c4eaca..f0ef7e52 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java @@ -245,6 +245,7 @@ public class SimpleActionAutomator { mAccessibilityBridge.ensureServiceEnabled(); } + @SuppressWarnings("unchecked") private boolean performAction(SimpleAction simpleAction) { ensureAccessibilityServiceEnabled(); diff --git a/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngine.java index 894c01f0..7b1f68a7 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngine.java @@ -28,6 +28,9 @@ public abstract class JavaScriptEngine extends ScriptEngine.AbstractScriptEngine } public void setRuntime(ScriptRuntime runtime) { + if (mRuntime != null) { + throw new IllegalStateException("a runtime has been set"); + } mRuntime = runtime; put("__runtime__", runtime); } diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java index 8b5daaf2..41d78e61 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java @@ -7,7 +7,10 @@ import android.util.Log; import com.stardust.autojs.runtime.api.AbstractShell; import com.stardust.autojs.runtime.api.ProcessShell; import com.stardust.autojs.core.inputevent.InputDevices; +import com.stardust.autojs.runtime.api.Shell; +import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.script.AutoFileSource; +import com.stardust.concurrent.VolatileBox; import com.stardust.pio.PFile; import java.io.File; @@ -34,7 +37,6 @@ public class RootAutomatorEngine extends ScriptEngine.AbstractScriptEngine