From 343e2c531aee0e232e5014086f262123bdb5dbb6 Mon Sep 17 00:00:00 2001 From: Skylot <118523+skylot@users.noreply.github.com> Date: Fri, 25 Oct 2024 17:53:46 +0100 Subject: [PATCH] chore: expand input dirs in ConvertArscFile --- .../java/jadx/cli/tools/ConvertArscFile.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/jadx-cli/src/main/java/jadx/cli/tools/ConvertArscFile.java b/jadx-cli/src/main/java/jadx/cli/tools/ConvertArscFile.java index 91bf04093..5f813435a 100644 --- a/jadx-cli/src/main/java/jadx/cli/tools/ConvertArscFile.java +++ b/jadx-cli/src/main/java/jadx/cli/tools/ConvertArscFile.java @@ -22,6 +22,8 @@ import jadx.core.utils.android.TextResMapFile; import jadx.core.utils.files.ZipFile; import jadx.core.xmlgen.ResTableBinaryParser; +import static jadx.core.utils.files.FileUtils.expandDirs; + /** * Utility class for convert '.arsc' to simple text file with mapping id to resource name */ @@ -30,7 +32,7 @@ public class ConvertArscFile { private static int rewritesCount; public static void usage() { - LOG.info(" "); + LOG.info(" "); LOG.info(""); LOG.info("Note: If res-map already exists - it will be merged and updated"); } @@ -42,6 +44,7 @@ public class ConvertArscFile { } List inputPaths = Stream.of(args).map(Paths::get).collect(Collectors.toList()); Path resMapFile = inputPaths.remove(0); + List inputResFiles = filterAndSort(expandDirs(inputPaths)); Map resMap; if (Files.isReadable(resMapFile)) { resMap = TextResMapFile.read(resMapFile); @@ -52,8 +55,7 @@ public class ConvertArscFile { RootNode root = new RootNode(new JadxArgs()); // not really needed rewritesCount = 0; - for (Path resFile : inputPaths) { - LOG.info("Processing {}", resFile); + for (Path resFile : inputResFiles) { ResTableBinaryParser resTableParser = new ResTableBinaryParser(root, true); if (resFile.getFileName().toString().endsWith(".jar")) { // Load resources.arsc from android.jar @@ -84,6 +86,16 @@ public class ConvertArscFile { LOG.info("done"); } + private static List filterAndSort(List inputPaths) { + return inputPaths.stream() + .filter(p -> { + String fileName = p.getFileName().toString(); + return fileName.endsWith(".arsc") || fileName.endsWith(".jar"); + }) + .sorted() + .collect(Collectors.toList()); + } + private static void mergeResMaps(Map mainResMap, Map newResMap) { for (Map.Entry entry : newResMap.entrySet()) { Integer id = entry.getKey();