Androidをビルドする時のJDKバージョンについて

AndroidをビルドするためにGITからソースをダウンロードして作業してるのですが、Masterブランチとその他では、必要な環境が異なるみたいです。

具体的には、JDKのバージョン
です。

●Masterブランチ(要1.6)
# repo init -u git://android.git.kernel.org/platform/manifest.git
# repo sync

を実行してMaserブランチをダウンロードしてから
# make
を実行するとビルドエラーになります。

============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=AOSP
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
============================================
Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: java version "1.5.0_22".
The correct version is: 1.6.


Please follow the machine setup instructions at
http://source.android.com/source/download.html
************************************************************
build/core/main.mk:114: *** stop. 中止.

あれ、JDK1.6って対応してないじゃなかったっけ?
どっかのWebページだとUbuntu10.4でビルドするときは、わざわざ1.5を入れるみたいなこと書いてあったような気がするけど?
本家ページを確認すると
http://source.android.com/source/download.html
JDK 5.0, update 12 or higher.Java 6 is not supported, because of incompatibilities with @Override.
になってますね。

ググると
http://oshiete.goo.ne.jp/qa/6047872.html
--------------------------
android.comの文書は、改訂が追いついているわけではありません。みたところ、vendor/aospのコンフィグをつかった比較的新しいバージョンだとおもいますが、ビルド手順が、いっているのですから、JavaをSun-Java 1.6.x に上げてください。
--------------------------
ってことらしいです。

update-alternatives-java」を使えば複数バージョンの切り替えが出来るらしい。
ほう、じゃ早速確認
-------------------
$ update-alternatives --config java

java を提供するプログラムが 1 つしかありません (/usr/lib/jvm/java-1.5.0-sun/jre/bin/java)。
設定は行いません。
update-alternatives: /var/lib/dpkg/alternatives/java.dpkg-new を書き込み用にオープンできません: Permission denied
-------------------
1.5しか入ってないわけですな。
Permission deniedはsudoのつけ忘れです。(^^;)

じゃ、1.6入れましょう
------------------------
$ sudo apt-get install sun-java6-jdk
[sudo] password for oono:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
sun-java6-bin sun-java6-jre
提案パッケージ:
binfmt-support openjdk-6-doc sun-java6-demo sun-java6-source sun-java6-fonts
sun-java6-plugin ia32-sun-java6-plugin ttf-wqy-zenhei
推奨パッケージ:
gsfonts-x11
以下のパッケージが新たにインストールされます:
sun-java6-bin sun-java6-jdk sun-java6-jre
(中略)
sun-java6-bin (6.20dlj-0ubuntu1.8.04.1) を設定しています ...

sun-java6-jre (6.20dlj-0ubuntu1.8.04.1) を設定しています ...

sun-java6-jdk (6.20dlj-0ubuntu1.8.04.1) を設定しています ...
-----------------------
ということで1.6がインストールされました。
確認してみましょう。
$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

大丈夫ですね。

$ update-alternatives --config java

`java' を提供する 2 個の alternatives があります。

選択肢 alternative
-----------------------------------------------
1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
*+ 2 /usr/lib/jvm/java-6-sun/jre/bin/java

デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください:
update-alternatives: /var/lib/dpkg/alternatives/java.dpkg-new を書き込み用にオープンできません: Permission denied

1.5と1.6がインストールされて、現在は1.6が有効ということです。
$ make
でビルドが始まりましたがコンパイルエラーになります。
現在、3.0に向けてMasterブランチは、日々変わってるみたいなので、とりあえず放置

●Froyoブランチ(要1.5)
次はFroyoブランチです。-bオプションを指定してソースをダウンロードします。
# repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
# repo sync

を実行してFroyoブランチをダウンロードしてから
# make
を実行するとビルドエラーになります。

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================
Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: java version "1.6.0_20".
The correct version is: 1.5.


Please follow the machine setup instructions at
http://source.android.com/download
************************************************************
build/core/main.mk:117: *** stop. 中止.

えっと、今度は1.5じゃないとダメって
この辺の状況は
組み込み徒然草さん
兩儀.comさん
なんかが書かれてます。
じゃ、1.5に切り替えましょう。今度はsudo をちゃんと付けて

$ sudo update-alternatives --config java
[sudo] password for oono:

`java' を提供する 2 個の alternatives があります。

選択肢 alternative
-----------------------------------------------
1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
*+ 2 /usr/lib/jvm/java-6-sun/jre/bin/java

デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください: 1
Using '/usr/lib/jvm/java-1.5.0-sun/jre/bin/java' to provide 'java'.

番号で1を選択して1.5に切り替えます。
確認しましょう。

$ java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Client VM (build 1.5.0_22-b03, mixed mode, sharing)

ということで切り替わりました。

$ make
を実行すると
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================
Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version
of javac.

Your version is: javac 1.6.0_20.
The correct version is: 1.5.


Please follow the machine setup instructions at
http://source.android.com/download
************************************************************

えっとJavacも代えないとダメらしいです。
ちょっと実態を調べてみると、ややこしいですが
javaは「/usr/lib/jvm」に実態があって
-------------------------------------
-rw-r--r-- 1 root root 2756 2009-11-23 20:39 .java-1.5.0-sun.jinfo
-rw-r--r-- 1 root root 2846 2010-07-02 21:06 .java-6-sun.jinfo
lrwxrwxrwx 1 root root 23 2010-09-21 08:11 java-1.5.0-sun -> java-1.5.0-sun-1.5.0.22
drwxr-xr-x 10 root root 4096 2010-09-21 08:11 java-1.5.0-sun-1.5.0.22
lrwxrwxrwx 1 root root 19 2010-09-21 22:18 java-6-sun -> java-6-sun-1.6.0.20
drwxr-xr-x 8 root root 4096 2010-09-21 22:18 java-6-sun-1.6.0.20
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

コマンドは、「/usr/bin」配下ですが、それも「/etc/alternative」へのシンボリックリンク
-------------------------------------
lrwxrwxrwx 1 root root 22 2010-09-21 08:11 java -> /etc/alternatives/java
lrwxrwxrwx 1 root root 30 2010-09-21 08:11 java-rmi.cgi -> /etc/alternatives/java-rmi.cgi
lrwxrwxrwx 1 root root 25 2010-09-21 08:11 java_vm -> /etc/alternatives/java_vm
lrwxrwxrwx 1 root root 23 2010-09-21 08:11 javac -> /etc/alternatives/javac
lrwxrwxrwx 1 root root 25 2010-09-21 08:11 javadoc -> /etc/alternatives/javadoc
lrwxrwxrwx 1 root root 23 2010-09-21 08:11 javah -> /etc/alternatives/javah
lrwxrwxrwx 1 root root 23 2010-09-21 08:11 javap -> /etc/alternatives/javap
lrwxrwxrwx 1 root root 24 2010-09-21 08:11 javaws -> /etc/alternatives/javaws
-------------------------------------

「/etc/alternatives」を見ると、これもシンボリックリンクですが実体の「/usr/lib/jvm」を指していると。javaは1.5でjavacが1.6になってるのでエラーになったんですね。
-------------------------------------
lrwxrwxrwx 1 root root 40 2010-09-23 11:11 java -> /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
lrwxrwxrwx 1 root root 40 2010-09-21 22:18 java-rmi.cgi -> /usr/lib/jvm/java-6-sun/bin/java-rmi.cgi
lrwxrwxrwx 1 root root 50 2010-09-23 11:11 java.1.gz -> /usr/lib/jvm/java-1.5.0-sun/jre/man/man1/java.1.gz
lrwxrwxrwx 1 root root 39 2010-09-21 22:18 java_vm -> /usr/lib/jvm/java-6-sun/jre/bin/java_vm
lrwxrwxrwx 1 root root 33 2010-09-21 22:18 javac -> /usr/lib/jvm/java-6-sun/bin/javac
lrwxrwxrwx 1 root root 43 2010-09-21 22:18 javac.1.gz -> /usr/lib/jvm/java-6-sun/man/man1/javac.1.gz
lrwxrwxrwx 1 root root 35 2010-09-21 22:18 javadoc -> /usr/lib/jvm/java-6-sun/bin/javadoc
lrwxrwxrwx 1 root root 45 2010-09-21 22:18 javadoc.1.gz -> /usr/lib/jvm/java-6-sun/man/man1/javadoc.1.gz
lrwxrwxrwx 1 root root 33 2010-09-21 22:18 javah -> /usr/lib/jvm/java-6-sun/bin/javah
lrwxrwxrwx 1 root root 43 2010-09-21 22:18 javah.1.gz -> /usr/lib/jvm/java-6-sun/man/man1/javah.1.gz
lrwxrwxrwx 1 root root 33 2010-09-21 22:18 javap -> /usr/lib/jvm/java-6-sun/bin/javap
lrwxrwxrwx 1 root root 43 2010-09-21 22:18 javap.1.gz -> /usr/lib/jvm/java-6-sun/man/man1/javap.1.gz
lrwxrwxrwx 1 root root 38 2010-09-21 22:18 javaws -> /usr/lib/jvm/java-6-sun/jre/bin/javaws
lrwxrwxrwx 1 root root 48 2010-09-21 22:18 javaws.1.gz -> /usr/lib/jvm/java-6-sun/jre/man/man1/javaws.1.gz
-------------------------------------

ちゅうことでjavacも1.5へ切り替えます。っていうかまとめて切り替えてくんないのか?
-----------------
$ sudo update-alternatives --config javac
[sudo] password for oono:

`javac' を提供する 2 個の alternatives があります。

選択肢 alternative
-----------------------------------------------
1 /usr/lib/jvm/java-1.5.0-sun/bin/javac
*+ 2 /usr/lib/jvm/java-6-sun/bin/javac

デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください: 1
Using '/usr/lib/jvm/java-1.5.0-sun/bin/javac' to provide 'javac'.
----------------
確認します。
$ javac -version
javac 1.5.0_22

$ make
とやればやっと、ビルドが走り始めました。ビルドエラーになりませんように

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 4

面白い 面白い
ナイス ナイス

この記事へのコメント

この記事へのトラックバック