From c827ef7c64fd70ed34922fbceec1a4d770531d23 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 12 Jul 2017 12:09:32 +0800 Subject: [PATCH] try to fix crash under android19 --- app/build.gradle | 4 ++-- app/src/main/assets/modules/dialogs.js | 3 --- .../sample/图片与图色处理/颜色获取和检测.js | 12 ++++++++++++ autojs/src/main/assets/modules/__images__.js | 17 +++++++++++------ .../autojs/runtime/AbstractScriptRuntime.java | 17 +++++++++++++---- 5 files changed, 38 insertions(+), 15 deletions(-) delete mode 100644 app/src/main/assets/modules/dialogs.js create mode 100644 app/src/main/assets/sample/图片与图色处理/颜色获取和检测.js diff --git a/app/build.gradle b/app/build.gradle index 869eabfb..fea3a5c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.stardust.scriptdroid" minSdkVersion 17 targetSdkVersion 23 - versionCode 145 - versionName "2.0.13 Beta3" + versionCode 146 + versionName "2.0.14 Alpha" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { diff --git a/app/src/main/assets/modules/dialogs.js b/app/src/main/assets/modules/dialogs.js deleted file mode 100644 index d72fc83a..00000000 --- a/app/src/main/assets/modules/dialogs.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(){ - -} \ No newline at end of file diff --git a/app/src/main/assets/sample/图片与图色处理/颜色获取和检测.js b/app/src/main/assets/sample/图片与图色处理/颜色获取和检测.js new file mode 100644 index 00000000..bbaaaa40 --- /dev/null +++ b/app/src/main/assets/sample/图片与图色处理/颜色获取和检测.js @@ -0,0 +1,12 @@ +if(!requestScreenCapture()){ + toast("请求截图失败"); +} +sleep(2000); +var x = 760; +var y = 180; +//获取在点(x, y)处的颜色 +var c = images.pixel(captureScreen(), x, y); +//显示该颜色 +toast((c >>> 0).toString(16)); +//检测在点(x, y)处是否有颜色0x73bdb6 (模糊比较) +toast(images.detectsColor(captureScreen(), x, y, 0x73bdb6)) \ No newline at end of file diff --git a/autojs/src/main/assets/modules/__images__.js b/autojs/src/main/assets/modules/__images__.js index e46d4566..e21ab0f1 100644 --- a/autojs/src/main/assets/modules/__images__.js +++ b/autojs/src/main/assets/modules/__images__.js @@ -1,18 +1,23 @@ module.exports = function(__runtime__, scope){ var images = {}; + if(android.os.Build.VERSION.SDK_INT < 19){ + return images; + } - var colorFinder = __runtime__.images.colorFinder; + var rtImages = __runtime__.getImages(); - images.requestScreenCapture = __runtime__.images.requestScreenCapture.bind(__runtime__.images); + var colorFinder = rtImages.colorFinder; - images.captureScreen = __runtime__.images.captureScreen.bind(__runtime__.images); + images.requestScreenCapture = rtImages.requestScreenCapture.bind(rtImages); - images.saveImage = __runtime__.images.saveImage.bind(__runtime__.images); + images.captureScreen = rtImages.captureScreen.bind(rtImages); - images.pixel = __runtime__.images.pixel; + images.saveImage = rtImages.saveImage.bind(rtImages); - images.detectsColor = __runtime__.images.detectsColor.bind(__runtime__.images); + images.pixel = rtImages.pixel; + + images.detectsColor = rtImages.detectsColor.bind(rtImages); images.findColor = function(img, color, options){ if(typeof(color) == 'string'){ diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/AbstractScriptRuntime.java b/autojs/src/main/java/com/stardust/autojs/runtime/AbstractScriptRuntime.java index c0872272..0ac908a8 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/AbstractScriptRuntime.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/AbstractScriptRuntime.java @@ -1,6 +1,7 @@ package com.stardust.autojs.runtime; import android.content.Context; +import android.os.Build; import android.support.annotation.CallSuper; import com.stardust.autojs.engine.ScriptEngine; @@ -40,12 +41,12 @@ public abstract class AbstractScriptRuntime { @ScriptVariable public UI ui; - @ScriptVariable - public Images images; @ScriptVariable public Dialogs dialogs; + private Images images; + private static WeakReference applicationContext; public AbstractScriptRuntime(UiHandler uiHandler, Console console, AccessibilityBridge bridge, AppUtils appUtils, ScreenCaptureRequester screenCaptureRequester) { @@ -54,7 +55,9 @@ public abstract class AbstractScriptRuntime { this.automator = new SimpleActionAutomator(bridge, this); this.info = bridge.getInfoProvider(); this.ui = new UI(uiHandler.getContext()); - images = new Images(uiHandler.getContext(), this, screenCaptureRequester); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + images = new Images(uiHandler.getContext(), this, screenCaptureRequester); + } dialogs = new Dialogs(app, uiHandler); } @@ -109,6 +112,12 @@ public abstract class AbstractScriptRuntime { @CallSuper public void onStop() { - images.releaseScreenCapturer(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + images.releaseScreenCapturer(); + } + } + + public Object getImages() { + return images; } }