diff --git a/jadx-cli/src/test/java/jadx/cli/TestInput.java b/jadx-cli/src/test/java/jadx/cli/TestInput.java index f73ff1bf8..ad9dd5f80 100644 --- a/jadx-cli/src/test/java/jadx/cli/TestInput.java +++ b/jadx-cli/src/test/java/jadx/cli/TestInput.java @@ -10,6 +10,7 @@ import java.nio.file.PathMatcher; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.slf4j.Logger; @@ -59,14 +60,28 @@ public class TestInput { assertThat(result).isEqualTo(0); List resultJavaFiles = collectJavaFilesInDir(tempDir); assertThat(resultJavaFiles).isNotEmpty(); + + // do not copy input files as resources + PathMatcher logAllFiles = path -> { + LOG.debug("File in result dir: {}", path); + return true; + }; + for (Path path : collectFilesInDir(tempDir, logAllFiles)) { + for (String inputSample : inputSamples) { + assertThat(path.toAbsolutePath().toString()).doesNotContain(inputSample); + } + } } private static List collectJavaFilesInDir(Path dir) throws IOException { - PathMatcher matcher = dir.getFileSystem().getPathMatcher("glob:**.java"); + PathMatcher javaMatcher = dir.getFileSystem().getPathMatcher("glob:**.java"); + return collectFilesInDir(dir, javaMatcher); + } + + private static List collectFilesInDir(Path dir, PathMatcher matcher) throws IOException { try (Stream pathStream = Files.walk(dir)) { return pathStream .filter(p -> Files.isRegularFile(p, LinkOption.NOFOLLOW_LINKS)) - .peek(f -> LOG.debug("File in result dir: {}", f)) .filter(matcher::matches) .collect(Collectors.toList()); } diff --git a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java index 34c026712..c103a9257 100644 --- a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java +++ b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java @@ -11,6 +11,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -210,7 +211,13 @@ public final class JadxDecompiler implements Closeable { } private void appendResourcesSave(ExecutorService executor, File outDir) { + Set inputFileNames = args.getInputFiles().stream().map(File::getAbsolutePath).collect(Collectors.toSet()); for (ResourceFile resourceFile : getResources()) { + if (resourceFile.getType() != ResourceType.ARSC + && inputFileNames.contains(resourceFile.getOriginalName())) { + // ignore resource made from input file + continue; + } executor.execute(new ResourcesSaver(outDir, resourceFile)); } }