一、问题描述
为了在不连接外网情况下能够跑Google CTS测试,需要安装测试环境,本地在执行测试脚本时:./cts-tradefed
会报错,如下:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/compatibility/common/tradefed/command/CompatibilityConsole has been compiled by a more recent version of the Java Runtime (class file version 53.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:756)
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:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
这是属于JDK没有正确安装Google测试所需的JDK11环境。
查看java和javac来查看版本,发现java和javac版本一致均为1.8.0_292,但都不是jdk11,导致无法在本地运行CTS环境。
查看当前java和javac的安装位置,如下:
whereis java --》/usr/bin/java
whereis javac --》/usr/bin/javac
到/usr/bin/下查看java的链接情况
ls -ll|grep -i java
这里发现java和javac是链接到其他位置的,而非所想要的jdk11。.
二、环境安装步骤
2.1 下载JDK并解压
下载网址:https://jdk.java.net/archive/
2.2 本地创建安装目录
创建/usr/local/java目录。
执行mkdir -p /usr/local/java命令(-p 可以创建多级文件,即上级文件夹不存在时会自动创建) ,这个目录用来存放安装的程序和文件,如果已有就跳过。
再把下载的jdk-11.0.2文件放到/usr/local/java/下。
cp -rn jdk-11.0.2 /usr/local/java/
2.3 配置java环境变量
需要root环境 : su
编辑配置文件,执行命令:
gedit /etc/profile
一般/etc/profile 默认环境为:
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
#在底部添加!!!jdk配置一般在最下面(之前默认安装的1.8.0_292)
export JAVA_HOME=/usr/local/Java/jdk-11.0.2 #所下载的jdk文件路径
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
修改完成后, 使配置文件生效。
source /etc/profile
2.4 建立java和javac的新软链接
进入/usr/bin/java/中,ls -ll|grep -i java 发现java和javac都是通过软链接指向了其他位置,导致无法使用安装的jdk11。
删除两个软连接,建立新的软连接到所下载的jdk11,如果不先删除软连接而直接建立会报错,如下:
ln: failedto create symbolic link '/usr/bin/javac': File exists
使用指令建立新的软链接:
rm -rf /usr/bin/java
ln -s $JAVA_HOME/bin/java /usr/bin/java
rm -rf /usr/bin/javac
ln -s /usr/local/java/jdk-11.0.2/bin/javac /usr/bin/javac
再给java和javac权限,到/usr/local/java/jdk-11.0.2/bin中:不给的话使用java时会报错,如下:
bash:/usr/bin/java: Permission denied
chmod 777 java
chmod 777 javac
或者直接
chmod 777 /usr/bin/java
chmod 777 /usr/bin/javac
ls -ll /usr/bin/|grep -i java 查看java和javac的软链接已经建立完成。
这样再查看相关信息,发现就是正确的,即为所安装的openjdk version"11.0.2" 2019-01-15,同时也可以成功直接运行CTS环境了。