最近遇到RK3576 Android14编译OTA包时,出现如下报错log:
bash
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/signapk/SignApk 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
查找网上的资料发现是java版本不对,编译使用的javac版本和运行的java版本不一直。
通过
java --version
命令查看当前系统的java版本是jdk8(刚好对应log里面的52版本).
于是使用下面命令安装jdk11(jdk11对应log里面的55版本)
sudo apt-get install openjdk-11-jdk
安装以后手动选择一下java版本和javac版本。
sudo update-alternatives --config java
sudo update-alternatives --config javac
然后重新编译OTA包,发现还是报一样的错误,真是百思不得其解。
后面下意识的查看了一下SDK里面的编译脚本build.sh。发现里面会去设置java的版本。。。
bash
#set jdk version
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$ANDROID_BUILD_TOP/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
这里设置了jdk8版本
于是修改了一下export JAVA_HOME,将其指定为jdk11,重新编译,没有就报错了~:
diff
#export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64