2015年6月9日 星期二

[android] orcale JDK

雖然 google 講說編 AOSP 可以用 openJDK, 可是我沒一次編出來東西能用的, 從 android 2.3.4, 2.3.7, 4.0.4, 4.2.2, 4.4.2, 4.4.3, 5.0.2 這些都是. 根據
http://blog.markloiseau.com/2012/07/how-to-compile-android-on-ubuntu-12-04/
的說法, 他也是因為無法成功編譯才換的. 以下環境為 ubuntu 12.04 與 14.04

  1. 首先先去 orcale 下載 JDK 包.
  2. 解壓縮到 /usr/lib/
  3. 假設您的 JDK 是 jdk1.7_79 就 ln-s /use/lib/jdk 1.7_79 /user/lib/jvm 這樣日後要切換 jdk 版本也迅速方便. (ps. ubuntu 預設就是用 /usr/lib/jvm, 所以記得千萬不要跟 openJDK 一起裝)
  4. 執行這些東西設定預設路徑:

update-alternatives --install /usr/bin/java java /usr/lib/jvm/bin/java 1;
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/bin/javac 1;
update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/bin/javaws 1;
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/bin/jar 1;
update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/bin/javadoc 1;
update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/bin/javah 1;
update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/bin/javap 1

update-alternatives --config java;
update-alternatives --config javac;
update-alternatives --config javaws;
update-alternatives --config jar;
update-alternatives --config javadoc;
update-alternatives --config javah;
update-alternatives --config javap;

這樣就可以.
可以用 java -version 確認版本.
至於這篇之所以現在才貼, 是因為最後兩個 (javah, javap) 在 android 4.4 裡有用到, 才注意到還欠這兩個東西. 5.0.2 就沒欠了, 之後的我不保證...

後記. android 5.0.2 AOSP 中會檢查是不是使用 openjdk, 要在這裡拿掉:
build/core/main.mk
(約 186 行處)
# Check for the current jdk
ifeq ($(requires_openjdk), true)
# The user asked for java7 openjdk, so check that the host
# java version is really openjdk
- ifeq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
+ ifeq ($(shell echo '$(java_version_str)'),)
$(info ************************************************************)
$(info You asked for an OpenJDK 7 build but your version is)
$(info $(java_version_str).)
$(info ************************************************************)
$(error stop)

移除檢查後才能順利用 orcale JDK 去編. 至於 AOSP 為什麼一定要指定使用 openJDK 我就不知道了, google 是間很愛幹壞事的公司, 我也不想知道為什麼要這麼做....