|
1 | 1 | package com.wmods.wppenhacer.xposed.utils; |
2 | 2 |
|
| 3 | +import java.nio.charset.StandardCharsets; |
3 | 4 | import java.util.Arrays; |
| 5 | +import java.util.List; |
| 6 | +import java.util.Map; |
4 | 7 |
|
5 | 8 | import de.robv.android.xposed.XC_MethodHook; |
6 | 9 | import de.robv.android.xposed.XposedBridge; |
@@ -62,10 +65,38 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { |
62 | 65 |
|
63 | 66 | public static void debugArgs(Object[] args) { |
64 | 67 | for (var i = 0; i < args.length; i++) { |
65 | | - XposedBridge.log("ARG[" + i + "]: " + (args[i] == null ? null : args[i].getClass().getName()) + " -> VALUE: " + args[i]); |
| 68 | + XposedBridge.log("ARG[" + i + "]: " + (args[i] == null ? null : args[i].getClass().getName()) + " -> VALUE: " + parseValue(args[i])); |
66 | 69 | } |
67 | 70 | } |
68 | 71 |
|
| 72 | + public static String parseValue(Object value) { |
| 73 | + StringBuilder sb = new StringBuilder(); |
| 74 | + if (value == null) |
| 75 | + return "null"; |
| 76 | + if (value instanceof List list) { |
| 77 | + sb.append("List["); |
| 78 | + for (var item : list) { |
| 79 | + sb.append(parseValue(item)).append(", "); |
| 80 | + } |
| 81 | + sb.append("]"); |
| 82 | + } else if (value instanceof Map<?, ?> map) { |
| 83 | + var keys = map.keySet(); |
| 84 | + sb.append("Map["); |
| 85 | + for (var key : keys) { |
| 86 | + sb.append(key).append(": ").append(parseValue(map.get(key))).append(" "); |
| 87 | + } |
| 88 | + sb.append("]"); |
| 89 | + } else if (value instanceof byte[] bytes) { |
| 90 | + try { |
| 91 | + sb.append(new String(bytes, StandardCharsets.UTF_8)); |
| 92 | + } catch (Exception ignored) { |
| 93 | + } |
| 94 | + } else { |
| 95 | + sb.append(value); |
| 96 | + } |
| 97 | + return sb.toString(); |
| 98 | + } |
| 99 | + |
69 | 100 |
|
70 | 101 | public static void debugMethods(Class<?> cls, Object thisObject) { |
71 | 102 | XposedBridge.log("DEBUG METHODS: Class " + cls.getName()); |
|
0 commit comments