Skip to content

Commit 0464e3e

Browse files
author
hyb1996
committed
新增 布局界面分析显示十六进制id
1 parent e15d5a2 commit 0464e3e

File tree

5 files changed

+45
-10
lines changed

5 files changed

+45
-10
lines changed

app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.widget.Toast;
1313

1414
import org.autojs.autojs.R;
15+
1516
import com.stardust.view.accessibility.NodeInfo;
1617
import com.stardust.util.ClipboardUtil;
1718
import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
@@ -32,6 +33,7 @@ public class NodeInfoView extends RecyclerView {
3233

3334
private static final String[] FIELD_NAMES = {
3435
"id",
36+
"idHex",
3537
"bounds",
3638
"depth",
3739
"desc",

autojs/src/main/java/com/stardust/autojs/AutoJs.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public abstract class AutoJs {
5252
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
5353
private final AccessibilityNotificationObserver mNotificationObserver;
5454
private ScriptEngineManager mScriptEngineManager;
55-
private final LayoutInspector mLayoutInspector = new LayoutInspector();
55+
private final LayoutInspector mLayoutInspector;
5656
private final Context mContext;
5757
private final Application mApplication;
5858
private final UiHandler mUiHandler;
@@ -66,6 +66,7 @@ public abstract class AutoJs {
6666
protected AutoJs(final Application application) {
6767
mContext = application.getApplicationContext();
6868
mApplication = application;
69+
mLayoutInspector = new LayoutInspector(mContext);
6970
mUiHandler = new UiHandler(mContext);
7071
mAppUtils = createAppUtils(mContext);
7172
mGlobalConsole = createGlobalConsole();

automator/src/main/java/com/stardust/view/accessibility/LayoutInspector.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.stardust.view.accessibility;
22

3+
import android.content.Context;
34
import android.os.Build;
45
import android.support.annotation.RequiresApi;
56
import android.util.Log;
@@ -24,6 +25,11 @@ public interface CaptureAvailableListener {
2425
private volatile boolean mDumping = false;
2526
private Executor mExecutor = Executors.newSingleThreadExecutor();
2627
private CopyOnWriteArrayList<CaptureAvailableListener> mCaptureAvailableListeners = new CopyOnWriteArrayList<>();
28+
private final Context mContext;
29+
30+
public LayoutInspector(Context context) {
31+
mContext = context;
32+
}
2733

2834
public boolean captureCurrentWindow() {
2935
AccessibilityService service = AccessibilityService.getInstance();
@@ -40,7 +46,7 @@ public boolean captureCurrentWindow() {
4046
}
4147
mExecutor.execute(() -> {
4248
mDumping = true;
43-
mCapture = NodeInfo.capture(root);
49+
mCapture = NodeInfo.capture(mContext, root);
4450
mDumping = false;
4551
for (CaptureAvailableListener l : mCaptureAvailableListeners) {
4652
l.onCaptureAvailable(mCapture);

automator/src/main/java/com/stardust/view/accessibility/NodeInfo.java

+28-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.stardust.view.accessibility;
22

3+
import android.content.Context;
4+
import android.content.pm.PackageManager;
5+
import android.content.res.Resources;
36
import android.graphics.Rect;
47
import android.support.annotation.Keep;
58
import android.support.annotation.NonNull;
@@ -10,6 +13,7 @@
1013
import com.stardust.automator.UiObject;
1114

1215
import java.util.ArrayList;
16+
import java.util.HashMap;
1317
import java.util.List;
1418

1519
/**
@@ -23,6 +27,7 @@ public class NodeInfo {
2327
private Rect mBoundsInParent = new Rect();
2428

2529
public String id;
30+
public String idHex;
2631
public String desc;
2732
public String className;
2833
public String packageName;
@@ -54,8 +59,7 @@ public class NodeInfo {
5459
public NodeInfo parent;
5560

5661

57-
58-
public NodeInfo(UiObject node, NodeInfo parent) {
62+
public NodeInfo(Resources resources, UiObject node, NodeInfo parent) {
5963
id = simplifyId(node.getViewIdResourceName());
6064
desc = node.desc();
6165
className = node.className();
@@ -92,7 +96,9 @@ public NodeInfo(UiObject node, NodeInfo parent) {
9296
indexInParent = node.indexInParent();
9397

9498
this.parent = parent;
95-
99+
if (resources != null && packageName != null && id != null) {
100+
idHex = "0x" + Integer.toHexString(resources.getIdentifier(node.getViewIdResourceName(), null, null));
101+
}
96102
}
97103

98104
private String simplifyId(String idResourceName) {
@@ -116,21 +122,35 @@ public static String boundsToString(Rect rect) {
116122
}
117123

118124

119-
public static NodeInfo capture(@NonNull UiObject uiObject, @Nullable NodeInfo parent) {
120-
NodeInfo nodeInfo = new NodeInfo(uiObject, parent);
125+
static NodeInfo capture(HashMap<String, Resources> resourcesCache, Context context, @NonNull UiObject uiObject, @Nullable NodeInfo parent) {
126+
String pkg = uiObject.packageName();
127+
Resources resources = null;
128+
if (pkg != null) {
129+
resources = resourcesCache.get(pkg);
130+
if (resources == null) {
131+
try {
132+
resources = context.getPackageManager().getResourcesForApplication(pkg);
133+
resourcesCache.put(pkg, resources);
134+
} catch (PackageManager.NameNotFoundException e) {
135+
e.printStackTrace();
136+
}
137+
}
138+
}
139+
NodeInfo nodeInfo = new NodeInfo(resources, uiObject, parent);
121140
int childCount = uiObject.getChildCount();
122141
for (int i = 0; i < childCount; i++) {
123142
UiObject child = uiObject.child(i);
124143
if (child != null) {
125-
nodeInfo.children.add(capture(child, nodeInfo));
144+
nodeInfo.children.add(capture(resourcesCache, context, child, nodeInfo));
126145
}
127146
}
128147
return nodeInfo;
129148
}
130149

131-
public static NodeInfo capture(@NonNull AccessibilityNodeInfo root) {
150+
public static NodeInfo capture(Context context, @NonNull AccessibilityNodeInfo root) {
132151
UiObject r = UiObject.createRoot(root);
133-
return capture(r, null);
152+
HashMap<String, Resources> resourcesCache = new HashMap<>();
153+
return capture(resourcesCache, context, r, null);
134154
}
135155

136156
@NonNull

inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java

+6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.stardust.auojs.inrt.R;
1111
import com.stardust.auojs.inrt.SettingsActivity;
1212
import com.stardust.autojs.runtime.ScriptRuntime;
13+
import com.stardust.autojs.runtime.api.AppUtils;
1314
import com.stardust.autojs.runtime.exception.ScriptException;
1415
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
1516
import com.stardust.view.accessibility.AccessibilityService;
@@ -37,6 +38,11 @@ private AutoJs(Application application) {
3738
getScriptEngineService().registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener());
3839
}
3940

41+
@Override
42+
protected AppUtils createAppUtils(Context context) {
43+
return new AppUtils(context, context.getPackageName() + ".fileprovider");
44+
}
45+
4046

4147
@Override
4248
public void ensureAccessibilityServiceEnabled() {

0 commit comments

Comments
 (0)