From d1e5186d4adeabd51f52b42d5c07dd3cccd60f4b Mon Sep 17 00:00:00 2001 From: Skylot Date: Mon, 26 Oct 2020 12:28:41 +0000 Subject: [PATCH] perf(res): speed up rename of deobfuscated resources --- .../java/jadx/core/dex/nodes/RootNode.java | 27 ++++++++++++++----- .../jadx/core/xmlgen/entry/ValuesParser.java | 9 +++++++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java index 8990ef409..bf509ed3e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java @@ -167,17 +167,30 @@ public class RootNode { } private void updateObfuscatedFiles(ResTableParser parser, List resources) { + if (args.isSkipResources()) { + return; + } + long start = System.currentTimeMillis(); + int renamedCount = 0; ResourceStorage resStorage = parser.getResStorage(); ValuesParser valuesParser = new ValuesParser(this, parser.getStrings(), resStorage.getResourcesNames()); - for (int i = 0; i < resources.size(); i++) { - ResourceFile resource = resources.get(i); - for (ResourceEntry ri : parser.getResStorage().getResources()) { - if (resource.getOriginalName().equals(valuesParser.getValueString(ri))) { - resource.setAlias(ri); - break; - } + Map entryNames = new HashMap<>(); + for (ResourceEntry resEntry : resStorage.getResources()) { + String val = valuesParser.getSimpleValueString(resEntry); + if (val != null) { + entryNames.put(val, resEntry); } } + for (ResourceFile resource : resources) { + ResourceEntry resEntry = entryNames.get(resource.getOriginalName()); + if (resEntry != null) { + resource.setAlias(resEntry); + renamedCount++; + } + } + if (LOG.isDebugEnabled()) { + LOG.debug("Renamed obfuscated resources: {}, duration: {}ms", renamedCount, System.currentTimeMillis() - start); + } } private void initInnerClasses() { diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/entry/ValuesParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/entry/ValuesParser.java index f0bdc541b..8abb3bdd5 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/entry/ValuesParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/entry/ValuesParser.java @@ -47,6 +47,15 @@ public class ValuesParser extends ParserConstants { } } + @Nullable + public String getSimpleValueString(ResourceEntry ri) { + RawValue simpleValue = ri.getSimpleValue(); + if (simpleValue == null) { + return null; + } + return decodeValue(simpleValue); + } + @Nullable public String getValueString(ResourceEntry ri) { RawValue simpleValue = ri.getSimpleValue();