From ea8b9ce462c93c61e695d5311a4ba88155ffa678 Mon Sep 17 00:00:00 2001 From: Jan S Date: Sat, 24 Jul 2021 16:13:27 +0200 Subject: [PATCH] fix(xml): reversed XML attribute name decoding priority (#1208)(PR #1214) --- .../jadx/core/xmlgen/BinaryXMLParser.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 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 ac6eedf5b..efb96020e 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java @@ -335,19 +335,25 @@ public class BinaryXMLParser extends CommonBinaryParser { } private String getAttributeName(int id) { + // As the outcome of https://github.com/skylot/jadx/issues/1208 + // Android seems to favor entries from AndroidResMap and only if + // there is no entry uses the values form the XML string pool + if (0 <= id && id < resourceIds.length) { + int resId = resourceIds[id]; + String str = ValuesParser.getAndroidResMap().get(resId); + if (str != null) { + // cut type before / + int typeEnd = str.indexOf('/'); + if (typeEnd != -1) { + return str.substring(typeEnd + 1); + } + return str; + } + } + String str = getString(id); if (str == null || str.isEmpty()) { - int resId = resourceIds[id]; - str = ValuesParser.getAndroidResMap().get(resId); - if (str == null) { - return "NOT_FOUND_0x" + Integer.toHexString(id); - } - // cut type before / - int typeEnd = str.indexOf('/'); - if (typeEnd != -1) { - return str.substring(typeEnd + 1); - } - return str; + return "NOT_FOUND_0x" + Integer.toHexString(id); } return str; }