mac出现java程序运行版本不一致
当进行apk反编译时,调用jadx-gui时
运行java程序jar包的时候报错:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: jadx/gui/JadxGUI has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
原因是编译这个jar包jadx-1.5.1-all.jar用的java运行时环境是55.0,而我现在电脑上的java运行时环境是52.0,大致的对应关系如下:
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
59 = Java 15
60 = Java 16
61 = Java 17
所以也就是编译jadx-1.5.1-all.jar用的JRE是java11,而我现在电脑上的java运行时环境是java8,用命令查看一下
java -version 查看当前Java的jdk版本
javac -version 查看当前Java的jre版本
果然是1.8
官方下载地址
Java Downloads | Oracle
我这里下载的是JDK22版本
mac下的JDK都默认安装在这个目录下:/Library/Java/JavaVirtualMachines/
然后电脑上就有不同版本的JDK了
接下来我们只需要在配置文件中设置选择使用不同版本的JDK就好了
如果当前使用的shell是zsh就编辑.zshrc文件,如果是bash就编辑.bash_profile文件
vim .bash_profile
JAVA_HOME_8=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
JAVA_HOME_22=/Library/Java/JavaVirtualMachines/jdk-22.jdk/Contents/Home
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME=$JAVA_HOME_8
export JRE_HOME
export PATH
export CLASSPATH
alias jdk8="export JAVA_HOME=$JAVA_HOME_8"
alias jdk22="export JAVA_HOME=$JAVA_HOME_22"
然后保存文件让它生效:
source .bash_profile
查看当前java版本