Android源码编译时jdk冲突解决办法

来源:互联网 发布:风暴大陆升阶数据 编辑:程序博客网 时间:2024/06/03 13:34

做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 9999999else    COMMON_JAVAC := javac -J-Xmx512M -target 1.6 -Xmaxerrs 9999999endif# 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)endifHOST_JAVAC ?= $(COMMON_JAVAC)TARGET_JAVAC ?= $(COMMON_JAVAC)#$(info HOST_JAVAC=$(HOST_JAVAC))#$(info TARGET_JAVAC=$(TARGET_JAVAC))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

红色标注的target 1.6就是指的此工程编译依赖的JDK版本。 
以上两点确认了之后,就是要针对当前工程进行配置了。 
这里提供一个脚本mbldenv.sh,存放到根目录下

#!/bin/bash# ########################################################### ALPS(Android4.1 based) build environment profile setting# ########################################################### Overwrite JAVA_HOME environment variable setting if already existsJAVA_HOME=**/home/ken/jdk/jdk1.6.0_45**export JAVA_HOME# Overwrite ANDROID_JAVA_HOME environment variable setting if already existsANDROID_JAVA_HOME=**/home/ken/jdk/jdk1.6.0_45**export ANDROID_JAVA_HOME# Overwrite PATH environment setting for JDK & arm-eabi if already existsPATH=**/home/ken/jdk/jdk1.6.0_45**/bin:$PWD/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin:$PATHexport PATH# Add MediaTek developed Python libraries path into PYTHONPATHif [ -z "$PYTHONPATH" ]; then  PYTHONPATH=$PWD/mediatek/build/toolselse  PYTHONPATH=$PWD/mediatek/build/tools:$PYTHONPATHfiexport PYTHONPATH
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

红色标注的就是对应的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 existsJAVA_HOME=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**export JAVA_HOME# Overwrite ANDROID_JAVA_HOME environment variable setting if already existsANDROID_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 existsPATH=**/usr/lib/jvm/java-1.7.0-openjdk-amd64**/bin:$PWD/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin:$PATHexport PATH# Add MediaTek developed Python libraries path into PYTHONPATHif [ -z "$PYTHONPATH" ]; then  PYTHONPATH=$PWD/mediatek/build/toolselse  PYTHONPATH=$PWD/mediatek/build/tools:$PYTHONPATHfiexport PYTHONPATH
转载自:http://blog.csdn.net/q1302182594/article/details/52125839


原创粉丝点击