android编译jdk版本与运行jdk版本冲突,如何解决?
eclipse运行时报:Unsupportedmajor.minorversion52.0把JDK改为1.8后,android编译又出现问题:Androidrequire...
eclipse运行时报:
Unsupported major.minor version 52.0
把JDK改为1.8后,android编译又出现问题:
Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead.
请问这样的冲突应该如何解决? 展开
Unsupported major.minor version 52.0
把JDK改为1.8后,android编译又出现问题:
Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead.
请问这样的冲突应该如何解决? 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
做android rom开发过程中,可能会经常做不同的版本4.2,4.4,5.1或者6.0。每个版本的编译环境对jdk的版本要求都有点差异。
4.2版本需要使用jdk1.5或者1.6,使用1.7的jdk编译时会报类型错误等问题
5.1以上的版本需使用openJDK 1.7及以上,否则会直接报“目标版本与源版本冲突”之类的问题。
平时,我们的一个Linux编译服务器中会存放多个不同android版本的项目,这个时候就要对单个项目进行jdk的配置才能避免jdk冲突。
首先,我们最好是在Linux编译服务器中下载两套jdk,一个1.6的和一个openJDK 1.7。注意这里jdk 1.6可以用apt命令下载安装,而openJDK是不能用apt来安装的,而是直接下载后解压到一个目录中存放即可。
接下来,我们看看我们要编译的工程所依赖的jdk版本
build\core\combo\javac.mk
Android 4.2的javac.mk代码如下:
# Selects a Java compiler.
#
# Inputs:
# CUSTOM_JAVA_COMPILER -- "eclipse", "openjdk". or nothing for the system
# default
#
# Outputs:
# COMMON_JAVAC -- Java compiler command with common arguments
# Whatever compiler is on this system.
ifeq ($(BUILD_OS), windows)
COMMON_JAVAC := development/host/windows/prebuilt/javawrap.exe -J-Xmx256m \
-target 1.6 -Xmaxerrs 9999999
else
COMMON_JAVAC := javac -J-Xmx512M -target 1.6 -Xmaxerrs 9999999
endif
# Eclipse.
ifeq ($(CUSTOM_JAVA_COMPILER), eclipse)
COMMON_JAVAC := java -Xmx256m -jar prebuilt/common/ecj/ecj.jar -6 \
-maxProblems 9999999 -nowarn
$(info CUSTOM_JAVA_COMPILER=eclipse)
endif
# OpenJDK.
ifeq ($(CUSTOM_JAVA_COMPILER), openjdk)
# We set the VM options (like -Xmx) in the javac script.
COMMON_JAVAC := prebuilt/common/openjdk/bin/javac -target 1.6 \
-Xmaxerrs 9999999
$(info CUSTOM_JAVA_COMPILER=openjdk)
endif
HOST_JAVAC ?= $(COMMON_JAVAC)
TARGET_JAVAC ?= $(COMMON_JAVAC)
#$(info HOST_JAVAC=$(HOST_JAVAC))
#$(info TARGET_JAVAC=$(TARGET_JAVAC))12345678910111213141516171819202122232425262728293031323334353637
红色标注的target 1.6就是指的此工程编译依赖的JDK版本。
以上两点确认了之后,就是要针对当前工程进行配置了。
这里提供一个脚本mbldenv.sh,存放到根目录下
#!/bin/bash
# ##########################################################
# ALPS(Android4.1 based) build environment profile setting
# ##########################################################
# Overwrite JAVA_HOME environment variable setting if already exists
JAVA_HOME=**/home/ken/jdk/jdk1.6.0_45**
export JAVA_HOME
# Overwrite ANDROID_JAVA_HOME environment variable setting if already exists
ANDROID_JAVA_HOME=**/home/ken/jdk/jdk1.6.0_45**
export ANDROID_JAVA_HOME
# Overwrite PATH environment setting for JDK & arm-eabi if already exists
PATH=**/home/ken/jdk/jdk1.6.0_45**/bin:$PWD/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin:$PATH
export PATH
# Add MediaTek developed Python libraries path into PYTHONPATH
if [ -z "$PYTHONPATH" ]; then
PYTHONPATH=$PWD/mediatek/build/tools
else
PYTHONPATH=$PWD/mediatek/build/tools:$PYTHONPATH
fi
export PYTHONPATH1234567891011121314151617181920212223
红色标注的就是对应的jdk目录,修改成需要的就可以使用了。
使用方法,source build/env…之后,source mbldenv.sh,这个时候就当前工程的就会使用jdk1.6.0_45来进行编译了。
最后再附上一个5.1的mbldenv.sh
#!/bin/bash
# ##########################################################
# ALPS(Android5.1 based) build environment profile setting
# ##########################################################
# Overwrite JAVA_HOME environment variable setting if already exists
JAVA_HOME=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**
export JAVA_HOME
# Overwrite ANDROID_JAVA_HOME environment variable setting if already exists
ANDROID_JAVA_HOME=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**
export ANDROID_JAVA_HOME
# Overwrite PATH environment setting for JDK & arm-eabi if already exists
PATH=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**/bin:$PWD/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin:$PATH
export PATH
# Add MediaTek developed Python libraries path into PYTHONPATH
if [ -z "$PYTHONPATH" ]; then
PYTHONPATH=$PWD/mediatek/build/tools
else
PYTHONPATH=$PWD/mediatek/build/tools:$PYTHONPATH
fi
export PYTHONPATH
4.2版本需要使用jdk1.5或者1.6,使用1.7的jdk编译时会报类型错误等问题
5.1以上的版本需使用openJDK 1.7及以上,否则会直接报“目标版本与源版本冲突”之类的问题。
平时,我们的一个Linux编译服务器中会存放多个不同android版本的项目,这个时候就要对单个项目进行jdk的配置才能避免jdk冲突。
首先,我们最好是在Linux编译服务器中下载两套jdk,一个1.6的和一个openJDK 1.7。注意这里jdk 1.6可以用apt命令下载安装,而openJDK是不能用apt来安装的,而是直接下载后解压到一个目录中存放即可。
接下来,我们看看我们要编译的工程所依赖的jdk版本
build\core\combo\javac.mk
Android 4.2的javac.mk代码如下:
# Selects a Java compiler.
#
# Inputs:
# CUSTOM_JAVA_COMPILER -- "eclipse", "openjdk". or nothing for the system
# default
#
# Outputs:
# COMMON_JAVAC -- Java compiler command with common arguments
# Whatever compiler is on this system.
ifeq ($(BUILD_OS), windows)
COMMON_JAVAC := development/host/windows/prebuilt/javawrap.exe -J-Xmx256m \
-target 1.6 -Xmaxerrs 9999999
else
COMMON_JAVAC := javac -J-Xmx512M -target 1.6 -Xmaxerrs 9999999
endif
# Eclipse.
ifeq ($(CUSTOM_JAVA_COMPILER), eclipse)
COMMON_JAVAC := java -Xmx256m -jar prebuilt/common/ecj/ecj.jar -6 \
-maxProblems 9999999 -nowarn
$(info CUSTOM_JAVA_COMPILER=eclipse)
endif
# OpenJDK.
ifeq ($(CUSTOM_JAVA_COMPILER), openjdk)
# We set the VM options (like -Xmx) in the javac script.
COMMON_JAVAC := prebuilt/common/openjdk/bin/javac -target 1.6 \
-Xmaxerrs 9999999
$(info CUSTOM_JAVA_COMPILER=openjdk)
endif
HOST_JAVAC ?= $(COMMON_JAVAC)
TARGET_JAVAC ?= $(COMMON_JAVAC)
#$(info HOST_JAVAC=$(HOST_JAVAC))
#$(info TARGET_JAVAC=$(TARGET_JAVAC))12345678910111213141516171819202122232425262728293031323334353637
红色标注的target 1.6就是指的此工程编译依赖的JDK版本。
以上两点确认了之后,就是要针对当前工程进行配置了。
这里提供一个脚本mbldenv.sh,存放到根目录下
#!/bin/bash
# ##########################################################
# ALPS(Android4.1 based) build environment profile setting
# ##########################################################
# Overwrite JAVA_HOME environment variable setting if already exists
JAVA_HOME=**/home/ken/jdk/jdk1.6.0_45**
export JAVA_HOME
# Overwrite ANDROID_JAVA_HOME environment variable setting if already exists
ANDROID_JAVA_HOME=**/home/ken/jdk/jdk1.6.0_45**
export ANDROID_JAVA_HOME
# Overwrite PATH environment setting for JDK & arm-eabi if already exists
PATH=**/home/ken/jdk/jdk1.6.0_45**/bin:$PWD/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin:$PATH
export PATH
# Add MediaTek developed Python libraries path into PYTHONPATH
if [ -z "$PYTHONPATH" ]; then
PYTHONPATH=$PWD/mediatek/build/tools
else
PYTHONPATH=$PWD/mediatek/build/tools:$PYTHONPATH
fi
export PYTHONPATH1234567891011121314151617181920212223
红色标注的就是对应的jdk目录,修改成需要的就可以使用了。
使用方法,source build/env…之后,source mbldenv.sh,这个时候就当前工程的就会使用jdk1.6.0_45来进行编译了。
最后再附上一个5.1的mbldenv.sh
#!/bin/bash
# ##########################################################
# ALPS(Android5.1 based) build environment profile setting
# ##########################################################
# Overwrite JAVA_HOME environment variable setting if already exists
JAVA_HOME=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**
export JAVA_HOME
# Overwrite ANDROID_JAVA_HOME environment variable setting if already exists
ANDROID_JAVA_HOME=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**
export ANDROID_JAVA_HOME
# Overwrite PATH environment setting for JDK & arm-eabi if already exists
PATH=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**/bin:$PWD/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin:$PATH
export PATH
# Add MediaTek developed Python libraries path into PYTHONPATH
if [ -z "$PYTHONPATH" ]; then
PYTHONPATH=$PWD/mediatek/build/tools
else
PYTHONPATH=$PWD/mediatek/build/tools:$PYTHONPATH
fi
export PYTHONPATH
追问
感觉,本质问题没有解决。我现在电脑上有1.6~1.8的版本。我可以用1.6进行编译。但运行时,被告知要1.8的jdk。我用1.8的jdk,编译又编译不过。这是主要的矛盾
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询