From 5fed594bf1e1bacaf77a9ea0020d057dfa3e0647 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 3 Feb 2018 22:54:06 +0800 Subject: [PATCH] feat: accessibility white list --- app/build.gradle | 20 ++++++-- .../java/com/stardust/scriptdroid/Pref.java | 6 +-- .../stardust/scriptdroid/autojs/AutoJs.java | 11 ++++ .../main/java/com/stardust/autojs/AutoJs.java | 16 +++--- .../accessibility/AccessibilityBridge.java | 11 +++- .../accessibility/SimpleActionAutomator.java | 7 +-- .../autojs/core/accessibility/UiSelector.java | 14 ++--- .../accessibility/AccessibilityConfig.java | 51 +++++++++++++++++++ .../accessibility/AutomatorConfig.java | 19 ------- .../com/stardust/util/DeveloperUtils.java | 4 ++ .../stardust/auojs/inrt/autojs/AutoJs.java | 1 - 11 files changed, 112 insertions(+), 48 deletions(-) create mode 100644 autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AccessibilityConfig.java delete mode 100644 autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AutomatorConfig.java diff --git a/app/build.gradle b/app/build.gradle index 15602604..dd2e44a3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.stardust.scriptdroid" minSdkVersion 17 targetSdkVersion 23 - versionCode 246 - versionName "3.0.0 Beta" + versionCode 247 + versionName "3.0.0 Alpha47" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { @@ -39,15 +39,29 @@ android { } android.applicationVariants.all { variant -> variant.outputs.all { - outputFileName = "${variant.name}-${variant.versionName}.apk" + outputFileName = "${variant.name}-${variant.versionName}-${variant.flavorName}.apk" } } configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1' } + + flavorDimensions "channel" + + productFlavors { + common { + buildConfigField "String", "CHANNEL", '"common"' + } + coolapk { + buildConfigField "String", "CHANNEL", '"coolapk"' + } + } + } + + repositories { flatDir { dirs 'libs' diff --git a/app/src/main/java/com/stardust/scriptdroid/Pref.java b/app/src/main/java/com/stardust/scriptdroid/Pref.java index 17388ac1..2bc6a087 100644 --- a/app/src/main/java/com/stardust/scriptdroid/Pref.java +++ b/app/src/main/java/com/stardust/scriptdroid/Pref.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import com.stardust.autojs.runtime.accessibility.AutomatorConfig; +import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import java.util.concurrent.TimeUnit; @@ -23,13 +23,13 @@ public class Pref { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(getString(R.string.key_guard_mode))) { - AutomatorConfig.setIsUnintendedGuardEnabled(sharedPreferences.getBoolean(getString(R.string.key_guard_mode), false)); + AccessibilityConfig.setIsUnintendedGuardEnabled(sharedPreferences.getBoolean(getString(R.string.key_guard_mode), false)); } } }; static { - AutomatorConfig.setIsUnintendedGuardEnabled(def().getBoolean(getString(R.string.key_guard_mode), false)); + AccessibilityConfig.setIsUnintendedGuardEnabled(def().getBoolean(getString(R.string.key_guard_mode), false)); } private static SharedPreferences def() { 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 5c77d4da..39d2f2fc 100644 --- a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java +++ b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java @@ -4,9 +4,11 @@ import android.app.Application; import android.content.Context; import com.stardust.autojs.core.console.GlobalStardustConsole; +import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.api.Console; import com.stardust.scriptdroid.App; +import com.stardust.scriptdroid.BuildConfig; import com.stardust.scriptdroid.Pref; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.pluginclient.DevPluginService; @@ -70,6 +72,15 @@ public class AutoJs extends com.stardust.autojs.AutoJs { } } + @Override + protected AccessibilityConfig createAccessibilityConfig() { + AccessibilityConfig config = super.createAccessibilityConfig(); + if (BuildConfig.CHANNEL.equals("coolapk")) { + config.addWhiteList("com.coolapk.market"); + } + return config; + } + @Override protected Application getApplication() { return App.getApp(); diff --git a/autojs/src/main/java/com/stardust/autojs/AutoJs.java b/autojs/src/main/java/com/stardust/autojs/AutoJs.java index 98050421..09ac9366 100644 --- a/autojs/src/main/java/com/stardust/autojs/AutoJs.java +++ b/autojs/src/main/java/com/stardust/autojs/AutoJs.java @@ -23,6 +23,7 @@ import com.stardust.autojs.engine.RootAutomatorEngine; import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.engine.ScriptEngineManager; import com.stardust.autojs.runtime.ScriptRuntime; +import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.api.Console; import com.stardust.autojs.runtime.exception.ScriptException; @@ -108,12 +109,7 @@ public abstract class AutoJs { .setShellSupplier(() -> new Shell(mContext, true)).build()); return engine; }); - mScriptEngineManager.registerEngine(AutoFileSource.ENGINE, new Supplier() { - @Override - public ScriptEngine get() { - return new RootAutomatorEngine(mContext); - } - }); + mScriptEngineManager.registerEngine(AutoFileSource.ENGINE, () -> new RootAutomatorEngine(mContext)); } @@ -174,8 +170,16 @@ public abstract class AutoJs { } + protected AccessibilityConfig createAccessibilityConfig() { + return new AccessibilityConfig(); + } + private class AccessibilityBridgeImpl extends AccessibilityBridge { + public AccessibilityBridgeImpl() { + super(createAccessibilityConfig()); + } + @Override public void ensureServiceEnabled() { AutoJs.this.ensureAccessibilityServiceEnabled(); diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java index fc2798ab..9e32c5d2 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java @@ -4,6 +4,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.accessibility.AccessibilityNodeInfo; +import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import com.stardust.view.accessibility.AccessibilityInfoProvider; import com.stardust.view.accessibility.AccessibilityNotificationObserver; import com.stardust.view.accessibility.AccessibilityService; @@ -19,11 +20,15 @@ public abstract class AccessibilityBridge { public static final int MODE_FAST = 1; private int mMode = MODE_NORMAL; + private AccessibilityConfig mConfig; + public AccessibilityBridge(AccessibilityConfig config) { + mConfig = config; + mConfig.seal(); + } public abstract void ensureServiceEnabled(); - @Nullable public abstract AccessibilityService getService(); @@ -49,4 +54,8 @@ public abstract class AccessibilityBridge { @NonNull public abstract AccessibilityNotificationObserver getNotificationObserver(); + + public AccessibilityConfig getConfig() { + return mConfig; + } } 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 f301d902..46990747 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 @@ -11,7 +11,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import com.stardust.autojs.annotation.ScriptInterface; import com.stardust.autojs.runtime.ScriptRuntime; -import com.stardust.autojs.runtime.accessibility.AutomatorConfig; +import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import com.stardust.automator.GlobalActionAutomator; import com.stardust.automator.UiObject; import com.stardust.automator.simple_action.ActionFactory; @@ -20,9 +20,6 @@ import com.stardust.automator.simple_action.SimpleAction; import com.stardust.util.DeveloperUtils; import com.stardust.util.ScreenMetrics; -import org.mozilla.javascript.Context; -import org.mozilla.javascript.NativeJavaObject; - /** * Created by Stardust on 2017/4/2. */ @@ -252,7 +249,7 @@ public class SimpleActionAutomator { @SuppressWarnings("unchecked") private boolean performAction(SimpleAction simpleAction) { ensureAccessibilityServiceEnabled(); - if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) { + if (AccessibilityConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) { Log.d(TAG, "performAction: running package is self. return false"); return false; } diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java index 5af30fa9..eb650288 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java @@ -6,7 +6,6 @@ import android.util.Log; import android.view.accessibility.AccessibilityNodeInfo; import com.stardust.autojs.annotation.ScriptInterface; -import com.stardust.autojs.runtime.accessibility.AutomatorConfig; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.automator.ActionArgument; import com.stardust.automator.UiGlobalSelector; @@ -73,14 +72,14 @@ public class UiSelector extends UiGlobalSelector { @ScriptInterface public UiObjectCollection find() { ensureAccessibilityServiceEnabled(); - if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) { - Log.d(TAG, "isSelfPackage return null"); - return UiObjectCollection.EMPTY; - } AccessibilityNodeInfo root = mAccessibilityBridge.getRootInActiveWindow(); if (root == null) { return UiObjectCollection.EMPTY; } + if (root.getPackageName() != null && mAccessibilityBridge.getConfig().whiteListContains(root.getPackageName().toString())) { + Log.d(TAG, "package in white list, return null"); + return UiObjectCollection.EMPTY; + } return findOf(UiObject.createRoot(root, mAllocator)); } @@ -121,11 +120,6 @@ public class UiSelector extends UiGlobalSelector { mAccessibilityBridge.ensureServiceEnabled(); } - private boolean isRunningPackageSelf() { - return DeveloperUtils.isSelfPackage(mAccessibilityBridge.getInfoProvider().getLatestPackage()); - } - - @ScriptInterface @NonNull public UiObjectCollection untilFind() { diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AccessibilityConfig.java b/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AccessibilityConfig.java new file mode 100644 index 00000000..24d67aad --- /dev/null +++ b/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AccessibilityConfig.java @@ -0,0 +1,51 @@ +package com.stardust.autojs.runtime.accessibility; + +import android.util.ArraySet; + +import com.stardust.util.DeveloperUtils; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +/** + * Created by Stardust on 2017/4/29. + */ + +public class AccessibilityConfig { + + private static boolean isUnintendedGuardEnabled = false; + + private List mWhiteList = new ArrayList<>(); + private boolean mSealed = false; + + public AccessibilityConfig() { + if (isUnintendedGuardEnabled()) { + mWhiteList.add(DeveloperUtils.selfPackage()); + } + } + + public static boolean isUnintendedGuardEnabled() { + return isUnintendedGuardEnabled; + } + + public static void setIsUnintendedGuardEnabled(boolean isUnintendedGuardEnabled) { + AccessibilityConfig.isUnintendedGuardEnabled = isUnintendedGuardEnabled; + } + + public boolean whiteListContains(String packageName) { + return mWhiteList.contains(packageName); + } + + public void addWhiteList(String packageName) { + if (mSealed) + throw new IllegalStateException("sealed"); + mWhiteList.add(packageName); + } + + public final void seal() { + mSealed = true; + } +} diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AutomatorConfig.java b/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AutomatorConfig.java deleted file mode 100644 index 2ef43d2e..00000000 --- a/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AutomatorConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.stardust.autojs.runtime.accessibility; - -/** - * Created by Stardust on 2017/4/29. - */ - -public class AutomatorConfig { - - private static boolean isUnintendedGuardEnabled = false; - - - public static boolean isUnintendedGuardEnabled() { - return isUnintendedGuardEnabled; - } - - public static void setIsUnintendedGuardEnabled(boolean isUnintendedGuardEnabled) { - AutomatorConfig.isUnintendedGuardEnabled = isUnintendedGuardEnabled; - } -} diff --git a/common/src/main/java/com/stardust/util/DeveloperUtils.java b/common/src/main/java/com/stardust/util/DeveloperUtils.java index 7c36b5c7..9f4da116 100644 --- a/common/src/main/java/com/stardust/util/DeveloperUtils.java +++ b/common/src/main/java/com/stardust/util/DeveloperUtils.java @@ -17,6 +17,10 @@ public class DeveloperUtils { private static final String PACKAGE_NAME = "com.stardust.scriptdroid"; private static final String SIGNATURE = "3082037130820259a003020102020428425adc300d06092a864886f70d01010b05003068310b300906035504061302434e310f300d06035504080c06e5b9bfe4b89c310f300d06035504070c06e5b9bfe5b79e31123010060355040a0c09444b52e4b8aae4baba310c300a060355040b1303444b523115301306035504030c0ce6989fe5b098e5b9bbe5bdb13020170d3135313031303039353533365a180f32303730303731333039353533365a3068310b300906035504061302434e310f300d06035504080c06e5b9bfe4b89c310f300d06035504070c06e5b9bfe5b79e31123010060355040a0c09444b52e4b8aae4baba310c300a060355040b1303444b523115301306035504030c0ce6989fe5b098e5b9bbe5bdb130820122300d06092a864886f70d01010105000382010f003082010a0282010100d4377c8e7f711408c6136e6a25b1b3d0cc7dc2ebfd633a623bd24649b4d74b702a1792e298bd2e495b0b72226f06b9bd9078d1707fc2997e6732f5d253b3c318b1ca52a7fe82eb1045825ff2f85386701e9b4837ad77cdacb8e269d41fc52077dd6a2b6cfac70d3e5b5cae90880983d09bb2f09ec5e415c07a73ec0331aec0fe7ca9ea3de4ced22e3c0a94d4b0ae89bcf7bb73e3861897afad3099f5f9098c324d80e46cda00641fdb78cd451f3615553365b75835618b34cc27385f3a5c503185d2972d2efaba384e3bba1c9e353ea8ce898a34df76697253cdb0fb80866c6b2b04ab3b0ab3211789ace0d9b456854a549ce24c36ca30d73943a4dc111adbc90203010001a321301f301d0603551d0e04160414e8b844190be53497ca213ae3a81e2ce7883a0b21300d06092a864886f70d01010b050003820101007f9d7bfed50a22cdebec1134d82a23f33be739e5dd61fe4a84e1065230397ba02dde126aadcd0bb0dca22b7c3a396aae0f8ca1945c5b27d2ccea9b509a99a9d7f2fe7ba82118e851794134f0a13d53e2203e77f2e1a7e2ed0d732419d24902c30a75d556fa65aae6b137a3a2c48b732a30f906e446ec8a54e6f6f914a5fe8e33f0219635b3ad4b9d3b76e1c38b19030f12e0f110aac1a9335f542bbe49705f01f0082f8840be09d85514fdb92f08a4abe3811492323cec5b80cb3edc62e3ec44d426eff2adff817cfc37022e113d9cce442ecb95e343563eb081380631f9f0a6925dc1b717049160e4dfc4400d477dceaccfc8f2a7b73616619c9a802eb47ebd"; + public static String selfPackage() { + return PACKAGE_NAME; + } + public static void ensureRunningPackageNotSelf(@Nullable String runningPackage) { if (PACKAGE_NAME.equals(runningPackage)) { throw new SecurityException(); diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java index 8d727c1b..3c647fb5 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java @@ -55,7 +55,6 @@ public class AutoJs extends com.stardust.autojs.AutoJs { } } - @Override protected Application getApplication() { return App.getApp();