您的位置:首页 > 移动开发 > Android开发

ubuntu 11.10下载和编译Android源码

2012-05-22 11:04 507 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/article/4571583.html

ubuntu 11.10下载和编译Android源码

由衷感谢网上的各个博主的文章,给了小弟我莫大的帮助。这里呢,小弟也把自己的经历记录下来,以供大家参考^^。这篇应该算是零基础、从无到有的流程介绍了。

由于是事后写这篇文章,算是总结吧,可能会遗漏一些东西,但我会尽力写清楚的!

一、安装ubuntu 11.10

官方很照顾我们啊,还专门有中文的下载链接,而且在“4)安装程序”内将步骤也阐述的非常清晰明了,照着做就行了。

官方网址(下载&安装):http://www.ubuntu.com/download/ubuntu/download-zh

1)我的ubuntu

单系统,总320G,分区:/,50G;swap,1G?;/home:其余。

1、swap不记得是1G还是2G了,多方资料查说不建议超过2G,总之我是照办了。更权威点的是:if (M<2) S=M*2 else S=M+2。M->RAM、S->swap。(执行sudo fdisk –l查了分区,那串数字是位数么T^T)

2、至于分区时这些挂载点的意义,只需Google下“Linux 挂载点”就成。

更多有关ubuntu的东西,可以去ubuntu中文找找(http://forum.ubuntu.org.cn/及其Wiki标签)。

2)快捷操作

1、复制&粘贴(最快捷的):鼠标左键选中即复制,鼠标中间按下去即粘贴。

2、Alt+F10:窗口最大化;Alt+F5:窗口恢复;Alt+F9:窗口最小化;更多:系统设置->键盘->快捷键。

3、Ctrl+Alt+T:打开终端(这个最重要了)

3)shell命令

注意$前~表示用户目录开始(即/home/<user name>),而/是系统目录开始。执行pwd可查看当前工作目录。

还有Tab键自动补全路径,上下方向浏览之前的命令等。和windows下类似,这些都能加快我的效率。(有点废话==)

具体步骤内shell命令的作用都会简单注明,更多请参见附件《Linux命令大全(修改版).chm》^^。

二、SDK集成开发环境

搭建过程和Windows下类似。注意:Eclispe最好从官网下载,不要用下载中心的,需要添加Eclispe版本更新源什么的。(我一开始是用应用中心下载的Eclispe,一些问题也解决了,但更新下载时在某处卡住,试了多次后,流泪奔向了官方的怀抱T^T)

需要搭建的请挪至:http://my.oschina.net/taskiller/blog/38849?catalog=136911

三、Android源码下载

我下载和编译的是2.3.3_r1和4.0.3_r1两个版本的源码。之前有弄2.2的,但是一直下载不下来,伤心T^T(关了部分服务器的原因么?)。补充一点:2.2及之前的需要JDK5。

1)更新ubuntu源为网易源

为了下载速度,更新下比较好,至少也可以心里安慰下自己吗。(虽然我是后来更新的,但没比较前后效果==)

1、sudo –s(superuser do,提至root权限,exit退出)

2、cp /etc/apt/sources.list /etc/apt/sources.list.bak(copy,备份下文件)

3、gedit /etc/apt/sources.list(编辑源列表。gedit,默认的文档编辑器)

deb http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiverse

deb-src http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiverse

deb http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ oneiric-security universe main multiverse restricted

deb http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricted

deb http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ oneiric-proposed universe main multiverse restricted

deb http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ oneiric-backports universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ oneiric-updates universe main multiverse restricted

4、apt-get update(更新源地址)

更多Ubuntu 11.10 更新源地址列表:http://bolg.malu.me/wap/index-wap2.php?p=1190

2)安装JDK6

应用中心只有OpenJDK,不记得默认是否安装了==。这个倒是不影响源码下载,但是在编译的某步会报缺少tool.jar的错误(jdk lib内的包)。

1、下载jdk&jre(jre可不需要)

不需要用jdk7,以下是Java 6u29版本的相关地址。

jdk-6u29:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html

jre-6u29:http://www.oracle.com/technetwork/java/javase/downloads/jre-6u29-download-513650.html

2、创建/usr/lib/jvm/java目录,并把下载的xxx.bin文件移到该目录。

sudo -s(或者在下述命令前加sudo,否则是动不了usr/lib下东西的)

cd /usr/lib(进入/usr/lib)

mkdir jvm(没有jvm,就这样创建)

cd jvm(进入/usr/lib/jvm)

mkdir java(没有java,就再创建)

mv 文件绝对路径 /usr/lib/jvm/java(移动文件至/usr/lib/jvm/java)

如:sudo mv ~/下载/jdk-6u29-linux-i586.bin /usr/lib/jvm/java

3、安装jdk(配环境变量等)

cd /usr/lib/jvm/java(说明是在该目录下罢了)

chmod +x jdk-6u29-linux-i586.bin(增加可执行权限)

Linux权限的解释:http://www.artms.cn/article.asp?id=925,汗颜啊==

./ jdk-6u29-linux-i586.bin(执行文件,会将jdk解压至当前文件夹)

gedit /etc/environment(修改变量)

用vi的话,最好先在文本编辑好。:d删除当前那行,:i把复制内容输进去

PATH=”……:$JAVA_HOME/bin”(……为原PATH)

CLASSPATH=”.:$ JAVA_HOME/lib”

JAVA_HOME=”/usr/lib/jvm/java/jdk1.6.0_29”

source ~/.bashrc(设置变量)

update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_29/bin/java 300

update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_29/bin/javac 300

(安装jdk至java选单)

update-alternatives --config java(选择默认jdk)

java –version(确认查看版本)

更多参考网址:

1、ubuntu安装jdk全过程(仅供参考)

http://forum.ubuntu.org.cn/viewtopic.php?t=183803

2、ubuntu 11.10 安装 java环境

/article/5177688.html

3)安装开发包

具体什么不管了,当时执行的是这个^^。

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown libxml2-utils lib64z1-dev libc6-dev-amd64 g++-multilib
lib64stdc++6

4)下载源码

以下载android-4.0.3_r1至/home/<user name>/env/android_src/4.0.3_r1目录下为例。

cd ~/env/android_src/4.0.3_r1/(进入该目录,没有就mkdir)

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >repo(创建repo文件)

sudo chmod a+x repo(增加可执行权限)

./repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1(初始化版本库为支线上的android-4.0.3_r1版本)

Your Name [<user name>]:(会跳至这个,要求输入用户名,随意)

Your Email [<user name>@xxx]:(继续要求输入邮箱,随意)

Your identity is: xxx xxx

is this correct [y/N]? y(确认用户名、邮箱)

repo initialized in /home/join/env/android_src/4.0.3_r1(初始化完毕的提示)

./repo sync(同步版本库,即开始下载)

1、遇到异常时重执行./repo sync,卡主时先Ctrl+C中断再执行./repo sync,继续下载。

2、中断会造成no repository什么的,再次中断并把提示的目录删除再继续./repo sync。

总之,最后会是统计,然后一列100% done,就OK了。

想下载其他指定版本的源码,我是在初始化版本库时故意打错再查看的==。如:./repo init -u https://android.googlesource.com/platform/manifest -b xxx,然后找支线名称(repo没去了解,就这么用了-_-!)。一般具体到哪个发布版本,XXX用发布的版本别名代替就好,都是小写。

问题追加^^

1)DownloadError: android.googlesource.com: <urlopen error [Errno 110] Connection timed out>

解决方式简述如下(执行上述步骤前,已执行过,则删除重来):

1.打开https://android.googlesource.com/new-password,gmail账号登录

2.点击“允许访问”,得到一串信息,加入至~/.netrc。

3.执行上述下载步骤,不过有条命令要做下修改,具体如下:

原:./repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1

新:./repo init -u https://android.googlesource.com/a/platform/manifest -b android-4.0.3_r1

详细请见网址:http://www.haogongju.net/art/1428426

5)参考网址

1、Android源码下载方法详解

/article/2777472.html

2、Git和Repo扫盲——如何取得Android源代码

http://www.williamhua.com/2009/04/git-and-repo-for-dummies/

3、ubuntu 11.04下Android源码的获取

/article/6972191.html

4、ubuntu 11.04+获取Android源码(补充篇)

/article/6972192.html

5、ubuntu 11.10下android2.2 源码获取

/article/5543772.html

四、Android源码编译

4.0.3_r1在32位下直接编译就ok了,但2.3.3_r1配置的是64位的,还要改写东西才成。

1)安装软件包

好吧,我这里又执行了一遍乱七八糟的东西-_-!好像还是多安装了几样的。

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown libxml2-utils xsltproc

2)配置USB权限

不知道不配有什么影响==。

sudo gedit /etc/udev/rules.d/51-android.rules

# adb protocol on passion (Nexus One)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"

# fastboot protocol on passion (Nexus One)

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"

# adb protocol on crespo/crespo4g (Nexus S)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"

# fastboot protocol on crespo/crespo4g (Nexus S)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"

# adb protocol on stingray/wingray (Xoom)

SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"

# fastboot protocol on stingray/wingray (Xoom)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"

# adb protocol on maguro/toro (Galaxy Nexus)

SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"

# fastboot protocol on maguro/toro (Galaxy Nexus)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"

# adb protocol on panda (PandaBoard)

SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"

# fastboot protocol on panda (PandaBoard)

SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"

需要将"<username>"替换成当前用户名。

3)配置ccache

可以不必配置,而且不知道到底有效了没==。

gedit ~/.bashrc(添加用户环境变量,注销重登)

export USE_CCACHE=1

cd ~/env/android_src/4.0.3_r1/(进入源码目录)

prebuilt/linux-x86/ccache/ccache -M 50G(设置ccache缓存上限)

到这先看下有效不,不行的话再按下面的步骤执行。我当时是倒过来的,不确定上述可不可行==。

sudo apt-get install ccache(下载ccache)

mkdir ~/.bin(创建.bin文件)

cd ~/.bin/(进入.bin文件)

which ccache(确认安装在/usr/bin/ccache)

ln -s /usr/bin/ccache gcc

ln -s /usr/bin/ccache g++

ln -s /usr/bin/ccache arm-linux-gcc

ln -s /usr/bin/ccache arm-linux-g++

(重新链接各编译命令)

gedit ~/.bashrc(行尾添加如下环境变量配置,注销重登)

export USE_CCACHE=1

export PATH="/home/<user name>/.bin:$PATH"。

which arm-linux-gcc(确认链接至/home/<user name>/.bin/arm-linux-gcc)

ccache –M 50G(设置ccache缓存上限)

然后又在执行的prebuilt/linux-x86/ccache/ccache -M 50G。(好像很ok的样子==)

1、ccache ubuntu配置

http://www.cppblog.com/baby-fly/archive/2011/03/31/143133.html

4)gcc&g++换较低版本

说是原版本编译4.0.3会有错误,要怎么怎么样。我没试,直接换低版本了==

sudo apt-get install gcc-4.4(安装gcc-4.4)

sudo apt-get install g++-4.4(安装g++-4.4)

cd /usr/bin(进入/usr/bin)

ls -l gcc*(查看文件详细信息,gcc*过滤用,结果显示gcc->gcc4.6)

sudo mv gcc gcc.bak(将gcc备份)

sudo ln -s gcc-4.4 gcc(链接gcc4.4至gcc)

ls -l gcc*(再次查看确认,这时gcc->gcc4.4)

ls -l g++*(查看文件详细信息,g++*过滤用,结果显示g++->g++4.6)

sudo mv g++ g++.bak(将g++备份)

sudo ln -s g++-4.4 g++(链接g++4.4至g++)

ls -l g++*(再次查看确认,这时g++->g++4.4)

gcc –v(确认版本)

g++ -v(确认版本,多虑症的孩子T^T)

5)编译源码

cd ~/env/android_src/4.0.3_r1/(进入源码目录)

source build/envsetup.sh(初始化安装环境)

lunch full-eng(选择编译目标)

make –j4(开始编译,4表示线程数,为内核总数或其两倍)

1、如果还是open-jdk,source build/envsetup.sh时会提示找不到tool.jar

(或者是因为CLASSPATH没配的原因?我就是在这步才换的sun-jdk==)

2、lunch为python-lunch什么的,没装的话会提示安装的

3、未执行好source build/envsetup.sh,full-eng会提示找不到

2.3.3_r1这样编译时提示需要64位系统==。这时我们需要改写配置,如下:

cd ~/env/android_src/2.3.3_r1/(进入源码目录)

gedit build/core/main.mk(编辑main.mk)



ifneq (64,$(findstring 64,$(build_arch)))

修改为

ifneq (i686,$(findstring i686,$(build_arch)))

继续依次修改以下文件:

external/clearsilver/cgi/Android.mk

external/clearsilver/java-jni/Android.mk

external/clearsilver/util/Android.mk

external/clearsilver/cs/Android.mk



LOCAL_CFLAGS += -m64

LOCAL_LDFLAGS += -m64

修改为

LOCAL_CFLAGS += -m32

LOCAL_LDFLAGS += -m32

进而再执行开始描述的命令。

编译完成后,会提示在out目录下生成了system.img。至于其他问题、启动我们编译的系统,参见网址吧^^。

6)参考网址

1、Ubuntu11.10下编译android源码4.0.3

http://taskiller.tk/archives/860

2、ubuntu 11.10(32位系统)下编译android源码

/article/6972193.html

五、后记

好累,终于写完了。

哦,对了,这位的blog有些关于Android4.03系统的分析,大牛啊T^T。

MyArrow:http://blog.csdn.net/MyArrow?viewmode=contents

ps:下篇《使用Eclispe进行Android系统应用的开发和调试

本文出自
-_--___---_-
博客,请务必保留此出处/article/4571583.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: