2013年2月3日 星期日

[Linux]在Ubuntu 建制雙jdk的可切換式Java 編譯環境(內含轉載)

2013.05.09更新


在Ubuntu下Build Android時遇到Javac版本匹配問題怎麼辦?


1.是用底下方法解決
2.是修改/build/core/main.mk
參考:http://ysvggm.blogspot.tw/2011/04/ubuntubuild-androidjavac.html
強制用sun-java6-jdk似乎是可行的,至少我們的專案到目前為止都沒出過問題,work around如下:修改/build/core/main.mk:# Check for the correct version of javajava_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')......# Check for the correct version of javacjavac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
將5改成6就可以了.
=====================================================================
在發表[Android如何在Ubuntu環境下,建置一個Android可以呼叫c函式庫的環境(Android NDK)(完整版)
這篇時應該就要先寫了
因為JDK一定是在IDE及android sdk等環境安裝前 先set好的
但怕混淆所以另外寫。
而最近因為在工作中某些狀況 需要裝回jdk1.6(要build android 2.3.3就需要換回1.6才行)
偏偏我已經升級成7.0了,所以整個重新裝 ,文章也重新整理過,如下:

java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-載b04, mixed mode)

又剛好換SSD 整個系統重建
所以又要在掛一次兩個jdk
就參考了

第一步 Ubuntu 12.04 安裝 Oracle Java 7

會一開始進行這步主要是要讓eclipse能夠起來,在更新android的adt套件跟sdk的版本時可以在繼續作java的更新,雙管齊下:

1. 終端機複製貼上然後 Enter :sudo apt-get purge openjdk* 
//安裝任何跟 open JDK 有關的東西,那就把它都移除掉

2.//裝了其他 PPA 最後卻失敗了,按照下列步驟進行移除重清的動作:
sudo rm /var/lib/dpkg/info/oracle-java7-installer*
sudo apt-get purge oracle-java7-installer*
sudo rm /etc/apt/sources.list.d/*java*
sudo apt-get update

3.如果上述兩者你都沒有,那就直接來進行安裝的指令就可以囉!
 sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

第二步下載JDK6 並解壓安裝
1.下載 
請到 Oracle 網站的這裡來點選「JDK 6」連結下載 (如上圖),然後,在接下來出現的網頁上,要先點選下載網址上方的「Accept License Agreement」選項後,才能點選下方的「jdk-6u39-linux-x64.bin」(舊圖內容有落差)

Credit Oracle.com

2. 變更檔案模式
執行下載下來的檔案前先用下面的指令來讓下載來的檔案可以被執行。
sudo chmod 777 jdk-6u39-linux-x64.bin

3. 安裝
設定好檔案模式後,接著,請直接執行下載的檔案。
./jdk-6u39-linux-x64.bin
執行後,就會開始解壓縮並且產生一個新的資料夾,名稱就是JDK的版本,接著,請把這個資料夾整個搬到「/usr/lib/jvm」資料夾,執行完第一步會有jvm這個資料夾 到裡面在新增一個java資料夾,在搬之前,記得先建好
sudo mkdir /usr/lib/jvm/java
sudo mv jdk1.6.0_39 /usr/lib/jvm/java

第三步-更改設定檔:
在 [Linux]在Ubuntu環境下建置Java編譯環境中 如果要將jdk從1.7換回1.6可以參考並修改:(此時最新版本為 1.6.0_39)
1.終端機執行: sudo vi /etc/environment,红色部分是要增加的資訊

JAVAHOME=/usr/lib/jvm/java/jdk1.6.0_39 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/java/jdk1.6.0_39/bin:/usr/lib/jvm/java/java/jdk1.6.0_39/jre/bin"
CLASSPATH=/usr/lib/jvm/java/jdk1.6.0_39 /lib:/usr/lib/jvm/java/jdk1.6.0_39/jre/lib
設定默認的jdk,因為系統可能存在別的版本的jdk


2.終端機執行:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_39/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_39/bin/javac 300
選擇系統默認的jdk,在终端执行命令: sudo update-alternatives --config java
如果只存在一個java環境會出現提示你只有一個jdk
否則會出現:

  Selection    Path                                     優先級  Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java/jdk1.6.0_39/bin/java    300       auto mode
  1            /usr/lib/jvm/java-7-oracle/jre/bin/java   1         manual mode   <------ java="" re="" span="">
  2            /usr/lib/jvm/java/jdk1.6.0_39/bin/java    300       manual mode

按0之後 設成jdk1.6.0_39為主要 按enter後離開


更改Java版本似乎是不夠的 若javac版本不符 在build較先前的android版本會顯示javac版本不符的相關英文提示,解法:


sudo update-alternatives --config java
以及
輸入:sudo update-alternatives --config javac
會出現底下畫面:(跟上面很相像但仔細一看是javac的版本哦)



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

  Selection    Path                                         優先級  Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-oracle/bin/javac          1062      auto mode
  1            /usr/lib/jvm/java-6-openjdk-amd64/bin/javac   1061      manual mode
  2            /usr/lib/jvm/java-7-oracle/bin/javac          1062      manual mode
* 3            /usr/lib/jvm/java/jdk1.6.0_39/bin/javac       300       manual mode

Press enter to keep the current choice[*


選擇對應的版本輸入號碼 按enter 就可以了

3.最後執行指令: java -version

java version "1.6.0_39"
Java(TM) SE Runtime Environment (build 1.6.0_39-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)

收工!
終於可以開始build 2.3.3的android了

沒有留言:

張貼留言