From 7243ab5cb66b873068ebd8dcf618bb2ee9d6bc95 Mon Sep 17 00:00:00 2001 From: Skylot Date: Tue, 12 Mar 2019 19:35:05 +0300 Subject: [PATCH] fix: don't replace resources names with field names (#465) --- .../jadx/core/xmlgen/BinaryXMLParser.java | 43 +++++-------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java index 63b730a96..d0dedc8ac 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java @@ -15,8 +15,6 @@ import org.slf4j.LoggerFactory; import jadx.api.ResourcesLoader; import jadx.core.codegen.CodeWriter; import jadx.core.dex.info.ConstStorage; -import jadx.core.dex.instructions.args.ArgType; -import jadx.core.dex.nodes.FieldNode; import jadx.core.dex.nodes.RootNode; import jadx.core.utils.StringUtils; import jadx.core.utils.exceptions.JadxRuntimeException; @@ -40,7 +38,6 @@ public class BinaryXMLParser extends CommonBinaryParser { private static final boolean ATTR_NEW_LINE = false; private final Map styleMap = new HashMap<>(); - private final Map localStyleMap = new HashMap<>(); private final Map resNames; private final Map nsMap = new HashMap<>(); private Set nsMapGenerated; @@ -63,16 +60,7 @@ public class BinaryXMLParser extends CommonBinaryParser { this.rootNode = rootNode; try { readAndroidRStyleClass(); - // add application constants ConstStorage constStorage = rootNode.getConstValues(); - Map constFields = constStorage.getGlobalConstFields(); - for (Map.Entry entry : constFields.entrySet()) { - Object key = entry.getKey(); - FieldNode field = entry.getValue(); - if (field.getType().equals(ArgType.INT) && key instanceof Integer) { - localStyleMap.put((Integer) key, field); - } - } resNames = constStorage.getResourcesNames(); } catch (Exception e) { throw new JadxRuntimeException("BinaryXMLParser init error", e); @@ -381,38 +369,27 @@ public class BinaryXMLParser extends CommonBinaryParser { private void decodeAttribute(int attributeNS, int attrValDataType, int attrValData, String shortNsName, String attrName) { - if (attrValDataType == TYPE_REFERENCE) { // reference custom processing String name = styleMap.get(attrValData); if (name != null) { writer.add("@style/").add(name.replaceAll("_", ".")); } else { - FieldNode field = localStyleMap.get(attrValData); - if (field != null) { - String cls = field.getParentClass().getShortName().toLowerCase(); + String resName = resNames.get(attrValData); + if (resName != null) { writer.add("@"); - if ("id".equals(cls)) { - writer.add('+'); + if (resName.startsWith("id/")) { + writer.add("+"); } - writer.add(cls).add("/").add(field.getName()); + writer.add(resName); } else { - String resName = resNames.get(attrValData); + resName = ValuesParser.getAndroidResMap().get(attrValData); if (resName != null) { - writer.add("@"); - if (resName.startsWith("id/")) { - writer.add("+"); - } - writer.add(resName); + writer.add("@android:").add(resName); + } else if (attrValData == 0) { + writer.add("@null"); } else { - resName = ValuesParser.getAndroidResMap().get(attrValData); - if (resName != null) { - writer.add("@android:").add(resName); - } else if (attrValData == 0) { - writer.add("@null"); - } else { - writer.add("0x").add(Integer.toHexString(attrValData)); - } + writer.add("0x").add(Integer.toHexString(attrValData)); } } }