[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
(本頁面已被瀏覽過 469 次)