编译Android2.3.3源码

编译android源码需要安装一些工具(Ubuntu12.10):

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" #安装jdk
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386 #安装一些工具
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
$ export USE_CCACHE=1 #使用ccache

下载源码:

$ mkdir ~/bin #创建目录
$ PATH=~/
bin:$PATH #加入环境变量PATH $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo #下载工具repo $ chmod a+x ~/bin/repo #赋执行权限 $ mkdir WORKING_DIRECTORY #创建工作目录 $ cd WORKING_DIRECTORY $ repo init -u https://android.googlesource.com/platform/manifest #checkout最新代码 或者使用下面的命令 $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 #checkout分支 $ repo sync #同步代码,这个时间比较长

android代码比较大,一般都有几G大小。下载android源码最痛苦的就是,你辛辛苦苦的下载配置完各种环境和工具,发现代码下载不了(被墙了)。我就遇到了这种情况。可以使用VPN或者代理工具来下载。我最终使用了GoAgent工具把源码下载了下来。GoAgent的使用可以参考:使用GoAgent代理 或者GoAgent官网:https://code.google.com/p/goagent/

$ source build/envsetup.sh  #初始化一些环境变量
$ lunch full-eng  #编译代码
$ sudo make -j6  #编译代码

编译完成后,运行模拟器:

$ emulator #使用默认配置
$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system ./out/target/product/generic/system.img -data ./out/target/product/generic/userdata.img -ramdisk ./out/target/product/generic/ramdisk.img #指定使用的img文件

注意:

1.编译代码的过程中遇到了一些编译错误,在网上搜索,很多人给出了各种修改文件的方法。最终发现,其实是gcc和g++的版本的问题。我编译android2.3.3源码,把gcc和g++降级到4.4,就解决了很多问题:

$ sudo apt-get install gcc-4.4 g++-4.4 gcc-multilib g++-4.4-multilib  #安装低版本gcc g++
$ cd /usr/bin
$ sudo rm gcc g++  #删除之前的链接文件
$ sudo ln -s gcc-4.4 gcc  #建立链接
$ sudo ln -s g++-4.4 g++

2.遇到如下编译错误:

host C: sqlite3 <= external/sqlite/dist/shell.c
external/sqlite/dist/shell.c:42:32: error: readline/readline.h: No such file or directory
external/sqlite/dist/shell.c:43:31: error: readline/history.h: No such file or directory
解决办法:
dpkg -l | grep readline
找出库libreadline6-dev删除
sudo apt-get remove libreadline6-dev

3.安装了Android SDK或者NDK,设置的环境变量可能会影响编译,需要在$PATH中去除SDK和NDK的路径,同时去除环境变量:

$ unset NDK_ROOT
$ unset ANDROID_SDK_ROOT

4.repo使用代理,设置环境变量:

$ export HTTP_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
$ export HTTPS_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>

参考:

http://blog.csdn.net/luoshengyang/article/details/6559955

http://source.android.com/source/building.html



—  我的个人空间 |   —