ㅈㅅㄹ

네이버에서 적던거 마저 들고 와서 적어본다.

커스텀 안드로이드 SDK 를 만들 필요가 생겨서 안드로이드 소스 들고와서 몇 가지 수정하고 컴파일 해서 내부에 릴리즈했다.  첫번째 글을 쓴 지도 시간이 꽤 지나서 어느정도 헷갈리긴 하지만 -_- 그 과정에 대해 얘기해 볼까 한다.

일단 안드로이드 소스는 http://source.android.com/download에서 다운로드 받는 방법에 관한 설명이 있다. 작업 환경은 Ubuntu 9.10 32bit (정확히 말해서 9.04에서 패키지 업글한 놈)이므로 그에 관련한 사항만 긁어와 보면 :

Setting up your machine

To build the Android source files, you will need to use Linux or Mac OS. Building under Windows is not currently supported.

Linux

TheAndroid build is routinely tested on recent versions of Ubuntu (6.06 and later), but reports of successes or failures on other distributions are welcome.

Ubuntu Linux (32-bit x86)

To set up your Linux development environment, make sure you have the following:
  • Required Packages:
    • Git 1.5.4 or newer and the GNU Privacy Guard.
    • JDK 5.0, update 12 or higher.  Java 6 is not supported, because of incompatibilities with @Override.
    • flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev (optional), build-essential, zip, curl.  
$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
  • You might also want Valgrind, a tool that will help you find memory leaks, stack corruption, array bounds overflows, etc. 
$ sudo apt-get install valgrind
  • Intrepid (8.10) users may need a newer version of libreadline:
$ sudo apt-get install lib32readline5-dev




Installing Repo

Repo is a tool that makes it easier to work with Git in the context of Android. For more information about Repo, see Using Repo and Git.

To install, initialize, and configure Repo, follow these steps:

  1. Make sure you have a ~/bin directory in your home directory, and check to be sure that this bin directory is in your path:
      $ cd ~
      $ mkdir bin
      $ echo $PATH
  2. Download the repo script and make sure it is executable:
    $ curl https://android.git.kernel.org/repo >~/bin/repo
    $ chmod a+x ~/bin/repo


Initializing a Repo client

  1. Create an empty directory to hold your working files:
    $ mkdir mydroid
    $ cd mydroid
  2. Run repo init to bring down the latest version of Repo with all its most recent bug fixes. You must specify a URL for the manifest:
    $ repo init -u git://android.git.kernel.org/platform/manifest.git
    • If you would like to check out a branch other than "master", specify it with -b, like:
      $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
  3. Whenprompted, configure Repo with your real name and email address. If youplan to submit code, use an email address that is associated with a Google account.
A successful initialization will end with a message such as
   repo initialized in /mydroid


Your client directory should now contain a .repo directory where files such as the manifest will be kept.

What will my name and email be used for? 

To use the Gerrit code-review tool,
you will need an email address that is connected with a registered Google account (which does not have to be a Gmail address). Make sure this is a live address at which you can receive messages. The real name that you provide here will show up in attributions for your code submissions.

What is a manifest file?

The Android source files are divided among a number of different repositories. A manifest file contains a mapping of where the files from these repositories will be placed within your working directory when you synchronize your files.


Getting the files

To pull down files to your working directory from the repositories as specified in the default manifest, run

   $ repo sync 

For more about repo sync and other Repo commands, see Using Repo and Git.

The Android source files will be located in your working directory under their project names.



실제로 설치 과정은 간단하다. 다만 세상일이 그닥 쉬운 일이 없는게 항상 뭔가 하라는대로 해도 잘 안되는 법이다. 일단 Ubuntu 9.10에서 JDK 1.6을 기본 버전으로 잡는게 문제인데 안드로이드 소스에선 Override관련 처리하는 방식이 다르던가 어쩌던가 해서 1.5 버전만을 지원한다. 따로 JDK를 깔까 생각도 해보았으나 그러기엔 너무도 귀찮고 다행히 http://skyswim42.egloos.com/3429546의 글을 찾아서 소프트웨어 소스를 9.04 기준으로 맞추고 까는 방법으로 해결했다.

위 링크의 방법대로 source.list를 직접 수정해도 되긴 하지만 쉘에서 다음의 명령어를 실행하거나 Gnome 데스크탑의 메뉴에서 시스템/관리/소프트웨어 소스를 실행하여서 소프트웨어 소스 설정을 띄운다.

  $ sudo software-properties-gtk

그 후 기타 소프트웨어 탭에서 추가 버튼을 누르고 deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse 를 입력해서 9.04로 맞춘 다음 apt-get으로 sun-java5-sdk를 설치하면 되겠다. 물론 이후 시스템의 의존성 트리가 쑥대밭이 되는 걸 원치 않는다면 jdk 설치가 끝난다음 소프트웨어 소스 설정을 다시 실행해서 추가된 9.04 소스에서 체크를 해제하여 더 이상 사용하지 않게 할 필요가 있겠다.

이제 위의 설명대로 repo를 만들고 소스를 다운받으면 될텐데, 마스터 버전이 막 왔다갔다 하는지 맨 처음에 받았을 땐 2.1 AOSP 버전을 받더니 한 2주쯤 지나서 받으니 eclair를 받던가 그래서 아예 -b 옵션을 주고 특정 태그의 버전을 받았다. 아마 그 편이 속편할거라 생각한다.

$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.1-r2

그 후 sync 해주면 일단 받는 건 끝.

빌드하는데는 크게 문제점이 없었다.  소스 최상위 폴더에서 :

$ make PRODUCT-sdk-sdk

를 입력해서 빌드해 주면 되고 빌드한 SDK는 out/host/linux-x86/sdk 아래에 위치하게 된다. (다른 OS면 linux-x86 대신에 다른 곳이겠고...)

이제 빌드한 Android SDK를 사용해보자. 일단 다음의 명령으로 android SDK의 tools 폴더를 path에 추가하자:

$ echo 'export PATH=$PATH:/[안드로이드 소스 폴더]/out/host/linux-x86/android-sdk_eng.[계정명]_linux-x86/tools' >> ~/.profile

물론 위의 경우는 bash를 쓸 때이다. 설정한 경로는 다음번 로그인 때 적용되며 지금 당장 저 설정을 적용하고 싶다면 :

$ . ~/.profile

를 실행하면 된다. 나머지 사항은 http://developer.android.com/sdk/installing.html의 가이드를 따라서 하면 되겠다.

추가로 빌드 한 SDK를 설치하고 나서 Asset 사이즈가 너무 크다는 오류가 나는 경우가 있는데 이건 framework/base/include/utils/Asset.h에서

    enum {
        /* data larger than this does not get uncompressed into a buffer */
#ifdef HAVE_ANDROID_OS
        UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024
#else
        UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024
#endif
    };

를 찾아 둘 다 3 * 1024 * 1024로 바꿔주면 된다.