From 5a79bb577f840946ad7752cd744b933f4b77179e Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Mon, 29 May 2017 20:56:12 +0800 Subject: [PATCH] release 2.0.12 Beta --- app/build.gradle | 4 ++-- .../help/documentation/图片与图色处理.md | 2 +- .../sample/QQ与微信/微信循环发送图片.js | 11 ++++++++++ .../assets/sample/图片与图色处理/区域找色1.js | 2 +- .../assets/sample/图片与图色处理/区域找色2.js | 2 +- .../sample/图片与图色处理/找到QQ红点位置.js | 2 +- .../sample/图片与图色处理/找色与找色算法.js | 14 ++++++++++-- .../java/com/stardust/scriptdroid/App.java | 2 -- autojs/src/main/assets/modules/__images__.js | 4 +++- .../autojs/runtime/api/image/ColorFinder.java | 1 - .../runtime/api/image/ColorIterator.java | 5 ++--- .../runtime/api/image/ScreenCapturer.java | 16 +++++++++----- .../automator/simple_action/FilterAction.java | 22 ++++++++++++------- 13 files changed, 59 insertions(+), 28 deletions(-) create mode 100644 app/src/main/assets/sample/QQ与微信/微信循环发送图片.js diff --git a/app/build.gradle b/app/build.gradle index d6577ba1..fdd81597 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.stardust.scriptdroid" minSdkVersion 19 targetSdkVersion 23 - versionCode 136 - versionName "2.0.12 Alpha3日志版" + versionCode 137 + versionName "2.0.12 Beta" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { diff --git a/app/src/main/assets/help/documentation/图片与图色处理.md b/app/src/main/assets/help/documentation/图片与图色处理.md index 91c87755..d63fae4c 100644 --- a/app/src/main/assets/help/documentation/图片与图色处理.md +++ b/app/src/main/assets/help/documentation/图片与图色处理.md @@ -1,3 +1,3 @@ ### requestScreenCapture(\[width, height\]) -* width \ 可选参数 \ No newline at end of file +参数width和height用于指定截图的分辨率,默认为屏幕宽高。 \ No newline at end of file diff --git a/app/src/main/assets/sample/QQ与微信/微信循环发送图片.js b/app/src/main/assets/sample/QQ与微信/微信循环发送图片.js new file mode 100644 index 00000000..fb73bcf5 --- /dev/null +++ b/app/src/main/assets/sample/QQ与微信/微信循环发送图片.js @@ -0,0 +1,11 @@ +"auto"; +while (true) { + className("ImageButton").descStartsWith("更多功能按钮").click(); + while(!click("相册")); + sleep(500); + className("GridView").findOne().child(1).click(); + sleep(200); + while(!click("发送")); + sleep(300); +} + diff --git a/app/src/main/assets/sample/图片与图色处理/区域找色1.js b/app/src/main/assets/sample/图片与图色处理/区域找色1.js index 6a041722..06fb31dd 100644 --- a/app/src/main/assets/sample/图片与图色处理/区域找色1.js +++ b/app/src/main/assets/sample/图片与图色处理/区域找色1.js @@ -7,7 +7,7 @@ var img = captureScreen(); toastLog("开始找色"); //指定在位置(90, 220)宽高为900*1000的区域找色。 //0xff00cc是编辑器的深粉红色字体(字符串)颜色 -var point = findColorInRegion(img, 0xff00cc, 90, 220, 900, 1000); +var point = findColorInRegion(img, "#ff00cc", 90, 220, 900, 1000); if(point){ toastLog("x = " + point.x + ", y = " + point.y); }else{ diff --git a/app/src/main/assets/sample/图片与图色处理/区域找色2.js b/app/src/main/assets/sample/图片与图色处理/区域找色2.js index 7a8bc33a..4801527b 100644 --- a/app/src/main/assets/sample/图片与图色处理/区域找色2.js +++ b/app/src/main/assets/sample/图片与图色处理/区域找色2.js @@ -7,7 +7,7 @@ var img = captureScreen(); toastLog("开始找色"); //指定在位置(90, 220)宽高为900*1000的区域找色。 //0xff00cc是编辑器的深粉红色字体(字符串)颜色 -var point = findColor(img, 0xff00cc, { +var point = findColor(img, "#ff00cc", { region: [90, 220, 900, 1000], threads: 8 }); diff --git a/app/src/main/assets/sample/图片与图色处理/找到QQ红点位置.js b/app/src/main/assets/sample/图片与图色处理/找到QQ红点位置.js index 04cd0945..043f0d3e 100644 --- a/app/src/main/assets/sample/图片与图色处理/找到QQ红点位置.js +++ b/app/src/main/assets/sample/图片与图色处理/找到QQ红点位置.js @@ -6,7 +6,7 @@ launchApp("QQ"); sleep(2000); var img = captureScreen(); toastLog("开始找色"); -var point = findColor(img, 0xf64d30); +var point = findColor(img, "#f64d30"); if(point){ toastLog("x = " + point.x + ", y = " + point.y); }else{ diff --git a/app/src/main/assets/sample/图片与图色处理/找色与找色算法.js b/app/src/main/assets/sample/图片与图色处理/找色与找色算法.js index e8c2232d..5c57842b 100644 --- a/app/src/main/assets/sample/图片与图色处理/找色与找色算法.js +++ b/app/src/main/assets/sample/图片与图色处理/找色与找色算法.js @@ -6,7 +6,7 @@ var img = captureScreen(); //0xffffff为白色 toastLog("开始找色"); var point = findColor(img, 0xffffff, { - //指定算法为rgb+,更默认算法rgb更准确,但时间更久 + //指定算法为rgb+,比默认算法rgb更准确,但时间更久 algorithm: "rgb+", //指定颜色临界值为16 threshold: 16, @@ -19,4 +19,14 @@ if(point){ toastLog("没有找到"); } - +point = findColor(img, 0xffffff, { + //指定算法为颜色差值,比默认算法rgb更快 + algorithm: "diff", + //指定r, b, b分别都在范围ff±20内 + threshold: 0x202020, +}); +if(point){ + toastLog("x = " + point.x + ", y = " + point.y); +}else{ + toastLog("没有找到"); +} diff --git a/app/src/main/java/com/stardust/scriptdroid/App.java b/app/src/main/java/com/stardust/scriptdroid/App.java index 7b97eb62..822ad6b6 100644 --- a/app/src/main/java/com/stardust/scriptdroid/App.java +++ b/app/src/main/java/com/stardust/scriptdroid/App.java @@ -44,8 +44,6 @@ public class App extends MultiDexApplication { setUpDebugEnvironment(); init(); registerActivityLifecycleCallback(); - Logcat.deleteLogFile(); - Logcat.startLogSavingIfNeeded(); } private void setUpStaticsTool() { diff --git a/autojs/src/main/assets/modules/__images__.js b/autojs/src/main/assets/modules/__images__.js index 932227da..559dea5c 100644 --- a/autojs/src/main/assets/modules/__images__.js +++ b/autojs/src/main/assets/modules/__images__.js @@ -24,7 +24,7 @@ module.exports = function(__runtime__, scope){ y = region[1] || 0; width = region[2] || (img.getWidth() - x); height = region[3] || (img.getHeight() - y); - threads = options.threads || 4; + threads = options.threads || 2; if(options.threshold !== 0){ threshold = options.threshold || 8; } @@ -57,6 +57,8 @@ module.exports = function(__runtime__, scope){ return new com.stardust.autojs.runtime.api.image.ColorDetector.RGBDistanceDetector(color, threshold); case "equal": return new com.stardust.autojs.runtime.api.image.ColorDetector.EqualityDetector(color); + case "diff": + return new com.stardust.autojs.runtime.api.image.ColorDetector.DifferenceDetector(color, threshold); case "rgb+": return new com.stardust.autojs.runtime.api.image.ColorDetector.WeightedRGBDistanceDetector(color, threshold); case "hs": diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java index 5512187d..e9b46b51 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java @@ -210,7 +210,6 @@ public class ColorFinder { Thread thread = Thread.currentThread(); ColorIterator.Pixel pixel = new ColorIterator.Pixel(); while (mResultBox.isNull() && mColorIterator.hasNext() && !thread.isInterrupted()) { - mColorIterator.nextColor(pixel); mColorIterator.nextColor(pixel); if (mColorDetector.detectsColor(pixel.red, pixel.green, pixel.blue)) { mResultBox.set(new Point(mColorIterator.getX(), mColorIterator.getY())); diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorIterator.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorIterator.java index f35951a0..e63aec1c 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorIterator.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorIterator.java @@ -111,13 +111,12 @@ public interface ColorIterator { pixel.red = mByteBuffer.get() & 0xff; pixel.green = mByteBuffer.get() & 0xff; pixel.blue = mByteBuffer.get() & 0xff; + mByteBuffer.get(); } } - /** - * 中心螺旋。未完成。 - */ + // TODO: 2017/5/29 中心螺旋。未完成。 class CentralSpiralIterator extends ImageColorIterator { private static final int DIRECTION_RIGHT = 0; diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java index 595c58ce..a1d3456c 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java @@ -25,7 +25,7 @@ public class ScreenCapturer { private ImageReader mImageReader; private MediaProjection mMediaProjection; private VirtualDisplay mVirtualDisplay; - private final Object mImageLock = new Object(); + private Image mImage; public ScreenCapturer(Context context, Intent data, int screenWidth, int screenHeight, int screenDensity) { MediaProjectionManager manager = (MediaProjectionManager) context.getSystemService(Context.MEDIA_PROJECTION_SERVICE); @@ -49,8 +49,11 @@ public class ScreenCapturer { } public Image capture() { - Image image = mImageReader.acquireLatestImage(); - if (image == null) { + if (mImage != null) { + mImage.close(); + } + mImage = mImageReader.acquireLatestImage(); + if (mImage == null) { Looper.prepare(); mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() { @Override @@ -59,9 +62,9 @@ public class ScreenCapturer { } }, null); Looper.loop(); - image = mImageReader.acquireLatestImage(); + mImage = mImageReader.acquireLatestImage(); } - return image; + return mImage; } @@ -73,5 +76,8 @@ public class ScreenCapturer { if (mVirtualDisplay != null) { mVirtualDisplay.release(); } + if (mImage != null) { + mImage.close(); + } } } diff --git a/automator/src/main/java/com/stardust/automator/simple_action/FilterAction.java b/automator/src/main/java/com/stardust/automator/simple_action/FilterAction.java index 0d48da9c..7cc0c7d2 100644 --- a/automator/src/main/java/com/stardust/automator/simple_action/FilterAction.java +++ b/automator/src/main/java/com/stardust/automator/simple_action/FilterAction.java @@ -3,7 +3,10 @@ package com.stardust.automator.simple_action; import android.graphics.Rect; import com.stardust.automator.UiObject; +import com.stardust.automator.filter.BoundsFilter; +import com.stardust.view.accessibility.AccessibilityNodeInfoHelper; +import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -59,26 +62,29 @@ public abstract class FilterAction extends SimpleAction { @Override public List filter(UiObject root) { - return Collections.singletonList(findAccessibilityNodeInfosByBounds(root)); + List list = new ArrayList<>(); + findAccessibilityNodeInfosByBounds(root, list); + return list; } - private UiObject findAccessibilityNodeInfosByBounds(UiObject root) { + private void findAccessibilityNodeInfosByBounds(UiObject root, List list) { if (root == null) - return null; + return; Rect rect = new Rect(); root.getBoundsInScreen(rect); if (rect.equals(mBoundsInScreen)) { - return root; + list.add(root); } + int oldSize = list.size(); for (int i = 0; i < root.getChildCount(); i++) { UiObject child = root.child(i); if (child == null) continue; - UiObject nodeInfo = findAccessibilityNodeInfosByBounds(child); - if (nodeInfo != null) - return nodeInfo; + findAccessibilityNodeInfosByBounds(child, list); + } + if (oldSize == list.size() && rect.contains(mBoundsInScreen)) { + list.add(root); } - return null; } @Override