fix: add arsc file name prefix only in jadx-gui (#2373)
This commit is contained in:
@@ -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<ResContainer> xmlFiles = resGen.makeResourcesXml(root.getArgs(), baseFileName);
|
||||
List<ResContainer> xmlFiles = resGen.makeResourcesXml(root.getArgs());
|
||||
return ResContainer.resourceTable(baseFileName, xmlFiles, content);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,10 +52,6 @@ public class ResXmlGen {
|
||||
}
|
||||
|
||||
public List<ResContainer> makeResourcesXml(JadxArgs args) {
|
||||
return makeResourcesXml(args, "");
|
||||
}
|
||||
|
||||
public List<ResContainer> makeResourcesXml(JadxArgs args, String baseFileName) {
|
||||
Map<String, ICodeWriter> 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<ResContainer> files = new ArrayList<>(contMap.size());
|
||||
for (Map.Entry<String, ICodeWriter> entry : contMap.entrySet()) {
|
||||
String fileName = entry.getKey();
|
||||
@@ -80,9 +76,6 @@ public class ResXmlGen {
|
||||
content.decIndent();
|
||||
content.startLine("</resources>");
|
||||
ICodeInfo codeInfo = content.finish();
|
||||
if (filePrefix != null) {
|
||||
fileName = filePrefix + fileName;
|
||||
}
|
||||
files.add(ResContainer.textResource(fileName, codeInfo));
|
||||
}
|
||||
Collections.sort(files);
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -21,15 +21,17 @@ public class ResTableHelper {
|
||||
* @return root nodes
|
||||
*/
|
||||
public static List<JResource> buildTree(ResContainer resTable) {
|
||||
ResTableHelper resTableHelper = new ResTableHelper();
|
||||
ResTableHelper resTableHelper = new ResTableHelper(resTable.getFileName());
|
||||
resTableHelper.process(resTable);
|
||||
return resTableHelper.roots;
|
||||
}
|
||||
|
||||
private final List<JResource> roots = new ArrayList<>();
|
||||
private final Map<String, JResource> 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);
|
||||
|
||||
+1
-1
@@ -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<ResContainer> xmlFiles = resGen.makeResourcesXml(root.getArgs(), baseFileName);
|
||||
List<ResContainer> xmlFiles = resGen.makeResourcesXml(root.getArgs());
|
||||
return ResContainer.resourceTable(baseFileName, xmlFiles, content);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user