Linux/Ubuntu2009. 11. 23. 22:48

ubuntu 9.10 에서 android full source 빌드 해보자.
9.04에서와 별 다른게 없어야 하지만, java version때문에 약간의 문제가 발생하였다.

ubuntu 9.10 설치 후 아마 android sdk 사용을 위해서 sun-java6-jre, jdk package를 설치 하였나 보다.
아니면 java 1.5, 1.6 이 설치되어 있는 상태에서 9.10으로 업그레이드를 하면서, 
구패키지인 1.5가 자동으로 삭제가 되었거나..

************************************************************
You are attempting to build with the incorrect version
of java.
 
Your version is: java version "1.6.0_15".
The correct version is: 1.5.
 
Please follow the machine setup instructions at
    http://source.android.com/download
************************************************************
build/core/main.mk:111: *** stop.  멈춤.

android full src 컴파일 하기 위해서 make를 하게되면
위와 같이 ubuntu 9.10 에서 java 1.5 가 설치 되어야 한다는 경고 문구를 볼 수 있다.

java5 설치를 위해서 apt-cache search jre를 해보지만 ubuntu 9.10 저장소에서 java5 버젼의 검색이 안된다.
9.04에서는 저장소에 sun-java5-jre, jdk 버젼이 있었던것 같은데..
아무튼 java6 이하 버젼을 설치하기 위해서는 파일을 다운로드 받아서 설치하거나, 
jdk 구버젼이 존재하는 저장소를 추가하여야 한다.

참고로, jre1.5 (jre5) 를 설치하게 될 경우 emulator동작을 위한 파일은 설치가 되지만
build에 필요한 javac등이 설치되지 않으므로 jdk5를 설치해야 한다.

그럼 ubuntu에서 jdk1.5 (jdk5) 설치 하는 방법을 알아보자.

1. 저장소를 추가하는 방법
위의 글을 참고 하여 아래의 저장소를 추가 한 후 jdk5 설치 한다.(
source.list 파일은 백업)
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb 
http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

설치 완료 후에는 source.list 파일을 원복시키고 apt-get update 를 하여 karmic 주소로 다시 원복 시켜주어야 이후에 ubuntu사용에 혼란이 없을 것이다.
다음으로 아래와 같이 하여 java 1.5로의 환경 설정을 마칠 수 있다.
sudo apt-get update
$ sudo apt-get install sun-java5-jdk

$ sudo update-java-alternatives -s java-1.5.0-sun

위와 같이 하였으나 잘 되지 않으면(java, javac 등을 찾지 못할 경우)
본 글 아래의 update-alternatives 관련 내용을 참고하여
java 등 필요한 것들의 환경 설정을 변경하도록 한다.

2. 재미있게 jdk5를 직접 다운로드 받아서 설치하는 방법을 알아보자.

jre(java)만 설치하게 되면 javac, jar 등이 없으므로 아래의 jdk를 설치하자.


상기 링크를 통해 본인의 PC 환경에 맞는 파일을 선택하여 저장하도록 한다.

자동압축풀기설치를 위해서 rpm.bin 을 다운로드 받았다. rpm으로 설치를 하면 적절한 위치에 알아서 설치가 된다.
(jdk-1_5_0_22-linux-i586.bin 파일을 받았다면 설치할 폴더로(/usr/java/ 등..) 파일을 move 한 후 파일에 execute 모드를 주고 실행하면 된다.)

$chmod a+x jdk-1_5_0_22-linux-i586.rpm.bin
$sudo ./
jdk-1_5_0_22-linux-i586.rpm.bin

와 같이 실행하면 라이센스에 대한 문구가 출력이 된다.
space 키 입력하면서 모두 읽고나서 마지막으로 yes를 입력하여 확인 하고 나면
jdk-1_5_0_22-linux-i586.rpm 파일이 생성된다.

ubuntu에서는 rpm을 ubuntu용 설치 패키지 파일인 deb 포맷으로 변환해서 설치를 하여야 한다.

rpm to deb 로 변환을 위해서는 alien을 설치해야 한다.

$sudo apt-get install alien

alien 설치가 완료되었다면
deb로 변환해보자.

$sudo alien -c jdk-1_5_0_22-linux-i586.rpm

변환이 완료되면 jdk-1_5_0_22-linux-i586.deb 파일이 생성이 된다.

그럼 dpkg를 이용하여 최종 설치를 하면된다.

$ sudo dpkg -i jdk_1.5.0_22-1_i386.deb
전에 선택하지 않은 jre 패키지를 선택합니다.
(데이터베이스 읽는중 ...현재 129261개의 파일과 디렉토리가 설치되어 있습니다.)
jre 패키지를 푸는 중입니다 (jre_1.5.0_21-1_i386.deb에서) ...
jre (1.5.0_21-1) 설정하는 중입니다 ...
/usr/java/jdk1.5.0_22

위의 디렉토리로 패키지의 설치를 마쳤다.

마지막으로 java 1.5로 각 링크들을 변경하기 위해 아래와 같이 입력한다.
java 와 같이 기존에는 설치가 되어 있는 것들은 --config을 통해서 
selection을 변경해주어야 한다.

그 이외 javac, jar, javah 와 같이 jdk를 통해 새로 설치된 것들을 install

$sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.5.0_22/jre/bin/java" 1
$sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                  Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-6-sun/jre/bin/java   63        auto mode
* 1            /usr/java/jre1.5.0_21/bin/java         1         manual mode
  2            /usr/lib/jvm/java-6-sun/jre/bin/java   63        manual mode

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

$sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk1.5.0_22/bin/javac" 63
$sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/java/jdk1.5.0_22/bin/jar" 63
$sudo update-alternatives --install "/usr/bin/javah" "javah" "/usr/java/jdk1.5.0_22/bin/javah" 63
$sudo update-alternatives --install "/usr/bin/javadoc" "javadoc" "/usr/java/jdk1.5.0_22/bin/javadoc" 63

update-alternatives 명령을 이용해 java, javac 등 의 링크를 새로 설치한 것으로 수정했다.

참고로 update-alternatives의 help를 보면 아래와 같다.
  --install <link> <name> <path> <priority>
<priority> is an integer; options with higher numbers have higher priority in
  automatic mode.
위의 예에서는 4번째 파라메터에 1 값을 주었는데 만약 64값을 주게 되면 auto mode에서도 알아서 /usr/java/jdk1.5.0_22/jre/bin/java 
로 링크가 될 것 같다.


그리고 user home 에서 .bashrc 파일을 열어서 아래와 같이 JAVA_HOME을 설정하자.
*주의  =(equal) 앞뒤로 space는 허락하지 않는다.

$cd ~
$gedit .bashrc

# set PATH
export JAVA_HOME=/usr/java/jdk1.5.0_22/bin
export ANDROID_JAVA_HOME=$JAVA_HOME


파일 저장 후 편집한 bashrc를 아래와 같이 source를 이용하여 환경에 바로 적용하자.

$cd ~
$source .bashrc


설정한 JAVA_HOME이 적용되었는지 확인

$echo $JAVA_HOME
/usr/java/jdk1.5.0_22

마지막으로 모두 제대로 설정되었는지 확인.

$which java
/usr/bin/java
$java -version
java version "1.5.0_21"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_21-b01)
Java HotSpot(TM) Client VM (build 1.5.0_21-b01, mixed mode, sharing)
$which javac
/usr/bin/javac
$which jar
/usr/bin/jar
$which jar
/usr/bin/jar
$which javah
/usr/bin/javah

apt-get으로 설치 했을 경우에는 update-alternatives 를 사용할 필요가 없었는데,
dpkg -i deb로 설치를 하니 할일이 참 많다.
java, javac, jar, javah, javadoc 등이 모두 설치 되었음을 확실히 해야 한다.

여기까지 하였다면 다시 make를 하면 정상적으로 빌드가 시작된다.

비슷한 문제로 고민하는 이들이 있군요.
Posted by ekwang