Android原始碼編譯時jdk衝突解決辦法
阿新 • • 發佈:2019-02-12
做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))
- 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 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 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 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
轉載自:http://blog.csdn.net/q1302182594/article/details/52125839