From 0464e3e49bd4ad0627408f9a931e51e9430f68ad Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 11 Nov 2018 18:18:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=88=86=E6=9E=90=E6=98=BE=E7=A4=BA=E5=8D=81?= =?UTF-8?q?=E5=85=AD=E8=BF=9B=E5=88=B6id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layoutinspector/NodeInfoView.java | 2 ++ .../main/java/com/stardust/autojs/AutoJs.java | 3 +- .../view/accessibility/LayoutInspector.java | 8 ++++- .../stardust/view/accessibility/NodeInfo.java | 36 ++++++++++++++----- .../stardust/auojs/inrt/autojs/AutoJs.java | 6 ++++ 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java index eb46ff02..7a090425 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java +++ b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java @@ -12,6 +12,7 @@ import android.widget.TextView; import android.widget.Toast; import org.autojs.autojs.R; + import com.stardust.view.accessibility.NodeInfo; import com.stardust.util.ClipboardUtil; import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration; @@ -32,6 +33,7 @@ public class NodeInfoView extends RecyclerView { private static final String[] FIELD_NAMES = { "id", + "idHex", "bounds", "depth", "desc", diff --git a/autojs/src/main/java/com/stardust/autojs/AutoJs.java b/autojs/src/main/java/com/stardust/autojs/AutoJs.java index 81872f63..1e056590 100644 --- a/autojs/src/main/java/com/stardust/autojs/AutoJs.java +++ b/autojs/src/main/java/com/stardust/autojs/AutoJs.java @@ -52,7 +52,7 @@ public abstract class AutoJs { private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder(); private final AccessibilityNotificationObserver mNotificationObserver; private ScriptEngineManager mScriptEngineManager; - private final LayoutInspector mLayoutInspector = new LayoutInspector(); + private final LayoutInspector mLayoutInspector; private final Context mContext; private final Application mApplication; private final UiHandler mUiHandler; @@ -66,6 +66,7 @@ public abstract class AutoJs { protected AutoJs(final Application application) { mContext = application.getApplicationContext(); mApplication = application; + mLayoutInspector = new LayoutInspector(mContext); mUiHandler = new UiHandler(mContext); mAppUtils = createAppUtils(mContext); mGlobalConsole = createGlobalConsole(); diff --git a/automator/src/main/java/com/stardust/view/accessibility/LayoutInspector.java b/automator/src/main/java/com/stardust/view/accessibility/LayoutInspector.java index 1d7383c4..d3ef99d8 100644 --- a/automator/src/main/java/com/stardust/view/accessibility/LayoutInspector.java +++ b/automator/src/main/java/com/stardust/view/accessibility/LayoutInspector.java @@ -1,5 +1,6 @@ package com.stardust.view.accessibility; +import android.content.Context; import android.os.Build; import android.support.annotation.RequiresApi; import android.util.Log; @@ -24,6 +25,11 @@ public class LayoutInspector { private volatile boolean mDumping = false; private Executor mExecutor = Executors.newSingleThreadExecutor(); private CopyOnWriteArrayList mCaptureAvailableListeners = new CopyOnWriteArrayList<>(); + private final Context mContext; + + public LayoutInspector(Context context) { + mContext = context; + } public boolean captureCurrentWindow() { AccessibilityService service = AccessibilityService.getInstance(); @@ -40,7 +46,7 @@ public class LayoutInspector { } mExecutor.execute(() -> { mDumping = true; - mCapture = NodeInfo.capture(root); + mCapture = NodeInfo.capture(mContext, root); mDumping = false; for (CaptureAvailableListener l : mCaptureAvailableListeners) { l.onCaptureAvailable(mCapture); diff --git a/automator/src/main/java/com/stardust/view/accessibility/NodeInfo.java b/automator/src/main/java/com/stardust/view/accessibility/NodeInfo.java index aaf8c1b9..f9db7b64 100644 --- a/automator/src/main/java/com/stardust/view/accessibility/NodeInfo.java +++ b/automator/src/main/java/com/stardust/view/accessibility/NodeInfo.java @@ -1,5 +1,8 @@ package com.stardust.view.accessibility; +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.res.Resources; import android.graphics.Rect; import android.support.annotation.Keep; import android.support.annotation.NonNull; @@ -10,6 +13,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import com.stardust.automator.UiObject; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -23,6 +27,7 @@ public class NodeInfo { private Rect mBoundsInParent = new Rect(); public String id; + public String idHex; public String desc; public String className; public String packageName; @@ -54,8 +59,7 @@ public class NodeInfo { public NodeInfo parent; - - public NodeInfo(UiObject node, NodeInfo parent) { + public NodeInfo(Resources resources, UiObject node, NodeInfo parent) { id = simplifyId(node.getViewIdResourceName()); desc = node.desc(); className = node.className(); @@ -92,7 +96,9 @@ public class NodeInfo { indexInParent = node.indexInParent(); this.parent = parent; - + if (resources != null && packageName != null && id != null) { + idHex = "0x" + Integer.toHexString(resources.getIdentifier(node.getViewIdResourceName(), null, null)); + } } private String simplifyId(String idResourceName) { @@ -116,21 +122,35 @@ public class NodeInfo { } - public static NodeInfo capture(@NonNull UiObject uiObject, @Nullable NodeInfo parent) { - NodeInfo nodeInfo = new NodeInfo(uiObject, parent); + static NodeInfo capture(HashMap resourcesCache, Context context, @NonNull UiObject uiObject, @Nullable NodeInfo parent) { + String pkg = uiObject.packageName(); + Resources resources = null; + if (pkg != null) { + resources = resourcesCache.get(pkg); + if (resources == null) { + try { + resources = context.getPackageManager().getResourcesForApplication(pkg); + resourcesCache.put(pkg, resources); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + } + } + NodeInfo nodeInfo = new NodeInfo(resources, uiObject, parent); int childCount = uiObject.getChildCount(); for (int i = 0; i < childCount; i++) { UiObject child = uiObject.child(i); if (child != null) { - nodeInfo.children.add(capture(child, nodeInfo)); + nodeInfo.children.add(capture(resourcesCache, context, child, nodeInfo)); } } return nodeInfo; } - public static NodeInfo capture(@NonNull AccessibilityNodeInfo root) { + public static NodeInfo capture(Context context, @NonNull AccessibilityNodeInfo root) { UiObject r = UiObject.createRoot(root); - return capture(r, null); + HashMap resourcesCache = new HashMap<>(); + return capture(resourcesCache, context, r, null); } @NonNull 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 08095089..d47fede6 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 @@ -10,6 +10,7 @@ import com.stardust.auojs.inrt.Pref; import com.stardust.auojs.inrt.R; import com.stardust.auojs.inrt.SettingsActivity; import com.stardust.autojs.runtime.ScriptRuntime; +import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.view.accessibility.AccessibilityService; @@ -37,6 +38,11 @@ public class AutoJs extends com.stardust.autojs.AutoJs { getScriptEngineService().registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener()); } + @Override + protected AppUtils createAppUtils(Context context) { + return new AppUtils(context, context.getPackageName() + ".fileprovider"); + } + @Override public void ensureAccessibilityServiceEnabled() {