From 00b48473a02e0c0daf7b87768da2d892f039d269 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 30 Jan 2022 17:17:43 +0000 Subject: [PATCH] test: add internal option to disable file save --- .../src/main/java/jadx/api/JadxArgs.java | 13 +++++++++++++ .../main/java/jadx/api/JadxDecompiler.java | 3 +++ .../java/jadx/core/dex/visitors/SaveCode.java | 3 +++ .../jadx/tests/external/BaseExternalTest.java | 19 ++++++------------- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/jadx-core/src/main/java/jadx/api/JadxArgs.java b/jadx-core/src/main/java/jadx/api/JadxArgs.java index 0e6e12e1..2df46fd4 100644 --- a/jadx-core/src/main/java/jadx/api/JadxArgs.java +++ b/jadx-core/src/main/java/jadx/api/JadxArgs.java @@ -93,6 +93,11 @@ public class JadxArgs { private UseKotlinMethodsForVarNames useKotlinMethodsForVarNames = UseKotlinMethodsForVarNames.APPLY; + /** + * Don't save files (can be using for performance testing) + */ + private boolean skipFilesSave = false; + public JadxArgs() { // use default options } @@ -447,6 +452,14 @@ public class JadxArgs { this.useKotlinMethodsForVarNames = useKotlinMethodsForVarNames; } + public boolean isSkipFilesSave() { + return skipFilesSave; + } + + public void setSkipFilesSave(boolean skipFilesSave) { + this.skipFilesSave = skipFilesSave; + } + @Override public String toString() { return "JadxArgs{" + "inputFiles=" + inputFiles diff --git a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java index f18243cf..be1f227f 100644 --- a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java +++ b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java @@ -282,6 +282,9 @@ public final class JadxDecompiler implements Closeable { } private void appendResourcesSaveTasks(List tasks, File outDir) { + if (args.isSkipFilesSave()) { + return; + } Set inputFileNames = args.getInputFiles().stream().map(File::getAbsolutePath).collect(Collectors.toSet()); for (ResourceFile resourceFile : getResources()) { if (resourceFile.getType() != ResourceType.ARSC diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java b/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java index 1e530c0d..b94761cb 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java @@ -34,6 +34,9 @@ public class SaveCode { if (codeStr.isEmpty()) { return; } + if (cls.root().getArgs().isSkipFilesSave()) { + return; + } String fileName = cls.getClassInfo().getAliasFullPath() + getFileExtension(cls); save(codeStr, dir, fileName); } diff --git a/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java b/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java index 85f17819..556ca207 100644 --- a/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java +++ b/jadx-core/src/test/java/jadx/tests/external/BaseExternalTest.java @@ -14,10 +14,10 @@ import jadx.api.ICodeWriter; import jadx.api.JadxArgs; import jadx.api.JadxDecompiler; import jadx.api.JadxInternalAccess; -import jadx.api.JavaClass; import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; +import jadx.core.utils.DebugChecks; import jadx.core.utils.exceptions.JadxRuntimeException; import jadx.tests.api.IntegrationTest; @@ -35,9 +35,13 @@ public abstract class BaseExternalTest extends IntegrationTest { } protected JadxArgs prepare(File input) { + DebugChecks.checksEnabled = false; JadxArgs args = new JadxArgs(); args.getInputFiles().add(input); args.setOutDir(new File("../jadx-external-tests-tmp")); + args.setSkipFilesSave(true); + args.setSkipResources(true); + args.setShowInconsistentCode(true); return args; } @@ -54,8 +58,7 @@ public abstract class BaseExternalTest extends IntegrationTest { jadx.load(); if (clsPatternStr == null) { - processAll(jadx); - // jadx.saveSources(); + jadx.save(); } else { processByPatterns(jadx, clsPatternStr, mthPatternStr); } @@ -63,16 +66,6 @@ public abstract class BaseExternalTest extends IntegrationTest { return jadx; } - private void processAll(JadxDecompiler jadx) { - for (JavaClass javaClass : jadx.getClasses()) { - try { - javaClass.decompile(); - } catch (Exception e) { - LOG.error("Failed to decompile class: {}", javaClass, e); - } - } - } - private void processByPatterns(JadxDecompiler jadx, String clsPattern, @Nullable String mthPattern) { RootNode root = JadxInternalAccess.getRoot(jadx); int processed = 0; -- GitLab