fix: use temp dir env var only in apps
This commit is contained in:
@@ -111,6 +111,7 @@ public final class JadxDecompiler implements Closeable {
|
||||
reset();
|
||||
JadxArgsValidator.validate(this);
|
||||
LOG.info("loading ...");
|
||||
FileUtils.updateTempRootDir(args.getFilesGetter().getTempDir());
|
||||
loadPlugins();
|
||||
loadInputFiles();
|
||||
|
||||
@@ -174,6 +175,7 @@ public final class JadxDecompiler implements Closeable {
|
||||
closeInputs();
|
||||
closeLoaders();
|
||||
args.close();
|
||||
FileUtils.deleteTempRootDir();
|
||||
}
|
||||
|
||||
private void closeInputs() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package jadx.core.plugins.files;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import jadx.core.utils.files.FileUtils;
|
||||
@@ -8,22 +9,35 @@ public class TempFilesGetter implements IJadxFilesGetter {
|
||||
|
||||
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
|
||||
public Path getConfigDir() {
|
||||
return FileUtils.getTempRootDir().resolve("config");
|
||||
return makeSubDir("config");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path getCacheDir() {
|
||||
return FileUtils.getTempRootDir().resolve("cache");
|
||||
return makeSubDir("cache");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path getTempDir() {
|
||||
return FileUtils.getTempRootDir().resolve("temp");
|
||||
return tempRootDir;
|
||||
}
|
||||
|
||||
private TempFilesGetter() {
|
||||
// singleton
|
||||
private Path makeSubDir(String subDir) {
|
||||
Path dir = tempRootDir.resolve(subDir);
|
||||
FileUtils.makeDirs(dir);
|
||||
return dir;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,31 @@ public class FileUtils {
|
||||
public static final String JADX_TMP_INSTANCE_PREFIX = "jadx-instance-";
|
||||
public static final String JADX_TMP_PREFIX = "jadx-tmp-";
|
||||
|
||||
private static Path tempRootDir = createTempRootDir();
|
||||
|
||||
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) {
|
||||
@@ -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() {
|
||||
deleteDirIfExists(TEMP_ROOT_DIR);
|
||||
}
|
||||
|
||||
public static void clearTempRootDir() {
|
||||
deleteDirIfExists(TEMP_ROOT_DIR);
|
||||
makeDirs(TEMP_ROOT_DIR);
|
||||
deleteDirIfExists(tempRootDir);
|
||||
}
|
||||
|
||||
public static Path createTempDir(String prefix) {
|
||||
try {
|
||||
Path dir = Files.createTempDirectory(TEMP_ROOT_DIR, prefix);
|
||||
Path dir = Files.createTempDirectory(tempRootDir, prefix);
|
||||
dir.toFile().deleteOnExit();
|
||||
return dir;
|
||||
} catch (Exception e) {
|
||||
@@ -193,7 +190,7 @@ public class FileUtils {
|
||||
|
||||
public static Path createTempFile(String suffix) {
|
||||
try {
|
||||
Path path = Files.createTempFile(TEMP_ROOT_DIR, JADX_TMP_PREFIX, suffix);
|
||||
Path path = Files.createTempFile(tempRootDir, JADX_TMP_PREFIX, suffix);
|
||||
path.toFile().deleteOnExit();
|
||||
return path;
|
||||
} catch (Exception e) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.io.RandomAccessFile;
|
||||
import java.lang.reflect.UndeclaredThrowableException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
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 {
|
||||
var newFile = Files.createTempFile(file.getName(), ".apk").toFile();
|
||||
|
||||
var newFile = FileUtils.createTempFile(file.getName()).toFile();
|
||||
try (var in = new FileInputStream(file)) {
|
||||
try (var out = new FileOutputStream(newFile)) {
|
||||
in.transferTo(out);
|
||||
}
|
||||
}
|
||||
|
||||
return newFile;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user