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 703809292ca624c274d5bd9975bf4e737993d82c..7548a7bb32753544e78951a32787e6d60c121fb0 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java @@ -4,7 +4,9 @@ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,6 +42,7 @@ public class BinaryXMLParser extends CommonBinaryParser { private final Map localStyleMap = new HashMap<>(); private final Map resNames; private final Map nsMap = new HashMap<>(); + private Set nsMapGenerated; private CodeWriter writer; private String[] strings; @@ -86,6 +89,7 @@ public class BinaryXMLParser extends CommonBinaryParser { if (!isBinaryXml()) { return ResourcesLoader.loadToCodeWriter(inputStream); } + nsMapGenerated = new HashSet<>(); writer = new CodeWriter(); writer.add(""); firstElement = true; @@ -317,11 +321,12 @@ public class BinaryXMLParser extends CommonBinaryParser { private String generateNameForNS(String attrUrl) { for(int i = 1; ; i++) { String attrName = "ns" + i; - if(!nsMap.containsValue(attrName)) { + if(!nsMap.containsValue(attrName) && !nsMapGenerated.contains(attrName)) { + nsMapGenerated.add(attrName); // do not add generated value to nsMap // because attrUrl might be used in a neighbor element, but never defined writer.add("xmlns:").add(attrName) - .add("=\"").add(attrUrl).add("\""); + .add("=\"").add(attrUrl).add("\" "); return attrName; } }