好的,所以我正在尝试构建一个 Android ROM,但返回以下错误;
************************************************************
You are attempting to build with the incorrect version
of java.
Your version is: Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.6)
(7u79-2.5.6-0ubuntu1.15.04.1) OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode).
The required version is: "1.7.x"
Please follow the machine setup instructions at
https://source.android.com/source/initializing.html
************************************************************
执行时lunch aosp_grouper-userdebug
。
我曾尝试从存档中安装 Java 7 的旧版本,但我不知道如何从 tar 文件同时安装两个版本的 Java 7。
帮助?
发行版:Ubuntu 15.04
答案1
在 build/core/main.mk 中,java_version_str 包含“java -version”的输出:
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.15.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
java_version 应该使用 grep 提取“1.7.0_79”。grep 正则表达式“^java”开头的插入符号表示作者希望能够找到以“java”开头的行。不幸的是,GNU Make 变量不存储行尾。因此 grep 只能看到以“Picked”开头的一行。
当“java version”恰好在第一行时,grep 会意外地工作。这可能是在 java_version_str 中添加“unset _JAVA_OPTIONS”的原因,因为它会导致类似的问题。
最简单的解决方案是遵循当前的临时解决方案,将“unset JAVA_TOOL_OPTIONS”添加到 java_version_str:
java_version_str := $(shell unset _JAVA_OPTIONS && unset JAVA_TOOL_OPTIONS && java -version 2>&1)
javac_version_str := $(shell unset _JAVA_OPTIONS && unset JAVA_TOOL_OPTIONS && javac -version 2>&1)
真正的解决方案是不使用中间变量 java_version_str 并直接执行 grep:
java_version := $(shell java -version 2>&1 | grep '^java .*[ "]1\.7[\. "$$]')
javac_version := $(shell java -version 2>&1 | grep '[ "]1\.7[\. "$$]')