diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResTableBinaryParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResTableBinaryParser.java index e427ed04a..d5879e08e 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResTableBinaryParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResTableBinaryParser.java @@ -102,7 +102,7 @@ public class ResTableBinaryParser extends CommonBinaryParser implements IResTabl ResXmlGen resGen = new ResXmlGen(resStorage, vp, root.initManifestAttributes()); ICodeInfo content = XmlGenUtils.makeXmlDump(root.makeCodeWriter(), resStorage); - List xmlFiles = resGen.makeResourcesXml(root.getArgs(), baseFileName); + List xmlFiles = resGen.makeResourcesXml(root.getArgs()); return ResContainer.resourceTable(baseFileName, xmlFiles, content); } diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java index ae1738ce7..6f770d319 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java @@ -52,10 +52,6 @@ public class ResXmlGen { } public List makeResourcesXml(JadxArgs args) { - return makeResourcesXml(args, ""); - } - - public List makeResourcesXml(JadxArgs args, String baseFileName) { Map contMap = new HashMap<>(); for (ResourceEntry ri : resStorage.getResources()) { if (SKIP_RES_TYPES.contains(ri.getTypeName())) { @@ -72,7 +68,7 @@ public class ResXmlGen { } addValue(cw, ri); } - String filePrefix = baseFileName.isEmpty() ? null : baseFileName + ':'; + List files = new ArrayList<>(contMap.size()); for (Map.Entry entry : contMap.entrySet()) { String fileName = entry.getKey(); @@ -80,9 +76,6 @@ public class ResXmlGen { content.decIndent(); content.startLine(""); ICodeInfo codeInfo = content.finish(); - if (filePrefix != null) { - fileName = filePrefix + fileName; - } files.add(ResContainer.textResource(fileName, codeInfo)); } Collections.sort(files); diff --git a/jadx-core/src/test/java/jadx/api/JadxDecompilerTest.java b/jadx-core/src/test/java/jadx/api/JadxDecompilerTest.java index 5497a4c29..73fc4e8d1 100644 --- a/jadx-core/src/test/java/jadx/api/JadxDecompilerTest.java +++ b/jadx-core/src/test/java/jadx/api/JadxDecompilerTest.java @@ -75,7 +75,7 @@ public class JadxDecompilerTest { .findFirst().orElseThrow(); ResContainer resContainer = arsc.loadContent(); ResContainer xmlRes = resContainer.getSubFiles().stream() - .filter(r -> r.getName().equals("resources.arsc:res/values/colors.xml")) + .filter(r -> r.getName().equals("res/values/colors.xml")) .findFirst().orElseThrow(); assertThat(xmlRes.getText()) .code() diff --git a/jadx-gui/src/main/java/jadx/gui/utils/res/ResTableHelper.java b/jadx-gui/src/main/java/jadx/gui/utils/res/ResTableHelper.java index 9473e7383..239bc83ab 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/res/ResTableHelper.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/res/ResTableHelper.java @@ -21,15 +21,17 @@ public class ResTableHelper { * @return root nodes */ public static List buildTree(ResContainer resTable) { - ResTableHelper resTableHelper = new ResTableHelper(); + ResTableHelper resTableHelper = new ResTableHelper(resTable.getFileName()); resTableHelper.process(resTable); return resTableHelper.roots; } private final List roots = new ArrayList<>(); private final Map dirs = new HashMap<>(); + private final String resNamePrefix; - private ResTableHelper() { + private ResTableHelper(String resTableFileName) { + this.resNamePrefix = resTableFileName + ":/"; } private void process(ResContainer resTable) { @@ -52,7 +54,7 @@ public class ResTableHelper { } ICodeInfo code = rc.getText(); ResourceFileContent fileContent = new ResourceFileContent(name, ResourceType.XML, code); - JResource resFile = new JResource(fileContent, resName, name, JResource.JResType.FILE); + JResource resFile = new JResource(fileContent, resNamePrefix + resName, name, JResource.JResType.FILE); addResFile(dir, resFile); for (ResContainer subFile : rc.getSubFiles()) { @@ -80,7 +82,7 @@ public class ResTableHelper { JResource curDir = dirs.get(path); if (curDir == null) { String dirName = last ? dir.substring(prevStart) : dir.substring(prevStart, splitPos); - curDir = new JResource(null, dirName, JResource.JResType.DIR); + curDir = new JResource(null, resNamePrefix + path, dirName, JResource.JResType.DIR); dirs.put(path, curDir); if (parentDir == null) { roots.add(curDir); diff --git a/jadx-plugins/jadx-aab-input/src/main/java/jadx/plugins/input/aab/parsers/ResTableProtoParser.java b/jadx-plugins/jadx-aab-input/src/main/java/jadx/plugins/input/aab/parsers/ResTableProtoParser.java index c6789ede2..a6e7bbcf4 100644 --- a/jadx-plugins/jadx-aab-input/src/main/java/jadx/plugins/input/aab/parsers/ResTableProtoParser.java +++ b/jadx-plugins/jadx-aab-input/src/main/java/jadx/plugins/input/aab/parsers/ResTableProtoParser.java @@ -53,7 +53,7 @@ public class ResTableProtoParser extends CommonProtoParser implements IResTableP ValuesParser vp = new ValuesParser(new BinaryXMLStrings(), resStorage.getResourcesNames()); ResXmlGen resGen = new ResXmlGen(resStorage, vp, root.initManifestAttributes()); ICodeInfo content = XmlGenUtils.makeXmlDump(root.makeCodeWriter(), resStorage); - List xmlFiles = resGen.makeResourcesXml(root.getArgs(), baseFileName); + List xmlFiles = resGen.makeResourcesXml(root.getArgs()); return ResContainer.resourceTable(baseFileName, xmlFiles, content); }