From 5d5bf325fefcbea10856bea1e1f291c8c00b694a Mon Sep 17 00:00:00 2001
From: Skylot <118523+skylot@users.noreply.github.com>
Date: Tue, 4 Feb 2025 17:53:45 +0000
Subject: [PATCH] fix: use fork of directories library with JNI implemetation
for Windows (#2401)
---
.run/jadx-gui.run.xml | 2 +-
jadx-cli/build.gradle.kts | 2 ++
jadx-commons/jadx-app-commons/build.gradle.kts | 2 +-
.../java/jadx/commons/app/JadxCommonFiles.java | 16 +++++++++++++++-
jadx-gui/build.gradle.kts | 2 ++
5 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/.run/jadx-gui.run.xml b/.run/jadx-gui.run.xml
index 303a3b49e..ee8eeb6a7 100644
--- a/.run/jadx-gui.run.xml
+++ b/.run/jadx-gui.run.xml
@@ -4,7 +4,7 @@
+ value="-Xms128M -XX:MaxRAMPercentage=70.0 -Dawt.useSystemAAFontSettings=lcd -Dswing.aatext=true -Djava.util.Arrays.useLegacyMergeSort=true -Djdk.util.zip.disableZip64ExtraFieldValidation=true -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --enable-native-access=ALL-UNNAMED -Dsun.java2d.noddraw=true -Dsun.java2d.d3d=false -Dsun.java2d.ddforcevram=true -Dsun.java2d.ddblit=false -Dswing.useflipBufferStrategy=True"/>
diff --git a/jadx-cli/build.gradle.kts b/jadx-cli/build.gradle.kts
index 208ecdcb0..b5a4dc82a 100644
--- a/jadx-cli/build.gradle.kts
+++ b/jadx-cli/build.gradle.kts
@@ -37,6 +37,8 @@ application {
"-XX:MaxRAMPercentage=70.0",
// disable zip checks (#1962)
"-Djdk.util.zip.disableZip64ExtraFieldValidation=true",
+ // Foreign API access for 'directories' library (Windows only)
+ "--enable-native-access=ALL-UNNAMED",
)
applicationDistribution.from("$rootDir") {
include("README.md")
diff --git a/jadx-commons/jadx-app-commons/build.gradle.kts b/jadx-commons/jadx-app-commons/build.gradle.kts
index 5b27298ad..b697c5a7e 100644
--- a/jadx-commons/jadx-app-commons/build.gradle.kts
+++ b/jadx-commons/jadx-app-commons/build.gradle.kts
@@ -3,5 +3,5 @@ plugins {
}
dependencies {
- implementation("dev.dirs:directories:26")
+ implementation("io.get-coursier.util:directories-jni:0.1.3")
}
diff --git a/jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonFiles.java b/jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonFiles.java
index f58e8d535..6ef21d44e 100644
--- a/jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonFiles.java
+++ b/jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonFiles.java
@@ -8,6 +8,9 @@ import java.util.function.Function;
import org.jetbrains.annotations.Nullable;
import dev.dirs.ProjectDirectories;
+import dev.dirs.impl.Windows;
+import dev.dirs.impl.WindowsPowerShell;
+import dev.dirs.jni.WindowsJni;
public class JadxCommonFiles {
@@ -58,11 +61,22 @@ public class JadxCommonFiles {
private synchronized ProjectDirectories loadDirs() {
if (dirs == null) {
- dirs = ProjectDirectories.from("io.github", "skylot", "jadx");
+ dirs = ProjectDirectories.from("io.github", "skylot", "jadx", DirsLoader::getWinDirs);
}
return dirs;
}
+ /**
+ * Return JNI or Foreign implementation
+ */
+ private static Windows getWinDirs() {
+ Windows defSup = Windows.getDefaultSupplier().get();
+ if (defSup instanceof WindowsPowerShell) {
+ return new WindowsJni();
+ }
+ return defSup;
+ }
+
public Path getCacheDir() {
return cacheDir;
}
diff --git a/jadx-gui/build.gradle.kts b/jadx-gui/build.gradle.kts
index b4612d031..658775881 100644
--- a/jadx-gui/build.gradle.kts
+++ b/jadx-gui/build.gradle.kts
@@ -73,6 +73,8 @@ application {
// needed for ktlint formatter
"-XX:+IgnoreUnrecognizedVMOptions",
"--add-opens=java.base/java.lang=ALL-UNNAMED",
+ // Foreign API access for 'directories' library (Windows only)
+ "--enable-native-access=ALL-UNNAMED",
// flags to fix UI ghosting (#2225)
"-Dsun.java2d.noddraw=true",
"-Dsun.java2d.d3d=false",