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环境
http://www.cnblogs.com/nikyxxx/archive/2011/11/11/2245897.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×××方法详解
http://blog.csdn.net/pku_android/article/details/7082928
2、Git和Repo扫盲——如何取得Android源代码
http://www.williamhua.com/2009/04/git-and-repo-for-dummies/
3、ubuntu 11.04下Android源码的获取
http://www.cnblogs.com/dwayne/archive/2011/11/11/2245383.html

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

http://www.cnblogs.com/dwayne/archive/2011/11/16/2250732.html
5、ubuntu 11.10下android2.2 源码获取
http://www.cnblogs.com/ouling/archive/2011/09/02/2163829.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源码
http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html
五、后记
好累,终于写完了。
哦,对了,这位的blog有些关于Android4.03系统的分析,大牛啊T^T。
MyArrow:http://blog.csdn.net/MyArrow?viewmode=contents

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

转载于:https://blog.51cto.com/vaero/796090

ubuntu 11.10下载和编译Android源码相关推荐

  1. android源码下载与编译,Android源码下载并编译

    Android源代码下载与编译 - 2020 1.下载repo工具 到清华mirror下载repo curl https://mirrors.tuna.tsinghua.edu.cn/git/git- ...

  2. Mac上下载及编译android源码

    参考: https://blog.csdn.net/u010963246/article/details/71480684 https://blog.csdn.net/qq_25333681/arti ...

  3. 【转】ubuntu 11.10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  4. Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27

    文章目录 一. 前言 二.系列文章 三. 服务器配置 3.1 Repo 工具配置 3.2 AOSP 依赖配置 四. 下载源码 4.1 下载 aosp tar ball 4.2 同步代码 4.3 切分支 ...

  5. win10最新下载编译Android源码的简易方法分享(已亲测)

    win10最新下载编译Android源码的简易方法分享(已亲测) 准备至少150G的硬盘空间 win+R 输入control 打开程序与功能-启用或关闭Windows功能 勾选"适用于Lin ...

  6. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决 参考文章: (1)Ubuntu12.04编译Android ...

  7. ubuntu 20.04编译Android源码

    一直以来想编译android源码,趁闲编译了下,ubuntu版本:20.04,android源码版本:android-9.0.0_r30.总体还比较顺畅,中间遇到了一些报错,在文中也有记录,详情见下文 ...

  8. android:自己动手编译Android源码(超详细)

    自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 4330 阅读 86819评论 89喜欢 339赞赏 7 在Android Studio代码调试一文中 ...

  9. 《深入解析Android 虚拟机》——第1章,第1.3节编译Android源码

    本节书摘来自异步社区<深入解析Android 虚拟机>一书中的第1章,第1.3节编译Android源码,作者 钟世礼,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

最新文章

  1. R语言生存分析模型简介及survival包实现实战:基于survival包lung数据集
  2. Django之重定向
  3. 20145315 《Java程序设计》第五周学习总结
  4. python百度aip移动目标监控系统_python利用百度云接口实现车牌识别
  5. 终于读完Code complete 2nd edtion
  6. 基于tensorflow框架训练超像素subpixel模型
  7. 拓端tecdat|用R对Twitter用户的编程语言语义分析
  8. 【预训练语言模型】MacBERT: Revisiting Pre-trained Models for Chinese Natural Language Processing
  9. C++中的trivial destructor和non-trivial destructor
  10. ffmpeg开发打印音视频meta信息
  11. 学嵌入式为什么要学Linux?
  12. Generative Adversarial Networks(CGAN、CycleGAN、CoGAN)
  13. 转载:[5GC]5G LAN标准解读
  14. Xunsearch迅搜项目实战经验
  15. 从本子文件名中提取本子的名字
  16. Arduino蜂鸣器与按键的结合
  17. shell编程经典案例,建议收藏
  18. h3c 链路聚合测试_H3C链路聚合
  19. matlab求失拟平方,实验三 实验报告 光纤位移传感器特性实验的数据处理
  20. RNN模型与NLP应用笔记(3):Simple RNN模型详解及完整代码实现

热门文章

  1. 内网发现,域名解析 mDNS(Arduino实现)
  2. Gui+jdbc+mysql实现图书管理
  3. 计算机二级计划总结,计算机二级细节总结
  4. jenkins自动部署windwos服务器
  5. web开发的发展历史
  6. 服务器端 OR 客户端
  7. erlang 程序设计书中的错误
  8. linux报错之no space left on device问题分析
  9. ssm中使用slf4g
  10. Python升级至2.7方法