fix: use temp dir env var only in apps
Some checks failed
Build Artifacts / build (push) Waiting to run
Build Artifacts / build-win-bundle (push) Waiting to run
Build Test / tests (ubuntu-latest) (push) Waiting to run
Build Test / tests (windows-latest) (push) Waiting to run
Validate Gradle Wrapper / Validation (push) Waiting to run
CodeQL / Analyze (java) (push) Has been cancelled

This commit is contained in:
Skylot 2024-10-10 19:31:06 +01:00
parent 063af8cd62
commit c21cabcba7
No known key found for this signature in database
GPG Key ID: 47A4975761262B6A
15 changed files with 172 additions and 112 deletions

View File

@ -16,7 +16,6 @@ import jadx.cli.LogHelper.LogLevelEnum;
import jadx.cli.plugins.JadxFilesGetter; import jadx.cli.plugins.JadxFilesGetter;
import jadx.commons.app.JadxCommonEnv; import jadx.commons.app.JadxCommonEnv;
import jadx.core.utils.exceptions.JadxArgsValidateException; import jadx.core.utils.exceptions.JadxArgsValidateException;
import jadx.core.utils.files.FileUtils;
import jadx.plugins.tools.JadxExternalPluginsLoader; import jadx.plugins.tools.JadxExternalPluginsLoader;
public class JadxCLI { public class JadxCLI {
@ -33,7 +32,6 @@ public class JadxCLI {
LOG.error("Process error:", e); LOG.error("Process error:", e);
result = 1; result = 1;
} finally { } finally {
FileUtils.deleteTempRootDir();
System.exit(result); System.exit(result);
} }
} }

View File

@ -3,8 +3,8 @@ package jadx.cli.plugins;
import java.nio.file.Path; import java.nio.file.Path;
import jadx.commons.app.JadxCommonFiles; import jadx.commons.app.JadxCommonFiles;
import jadx.commons.app.JadxTempFiles;
import jadx.core.plugins.files.IJadxFilesGetter; import jadx.core.plugins.files.IJadxFilesGetter;
import jadx.core.utils.files.FileUtils;
public class JadxFilesGetter implements IJadxFilesGetter { public class JadxFilesGetter implements IJadxFilesGetter {
@ -22,7 +22,7 @@ public class JadxFilesGetter implements IJadxFilesGetter {
@Override @Override
public Path getTempDir() { public Path getTempDir() {
return FileUtils.getTempRootDir(); return JadxTempFiles.getTempRootDir();
} }
private JadxFilesGetter() { private JadxFilesGetter() {

View File

@ -12,13 +12,11 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import jadx.core.utils.files.FileUtils;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
public class TestInput { public class TestInput {
@ -29,6 +27,9 @@ public class TestInput {
return true; return true;
}; };
@TempDir
Path testDir;
@Test @Test
public void testHelp() { public void testHelp() {
int result = JadxCLI.execute(new String[] { "--help" }); int result = JadxCLI.execute(new String[] { "--help" });
@ -37,83 +38,68 @@ public class TestInput {
@Test @Test
public void testDexInput() throws Exception { public void testDexInput() throws Exception {
decompile("dex", "samples/hello.dex"); decompile("samples/hello.dex");
} }
@Test @Test
public void testSmaliInput() throws Exception { public void testSmaliInput() throws Exception {
decompile("smali", "samples/HelloWorld.smali"); decompile("samples/HelloWorld.smali");
} }
@Test @Test
public void testClassInput() throws Exception { public void testClassInput() throws Exception {
decompile("class", "samples/HelloWorld.class"); decompile("samples/HelloWorld.class");
} }
@Test @Test
public void testMultipleInput() throws Exception { public void testMultipleInput() throws Exception {
decompile("multi", "samples/hello.dex", "samples/HelloWorld.smali"); decompile("samples/hello.dex", "samples/HelloWorld.smali");
} }
@Test @Test
public void testFallbackMode() throws Exception { public void testFallbackMode() throws Exception {
Path tempDir = FileUtils.createTempDir("fallback"); int result = JadxCLI.execute(buildArgs(List.of("-f"), "samples/hello.dex"));
List<String> args = buildArgs(tempDir, "samples/hello.dex");
args.add(0, "-f");
int result = JadxCLI.execute(args.toArray(new String[0]));
assertThat(result).isEqualTo(0); assertThat(result).isEqualTo(0);
List<Path> files = collectJavaFilesInDir(tempDir); List<Path> files = collectJavaFilesInDir(testDir);
assertThat(files).hasSize(1); assertThat(files).hasSize(1);
} }
@Test @Test
public void testSimpleMode() throws Exception { public void testSimpleMode() throws Exception {
Path tempDir = FileUtils.createTempDir("simple"); int result = JadxCLI.execute(buildArgs(List.of("--decompilation-mode", "simple"), "samples/hello.dex"));
List<String> args = buildArgs(tempDir, "samples/hello.dex");
args.add(0, "--decompilation-mode");
args.add(1, "simple");
int result = JadxCLI.execute(args.toArray(new String[0]));
assertThat(result).isEqualTo(0); assertThat(result).isEqualTo(0);
List<Path> files = collectJavaFilesInDir(tempDir); List<Path> files = collectJavaFilesInDir(testDir);
assertThat(files).hasSize(1); assertThat(files).hasSize(1);
} }
@Test @Test
public void testResourceOnly() throws Exception { public void testResourceOnly() throws Exception {
Path tempDir = FileUtils.createTempDir("resourceOnly"); int result = JadxCLI.execute(buildArgs(List.of(), "samples/resources-only.apk"));
List<String> args = buildArgs(tempDir, "samples/resources-only.apk");
int result = JadxCLI.execute(args.toArray(new String[0]));
assertThat(result).isEqualTo(0); assertThat(result).isEqualTo(0);
List<Path> files = collectFilesInDir(tempDir, List<Path> files = collectFilesInDir(testDir,
path -> path.getFileName().toString().equalsIgnoreCase("AndroidManifest.xml")); path -> path.getFileName().toString().equalsIgnoreCase("AndroidManifest.xml"));
assertThat(files).isNotEmpty(); assertThat(files).isNotEmpty();
} }
private void decompile(String tmpDirName, String... inputSamples) throws URISyntaxException, IOException { private void decompile(String... inputSamples) throws URISyntaxException, IOException {
Path tempDir = FileUtils.createTempDir(tmpDirName); int result = JadxCLI.execute(buildArgs(List.of(), inputSamples));
List<String> args = buildArgs(tempDir, inputSamples);
int result = JadxCLI.execute(args.toArray(new String[0]));
assertThat(result).isEqualTo(0); assertThat(result).isEqualTo(0);
List<Path> resultJavaFiles = collectJavaFilesInDir(tempDir); List<Path> resultJavaFiles = collectJavaFilesInDir(testDir);
assertThat(resultJavaFiles).isNotEmpty(); assertThat(resultJavaFiles).isNotEmpty();
// do not copy input files as resources // do not copy input files as resources
for (Path path : collectFilesInDir(tempDir, LOG_ALL_FILES)) { for (Path path : collectFilesInDir(testDir, LOG_ALL_FILES)) {
for (String inputSample : inputSamples) { for (String inputSample : inputSamples) {
assertThat(path.toAbsolutePath().toString()).doesNotContain(inputSample); assertThat(path.toAbsolutePath().toString()).doesNotContain(inputSample);
} }
} }
} }
private List<String> buildArgs(Path tempDir, String... inputSamples) throws URISyntaxException { private String[] buildArgs(List<String> options, String... inputSamples) throws URISyntaxException {
List<String> args = new ArrayList<>(); List<String> args = new ArrayList<>(options);
args.add("-v"); args.add("-v");
args.add("-d"); args.add("-d");
args.add(tempDir.toAbsolutePath().toString()); args.add(testDir.toAbsolutePath().toString());
for (String inputSample : inputSamples) { for (String inputSample : inputSamples) {
URL resource = getClass().getClassLoader().getResource(inputSample); URL resource = getClass().getClassLoader().getResource(inputSample);
@ -121,7 +107,7 @@ public class TestInput {
String sampleFile = resource.toURI().getRawPath(); String sampleFile = resource.toURI().getRawPath();
args.add(sampleFile); args.add(sampleFile);
} }
return args; return args.toArray(new String[0]);
} }
private static List<Path> collectJavaFilesInDir(Path dir) throws IOException { private static List<Path> collectJavaFilesInDir(Path dir) throws IOException {
@ -137,9 +123,4 @@ public class TestInput {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }
@AfterAll
public static void cleanup() {
FileUtils.clearTempRootDir();
}
} }

View File

@ -0,0 +1,31 @@
package jadx.commons.app;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class JadxTempFiles {
private static final String JADX_TMP_INSTANCE_PREFIX = "jadx-instance-";
private static final Path TEMP_ROOT_DIR = createTempRootDir();
public static Path getTempRootDir() {
return TEMP_ROOT_DIR;
}
private static Path createTempRootDir() {
try {
String jadxTmpDir = System.getenv("JADX_TMP_DIR");
Path dir;
if (jadxTmpDir != null) {
dir = Files.createTempDirectory(Paths.get(jadxTmpDir), JADX_TMP_INSTANCE_PREFIX);
} else {
dir = Files.createTempDirectory(JADX_TMP_INSTANCE_PREFIX);
}
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
throw new RuntimeException("Failed to create temp root directory", e);
}
}
}

View File

@ -111,6 +111,7 @@ public final class JadxDecompiler implements Closeable {
reset(); reset();
JadxArgsValidator.validate(this); JadxArgsValidator.validate(this);
LOG.info("loading ..."); LOG.info("loading ...");
FileUtils.updateTempRootDir(args.getFilesGetter().getTempDir());
loadPlugins(); loadPlugins();
loadInputFiles(); loadInputFiles();
@ -174,6 +175,7 @@ public final class JadxDecompiler implements Closeable {
closeInputs(); closeInputs();
closeLoaders(); closeLoaders();
args.close(); args.close();
FileUtils.deleteTempRootDir();
} }
private void closeInputs() { private void closeInputs() {

View File

@ -1,5 +1,6 @@
package jadx.core.plugins.files; package jadx.core.plugins.files;
import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import jadx.core.utils.files.FileUtils; import jadx.core.utils.files.FileUtils;
@ -8,22 +9,35 @@ public class TempFilesGetter implements IJadxFilesGetter {
public static final TempFilesGetter INSTANCE = new TempFilesGetter(); public static final TempFilesGetter INSTANCE = new TempFilesGetter();
private final Path tempRootDir;
private TempFilesGetter() {
try {
tempRootDir = Files.createTempDirectory("jadx-temp-");
tempRootDir.toFile().deleteOnExit();
} catch (Exception e) {
throw new RuntimeException("Failed to create temp directory", e);
}
}
@Override @Override
public Path getConfigDir() { public Path getConfigDir() {
return FileUtils.getTempRootDir().resolve("config"); return makeSubDir("config");
} }
@Override @Override
public Path getCacheDir() { public Path getCacheDir() {
return FileUtils.getTempRootDir().resolve("cache"); return makeSubDir("cache");
} }
@Override @Override
public Path getTempDir() { public Path getTempDir() {
return FileUtils.getTempRootDir().resolve("temp"); return tempRootDir;
} }
private TempFilesGetter() { private Path makeSubDir(String subDir) {
// singleton Path dir = tempRootDir.resolve(subDir);
FileUtils.makeDirs(dir);
return dir;
} }
} }

View File

@ -45,7 +45,31 @@ public class FileUtils {
public static final String JADX_TMP_INSTANCE_PREFIX = "jadx-instance-"; public static final String JADX_TMP_INSTANCE_PREFIX = "jadx-instance-";
public static final String JADX_TMP_PREFIX = "jadx-tmp-"; public static final String JADX_TMP_PREFIX = "jadx-tmp-";
private static Path tempRootDir = createTempRootDir();
private FileUtils() { private FileUtils() {
// utility class
}
public static synchronized Path updateTempRootDir(Path newTempRootDir) {
try {
Path dir = Files.createTempDirectory(newTempRootDir, JADX_TMP_INSTANCE_PREFIX);
tempRootDir = dir;
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
throw new JadxRuntimeException("Failed to update temp root directory", e);
}
}
private static Path createTempRootDir() {
try {
Path dir = Files.createTempDirectory(JADX_TMP_INSTANCE_PREFIX);
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
throw new JadxRuntimeException("Failed to create temp root directory", e);
}
} }
public static List<Path> expandDirs(List<Path> paths) { public static List<Path> expandDirs(List<Path> paths) {
@ -150,40 +174,13 @@ public class FileUtils {
} }
} }
private static final Path TEMP_ROOT_DIR = createTempRootDir();
private static Path createTempRootDir() {
try {
String jadxTmpDir = System.getenv("JADX_TMP_DIR");
Path dir;
if (jadxTmpDir != null) {
dir = Files.createTempDirectory(Paths.get(jadxTmpDir), "jadx-instance-");
} else {
dir = Files.createTempDirectory(JADX_TMP_INSTANCE_PREFIX);
}
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
throw new JadxRuntimeException("Failed to create temp root directory", e);
}
}
public static Path getTempRootDir() {
return TEMP_ROOT_DIR;
}
public static void deleteTempRootDir() { public static void deleteTempRootDir() {
deleteDirIfExists(TEMP_ROOT_DIR); deleteDirIfExists(tempRootDir);
}
public static void clearTempRootDir() {
deleteDirIfExists(TEMP_ROOT_DIR);
makeDirs(TEMP_ROOT_DIR);
} }
public static Path createTempDir(String prefix) { public static Path createTempDir(String prefix) {
try { try {
Path dir = Files.createTempDirectory(TEMP_ROOT_DIR, prefix); Path dir = Files.createTempDirectory(tempRootDir, prefix);
dir.toFile().deleteOnExit(); dir.toFile().deleteOnExit();
return dir; return dir;
} catch (Exception e) { } catch (Exception e) {
@ -193,7 +190,7 @@ public class FileUtils {
public static Path createTempFile(String suffix) { public static Path createTempFile(String suffix) {
try { try {
Path path = Files.createTempFile(TEMP_ROOT_DIR, JADX_TMP_PREFIX, suffix); Path path = Files.createTempFile(tempRootDir, JADX_TMP_PREFIX, suffix);
path.toFile().deleteOnExit(); path.toFile().deleteOnExit();
return path; return path;
} catch (Exception e) { } catch (Exception e) {

View File

@ -8,7 +8,6 @@ import java.io.RandomAccessFile;
import java.lang.reflect.UndeclaredThrowableException; import java.lang.reflect.UndeclaredThrowableException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -126,14 +125,12 @@ public class ZipFile extends java.util.zip.ZipFile {
} }
private static File copyFile(File file) throws IOException { private static File copyFile(File file) throws IOException {
var newFile = Files.createTempFile(file.getName(), ".apk").toFile(); var newFile = FileUtils.createTempFile(file.getName()).toFile();
try (var in = new FileInputStream(file)) { try (var in = new FileInputStream(file)) {
try (var out = new FileOutputStream(newFile)) { try (var out = new FileOutputStream(newFile)) {
in.transferTo(out); in.transferTo(out);
} }
} }
return newFile; return newFile;
} }

View File

@ -1,19 +1,24 @@
package jadx.api; package jadx.api;
import java.nio.file.Files;
import java.nio.file.Path;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import jadx.core.utils.files.FileUtils;
import static jadx.core.utils.files.FileUtils.toFile; import static jadx.core.utils.files.FileUtils.toFile;
import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat; import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
public class JadxArgsValidatorOutDirsTest { public class JadxArgsValidatorOutDirsTest {
private static final Logger LOG = LoggerFactory.getLogger(JadxArgsValidatorOutDirsTest.class); private static final Logger LOG = LoggerFactory.getLogger(JadxArgsValidatorOutDirsTest.class);
public JadxArgs args; public JadxArgs args;
@TempDir
Path testDir;
@Test @Test
public void checkAllSet() { public void checkAllSet() {
setOutDirs("r", "s", "r"); setOutDirs("r", "s", "r");
@ -64,8 +69,12 @@ public class JadxArgsValidatorOutDirsTest {
} }
private JadxArgs makeArgs() { private JadxArgs makeArgs() {
JadxArgs args = new JadxArgs(); try {
args.getInputFiles().add(FileUtils.createTempFile("some.apk").toFile()); JadxArgs args = new JadxArgs();
return args; args.getInputFiles().add(Files.createTempFile(testDir, "test-", ".apk").toFile());
return args;
} catch (Exception e) {
throw new RuntimeException(e);
}
} }
} }

View File

@ -8,8 +8,8 @@ import java.net.URL;
import java.util.List; import java.util.List;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import jadx.core.utils.files.FileUtils;
import jadx.core.xmlgen.ResContainer; import jadx.core.xmlgen.ResContainer;
import jadx.plugins.input.dex.DexInputPlugin; import jadx.plugins.input.dex.DexInputPlugin;
@ -17,15 +17,17 @@ import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
public class JadxDecompilerTest { public class JadxDecompilerTest {
@TempDir
File testDir;
@Test @Test
public void testExampleUsage() { public void testExampleUsage() {
File sampleApk = getFileFromSampleDir("app-with-fake-dex.apk"); File sampleApk = getFileFromSampleDir("app-with-fake-dex.apk");
File outDir = FileUtils.createTempDir("jadx-usage-example").toFile();
// test simple apk loading // test simple apk loading
JadxArgs args = new JadxArgs(); JadxArgs args = new JadxArgs();
args.getInputFiles().add(sampleApk); args.getInputFiles().add(sampleApk);
args.setOutDir(outDir); args.setOutDir(testDir);
try (JadxDecompiler jadx = new JadxDecompiler(args)) { try (JadxDecompiler jadx = new JadxDecompiler(args)) {
jadx.load(); jadx.load();
@ -59,11 +61,10 @@ public class JadxDecompilerTest {
@Test @Test
public void testResourcesLoad() { public void testResourcesLoad() {
File sampleApk = getFileFromSampleDir("app-with-fake-dex.apk"); File sampleApk = getFileFromSampleDir("app-with-fake-dex.apk");
File outDir = FileUtils.createTempDir("jadx-usage-example-2").toFile();
JadxArgs args = new JadxArgs(); JadxArgs args = new JadxArgs();
args.getInputFiles().add(sampleApk); args.getInputFiles().add(sampleApk);
args.setOutDir(outDir); args.setOutDir(testDir);
args.setSkipSources(true); args.setSkipSources(true);
try (JadxDecompiler jadx = new JadxDecompiler(args)) { try (JadxDecompiler jadx = new JadxDecompiler(args)) {
jadx.load(); jadx.load();

View File

@ -30,6 +30,7 @@ import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.io.TempDir;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -53,12 +54,12 @@ import jadx.core.dex.nodes.MethodNode;
import jadx.core.dex.nodes.RootNode; import jadx.core.dex.nodes.RootNode;
import jadx.core.utils.Utils; import jadx.core.utils.Utils;
import jadx.core.utils.exceptions.JadxRuntimeException; import jadx.core.utils.exceptions.JadxRuntimeException;
import jadx.core.utils.files.FileUtils;
import jadx.core.xmlgen.ResourceStorage; import jadx.core.xmlgen.ResourceStorage;
import jadx.core.xmlgen.entry.ResourceEntry; import jadx.core.xmlgen.entry.ResourceEntry;
import jadx.tests.api.compiler.CompilerOptions; import jadx.tests.api.compiler.CompilerOptions;
import jadx.tests.api.compiler.JavaUtils; import jadx.tests.api.compiler.JavaUtils;
import jadx.tests.api.compiler.TestCompiler; import jadx.tests.api.compiler.TestCompiler;
import jadx.tests.api.utils.TestFilesGetter;
import jadx.tests.api.utils.TestUtils; import jadx.tests.api.utils.TestUtils;
import static org.apache.commons.lang3.StringUtils.leftPad; import static org.apache.commons.lang3.StringUtils.leftPad;
@ -115,6 +116,9 @@ public abstract class IntegrationTest extends TestUtils {
protected JadxDecompiler jadxDecompiler; protected JadxDecompiler jadxDecompiler;
@TempDir
Path testDir;
@BeforeEach @BeforeEach
public void init() { public void init() {
this.compile = true; this.compile = true;
@ -124,7 +128,7 @@ public abstract class IntegrationTest extends TestUtils {
this.useJavaInput = null; this.useJavaInput = null;
args = new JadxArgs(); args = new JadxArgs();
args.setOutDir(new File("test-out-tmp")); args.setOutDir(testDir.toFile());
args.setShowInconsistentCode(true); args.setShowInconsistentCode(true);
args.setThreadsCount(1); args.setThreadsCount(1);
args.setSkipResources(true); args.setSkipResources(true);
@ -132,6 +136,7 @@ public abstract class IntegrationTest extends TestUtils {
args.setDeobfuscationOn(false); args.setDeobfuscationOn(false);
args.setGeneratedRenamesMappingFileMode(GeneratedRenamesMappingFileMode.IGNORE); args.setGeneratedRenamesMappingFileMode(GeneratedRenamesMappingFileMode.IGNORE);
args.setRunDebugChecks(true); args.setRunDebugChecks(true);
args.setFilesGetter(new TestFilesGetter(testDir));
// use the same values on all systems // use the same values on all systems
args.setFsCaseSensitive(false); args.setFsCaseSensitive(false);
@ -144,7 +149,6 @@ public abstract class IntegrationTest extends TestUtils {
close(jadxDecompiler); close(jadxDecompiler);
close(sourceCompiler); close(sourceCompiler);
close(decompiledCompiler); close(decompiledCompiler);
FileUtils.clearTempRootDir();
} }
private void close(Closeable closeable) throws IOException { private void close(Closeable closeable) throws IOException {
@ -154,7 +158,7 @@ public abstract class IntegrationTest extends TestUtils {
} }
public void setOutDirSuffix(String suffix) { public void setOutDirSuffix(String suffix) {
args.setOutDir(new File("test-out-" + suffix + "-tmp")); args.setOutDir(new File(testDir.toFile(), suffix));
} }
public String getTestName() { public String getTestName() {
@ -499,7 +503,7 @@ public abstract class IntegrationTest extends TestUtils {
} }
private List<File> compileSourceFiles(List<File> compileFileList) throws IOException { private List<File> compileSourceFiles(List<File> compileFileList) throws IOException {
Path outTmp = FileUtils.createTempDir("jadx-tmp-classes"); Path outTmp = Files.createTempDirectory(testDir, "jadx-tmp-classes");
sourceCompiler = new TestCompiler(compilerOptions); sourceCompiler = new TestCompiler(compilerOptions);
List<File> files = sourceCompiler.compileFiles(compileFileList, outTmp); List<File> files = sourceCompiler.compileFiles(compileFileList, outTmp);
if (saveTestJar) { if (saveTestJar) {
@ -509,7 +513,7 @@ public abstract class IntegrationTest extends TestUtils {
} }
private void saveToJar(List<File> files, Path baseDir) throws IOException { private void saveToJar(List<File> files, Path baseDir) throws IOException {
Path jarFile = Files.createTempFile("tests-" + getTestName() + '-', ".jar"); Path jarFile = Files.createTempFile(testDir, "tests-" + getTestName() + '-', ".jar");
try (JarOutputStream jar = new JarOutputStream(Files.newOutputStream(jarFile))) { try (JarOutputStream jar = new JarOutputStream(Files.newOutputStream(jarFile))) {
for (File file : files) { for (File file : files) {
Path fullPath = file.toPath(); Path fullPath = file.toPath();

View File

@ -0,0 +1,35 @@
package jadx.tests.api.utils;
import java.nio.file.Path;
import jadx.core.plugins.files.IJadxFilesGetter;
import jadx.core.utils.files.FileUtils;
public class TestFilesGetter implements IJadxFilesGetter {
private final Path testDir;
public TestFilesGetter(Path testDir) {
this.testDir = testDir;
}
@Override
public Path getConfigDir() {
return makeSubDir("config");
}
@Override
public Path getCacheDir() {
return makeSubDir("cache");
}
@Override
public Path getTempDir() {
return testDir;
}
private Path makeSubDir(String config) {
Path dir = testDir.resolve(config);
FileUtils.makeDirs(dir);
return dir;
}
}

View File

@ -13,16 +13,16 @@ import org.slf4j.LoggerFactory;
import jadx.api.ICodeCache; import jadx.api.ICodeCache;
import jadx.api.JavaClass; import jadx.api.JavaClass;
import jadx.api.utils.tasks.ITaskExecutor; import jadx.api.utils.tasks.ITaskExecutor;
import jadx.commons.app.JadxCommonEnv;
import jadx.core.utils.tasks.TaskExecutor; import jadx.core.utils.tasks.TaskExecutor;
import jadx.gui.JadxWrapper; import jadx.gui.JadxWrapper;
import jadx.gui.ui.MainWindow; import jadx.gui.ui.MainWindow;
import jadx.gui.utils.NLS; import jadx.gui.utils.NLS;
import jadx.gui.utils.UiUtils;
public class DecompileTask extends CancelableBackgroundTask { public class DecompileTask extends CancelableBackgroundTask {
private static final Logger LOG = LoggerFactory.getLogger(DecompileTask.class); private static final Logger LOG = LoggerFactory.getLogger(DecompileTask.class);
private static final int CLS_LIMIT = Integer.parseInt(UiUtils.getEnvVar("JADX_CLS_PROCESS_LIMIT", "50")); private static final int CLS_LIMIT = JadxCommonEnv.getInt("JADX_CLS_PROCESS_LIMIT", 50);
public static int calcDecompileTimeLimit(int classCount) { public static int calcDecompileTimeLimit(int classCount) {
return classCount * CLS_LIMIT + 5000; return classCount * CLS_LIMIT + 5000;

View File

@ -1549,7 +1549,6 @@ public class MainWindow extends JFrame {
heapUsageBar.reset(); heapUsageBar.reset();
closeAll(); closeAll();
FileUtils.deleteTempRootDir();
dispose(); dispose();
System.exit(0); System.exit(0);
} }

View File

@ -337,14 +337,6 @@ public class UiUtils {
return null; return null;
} }
public static String getEnvVar(String varName, String defValue) {
String envVal = System.getenv(varName);
if (envVal == null) {
return defValue;
}
return envVal;
}
public static void showMessageBox(Component parent, String msg) { public static void showMessageBox(Component parent, String msg) {
JOptionPane.showMessageDialog(parent, msg); JOptionPane.showMessageDialog(parent, msg);
} }