2012년 9월 22일 토요일

android를 좀더 빨리 빌드하는 방법

안드로이드는 build 시간이 상당히 오래걸리는 build 구조를 가지고 있다.

성능좋은 build server를 가지고 있어도 사람의 욕구상 좀 더 빠른 빌드를 하고싶은게 당연하다.

따라서 source.android.com에서는 ccache를 이용한 faster build 방법을 소개하고있다.


ccache는 자주 빌드되는 c파일들을 default로 로컬에 caching 해 놓고 사용하는 방식이다

build 하기 전에 아래와 같이 설정해주면 build 시 ccache를 사용하게 된다.


$ export USE_CCACHE=1
$ export CCACHE_DIR=~/.ccache
# android 소스 안에 이미 ccache 실행 파일이 들어있다. source의 root tree 에서 하면된다.
$ prebuilt/linux-x86/ccache/ccache -M 20G

ubuntu 12.04 버전에서 java6 깔기 (android 빌드환경 구성)

android build 를 하기위해  java6를 깔아야 한다. (정확히 sun-java6-jdk)

그러나 sun-java6가 ubuntu의 package에서 빠진지 한참된데다 이젠 아에 dependency까지 언급하면서 ppa에서도 안깔린다..ㅜㅜ

그래서 구글링으로 찾은결과..

github(https://github.com/flexiondotorg/oab-java6)에 공개된 script 발견~!

script를 사용하니 깔린다...(감격~~T^T)

아래대로 하면 된다.

$ wget https://raw.github.com/flexiondotorg/oab-java6/master/oab-java.sh
$ chmod a+x oab-java.sh
$ sudo ./oab-java.sh
$ sudo apt-get install sun-java6-jdk
# 아래 명령으로 default로 설정된 openjdk에서 sun-java6로 변경
$ sudo update-alternatives --config java

아래 명령으로 정상적으로 java가 바뀌었는지 확인

$ java -version
$ javac -version

2012년 9월 13일 목요일

SystemError: ../Objects/stringobject.c:4271: bad argument to internal function

android를 빌드하다 보면 아래와 같이 build error가 날때가 있다.

아래 build error는 zlib를 쓰는 python의 자체 에러로 이미 python issue tracker에 report 되어 있었다. (참조 : http://bugs.python.org/issue8571 )





Traceback (most recent call last):
  File "./build/tools/releasetools/img_from_target_files", line 234, in
    main(sys.argv[1:])
  File "./build/tools/releasetools/img_from_target_files", line 220, in main
    AddSystem(output_zip)
  File "./build/tools/releasetools/img_from_target_files", line 172, in AddSystem
    common.ZipWriteStr(output_zip, "system.img" + post_fs_type, data)
  File "/home/kyunam.jo/build/tools/releasetools/common.py", line 658, in ZipWriteStr
    zip.writestr(zinfo, data)
  File "/usr/lib/python2.6/zipfile.py", line 1106, in writestr
    bytes = co.compress(bytes) + co.flush()
SystemError: ../Objects/stringobject.c:4271: bad argument to internal function



아마 대부분 ubuntu 10.04 버전의 build server를 사용한다면 발생하는 에러로 이는 ubuntu 10.04에 default로 들어간 python의 버전이 2.6.5이기 때문이다. 

해당 버전은 2.6.5 버전 이후 2010년 5월 8일에 fix되어 반영됬으며 이는 아래 링크를 보면 확인 가능하다. 

2012년 9월 13일에 최신 버전인 2.6.8버전의 source code(http://www.python.org/download/releases/2.6.8/) 에서 확인결과 해당 patch가 반영되어 있음을 확인하였다. 

따라서 위와 같은 build error 가 발생할 경우 python을 최신으로 버전업하기 바란다.

그렇다고 python3으로 버전업은 조금 지양한다. (구문이 좀 달라진게 있으므로...^^)