[Mac] JD-GUI 無法在 macOS Big Sur 上執行,因為缺少 Java 1.8?

[Mac] JD-GUI 無法在 macOS Big Sur 上執行,因為缺少 Java 1.8?

之前在 將 Android APK 檔案反編譯成 Java 原始碼 這篇裡,

用過 dex2jar 和 JD-GUI ,來反編譯 Android APK 程式碼。

不過今天想再跑 JD-GUI,卻出現錯誤訊息,

說 This program requires Java 1.8+:

 

這個訊息實在很詭異,

因為我在終端機裡下  java -version ,它的結果明明就是 1.8.0:

$ java -version

java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

 

而這一份 Java 1.8.0 的位置是 /usr/bin/java:

$ which java

/usr/bin/java

 

那麼為什麼 JD-GUI 認為目前的 Java 不是 1.8 呢?

研究了一下,似乎 Mac 內建的 Java 預設是放在 /Library/Java/JavaVirtualMachines,

而目前 macOS Big Sur 11.6 裡面的 Java 是 14.0.2 版本了:

$ /usr/libexec/java_home

/Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home

 

(不過如果全部列出來,也還是有 1.8 的版本)

$ /usr/libexec/java_home -V

Matching Java Virtual Machines (3):
    14.0.2 (x86_64) "Oracle Corporation" - "Java SE 14.0.2" /Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home
    1.8.301.09 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_261 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home

 

既然 /usr/bin/java 還是 Java 1.8,

那我們可以用它來啟動 JD-GUI:

/usr/bin/java -jar /Applications/JD-GUI.app/Contents/Resources/Java/jd-gui-1.6.6-min.jar

 

這樣就能啟動成功囉:

 

另一種比較一勞永逸的改法,

是去修正 /Applications/JD-GUI.app/Contents/Info.plist,

它裡面有個  JVMVersion 被設成了 1.8+:

<key>JVMVersion</key> <string>1.8+</string>

 

把 1.8+ 這個值改成 1.8:

<key>JVMVersion</key> <string>1.8</string>

 

這樣子也一樣可以成功執行 JD-GUI 喔~

 

參考資料:JD-GUI won’t run with Java 11 · Issue #346 · java-decompiler/jd-gui

(本頁面已被瀏覽過 9 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料