【问题标题】:Unable to build android due to incorrect java由于 java 不正确,无法构建 android
【发布时间】:2017-06-28 18:27:26
【问题描述】:

我有 ubuntu 14.04,我正在尝试为 BBB 构建 android。我得到了 BBB android 并访问了这个站点以获取正确的 java。

我从这个网站获取了android源码

http://bbbandroid.sourceforge.net/build.html

然后按照此站点的 java 步骤进行操作,

https://source.android.com/source/initializing#for-ubuntu-14-04

我按照网站说的做了。

然后 ma​​ke -j4 给出了这个构建错误,

============================================
Checking build tools versions...
************************************************************
You are attempting to build with an unsupported JDK.

You use OpenJDK but only Sun/Oracle JDK is supported.
Please follow the machine setup instructions at
    https://source.android.com/source/download.html
************************************************************
build/core/main.mk:152: *** stop.  Stop.

然后我就这样做了

**java -version**
openjdk version "1.8.0_45-internal"
OpenJDK Runtime Environment (build 1.8.0_45-internal-b14)
OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)

**sudo update-alternatives --config java**

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
* 3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press enter to keep the current choice[*], or type selection number: 3

**sudo update-alternatives --config javac**
There are 2 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                         Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac   1081      auto mode
  1            /usr/lib/jvm/java-6-openjdk-amd64/bin/javac   1061      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac   1081      manual mode

Press enter to keep the current choice[*], or type selection number: 2

我再次检查了 java -version

openjdk version "1.8.0_45-internal"
OpenJDK Runtime Environment (build 1.8.0_45-internal-b14)
OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)

还是和以前一样。

  1. 这里有什么问题?
  2. google的android、oracle jdk、sun jdk或open jdk到底支持什么?

【问题讨论】:

  • 假设OpenJDK没问题,如果没记错,你也应该更新javah...

标签: android c build openjdk


【解决方案1】:

您需要获取 Sun/Oracle JDK,并且您当前正在使用 OpenJDK。

Sun/Oracle JDK 是受支持的 JDK。 (Sun 归甲骨文所有)

makefile 输出回答了您的问题。它必须检查并强制使用 Sun/Oracle JDK。

您使用 OpenJDK,但仅支持 Sun/Oracle JDK。

请按照机器设置说明进行操作 https://source.android.com/source/download.html

你需要安装 Sun/Oracle JDK 然后运行

sudo update-alternatives --config java

选择新安装的版本。

【讨论】:

    【解决方案2】:

    我以为我通过重新启动计算机解决了这个错误,再次make 并且错误因未知原因消失了。但是现在当我尝试启动模拟器时,我发现自己非常可笑。

    需要重新获取资源以使模拟器在正确的环境下运行,see here

    xb@dnxb:~/Downloads/android_src/hole$ . build/envsetup.sh
    xb@dnxb:~/Downloads/android_src/hole$ lunch aosp_bullhead-userdebug
    

    现在运行模拟器:

    xb@dnxb:~/Downloads/android_src/hole$ emulator -sysdir out/target/product/generic/ -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel prebuilts/qemu-kernel/arm/kernel-qemu-armv7 -memory 2048
    emulator: ERROR: Can't access ANDROID_PRODUCT_OUT as '/home/xiaobai/Downloads/android_src/hole/out/target/product/bullhead'
    You need to build the Android system before launching the emulator
    xb@dnxb:~/Downloads/android_src/hole$
    

    我刚刚意识到我只有/home/xiaobai/Downloads/android_src/hole/out/target/product/generic/,没有bullhead(Nexus 5X)。

    现在我知道我上次重启后成功的原因,这是因为它使用默认的通用午餐菜单aosp_arm-eng 构建,因为我在重新运行之前没有重做步骤. build/envsetup.shlunch aosp_bullhead-userdebug @987654330 @。

    我可以看到我的/etc/environment 有这个JAVA_HOME 设置,所以sudo update-alternatives --config java 永远不会工作,因为/usr/lib/jvm/jdk1.8.0_131/ 是 Oracle/Sun,而不是 Open JDK(我的情况与 OP 不同,是否需要 Oracle/ Sun 或 OpenJDK 取决于午餐菜单):

    $ cat /etc/environment
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$PATH"
    JAVA_HOME="/usr/lib/jvm/jdk1.8.0_131/"
    

    修改/etc/environment为openjdk路径(在Ubuntu下可以用sudo apt-get install openjdk-8-jdk下载,然后用dpkg -L openjdk-8-jdk定位路径),打开一个新的tab shell session,重做. build/envsetup.sh,@987654340 @ 和 make,现在它可以正常工作而不会出现 jdk 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多