2010年12月26日 星期日

Get Android Source Code and Setup the Build Environment

2010/12/17的一則消息:"Android 2.3 Gingerbread's source code now available", 從2.2開始, 其實預設就是用64bit OS來build, 之前為了不想重灌Linux, 在網路上找了許多如何在32bit OS上build code的方法, 花了不少時間才把froyo放上s3c6410, 但是仔細想想這樣好像也沒有比較厲害 , 這次還是乖乖照google建議的, 在64bit OS上build android. 為了怕日後換電腦, 又要全部重來一次, 把過程作個紀錄

1. Prepare
先裝些基本的工具與設定

1.1 apt-get
若需要設定proxy, 在/etc/apt/apt.conf.d/01xxxxx裡面加上proxy資訊
APT
{
    ......
}
Acquire::Http::Proxy "http://your_http_proxy:port";
#Acquire::Ftp::Proxy "ftp://your_ftp_proxy:port";
更新apt-get資料庫
sudo apt-get update
接著作個方便的alias
alias apt-install 'sudo apt-get -y install'

1.2 git
安裝git
apt-install git-core

p.s. 若無法直接連線, 需要透過proxy去避開firewall的話
先用apt-get裝"connect-proxy" (一般的狀況下, 不需要用到這個)
apt-install connect-proxy
接著寫個給git用的proxy script
my-git-proxy
#!/bin/sh
# You can get proxy from http://spys.ru/free-proxy-list/TW/
PROXY=IP:Port
connect-proxy -H http://$PROXY $@
設定git透過proxy連線
git config --global core.gitproxy ~/my-git-proxy

2. Required Packages
AOSP上面提到的一些必要安裝
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl valgrind sun-java6-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
各個套件的功用, 可參考"ubuntu 9.04安裝Android注意事項"與"Build Android Platform"

其中裝JDK1.6時, 可能需要新增apt-get的source list
/etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
接著再更新一下apt-get
sudo apt-get update
apt-install sun-java6-jdk
JDK安裝完後, 將相關的資訊export到環境變數裡
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export PATH=/usr/lib/jvm/java-6-sun/bin:$PATH
export ANDROID_JAVA_HOME=$JAVA_HOME

[註] Java版本相關指令
查版本:java -version
列出已安裝版本:sudo update-java-alternatives -l
切換Java版本:sudo update-java-alternatives -s java-x-sun

3. Download Android Source Code
Download source code 只要照AOSP上面教的即可
curl http://android.git.kernel.org/repo >~/repo
chmod a+x ~/bin/repo
mkdir mydroid
cd mydroid
~/repo init -u git://android.git.kernel.org/platform/manifest.git
~/repo sync

4. Build Android
build code可以直接下make
make -j4
若是之後可能開發自己的product的話, 可以準備一個script
#!/bin/bash

function show_result()
{
        echo ""
        echo "#######################################################"
        echo " $1"
        echo "#######################################################"
        echo ""
}

CWD=$PWD
ANDROID_PATH=$CWD/my_android

export TARGET_PRODUCT=generic
export TARGET_BUILD_TYPE=release
export TARGET_BUILD_VARIANT=eng
export TARGET_SIMULATOR=false

cd ${ANDROID_PATH}

if ( make -j4 ); then
        show_result "Build Android Successfully!!"
        exit 0
else
        show_result "Build Android Failure!!"
        exit 1
fi
換成Ubuntu64順利很多, 只碰到一個error
make: *** [out/target/product/generic/obj/ SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] Error 1
拜了一下Google大神, 多數的說法都是開給VMware的記憶體不夠所造成, 照著網路上的作法先試著將swap加大後,
dd if=/dev/zero of=/swapfile bs=1024 count=1048576
mkswap /swapfile
swapon /swapfile
再加上相當長的build code時間, 總算成功得到android image了


參考資料:
[1] Android Open Source Project
[2] Build Android Platform
[3] Android获取源代码、编译、命令

沒有留言:

張貼留言