Ubuntu12.04下载Android4.0.1源码全过程,附若干问题解决[转]
学校里一直在做应用层开发,考虑到日后就业问题,这次决定研究源码和驱动,并进行编译。没想到就下载源码这一步折腾了我整整两天,期间遇到很多问题,哎,记录于此,希望日后再下源码的人不要再走无谓的弯路了。事实上可以在这里http://zhu.im/Android/下载源码,但是google推荐用repo来下载,为了多学东西就学下repo吧,毕竟下现成的也太么含量了。最初我参考的是老罗的博客http://blog.csdn.net/luoshengyang/article/details/6559955
进行下载安装的,但弄着弄着就发现不太对劲了。这里记录下详细过程:
1,我的前提是已经搭建好了Android开发环境,也即jdk已经安装好了,输入java -version来检查是否成功。搭建android开发环境可以看链接1和链接2.
2,首先要安装git工具,而repo是基于git的。同时要安装所需的若干软件,命令如下:
sudo apt-get install git-coreflex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curlvalgrind
最后的valgrind是为了编译时用,一次安完了省事。如果是为了下载源码,只需安装curl和git-core就足够了。curl是一个利用URL语法在命令行方式下工作的文件 传输工具,它支持很多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,我们需要安装它从网络 上获取Repo脚本文件。然后curl就用不到了。repo是基于git的,git是一个分布式版本控制软件。由于android源码是由很多个部分组成的,如果用git的话需要多次git clone。为此google提供了repo,其实质就是若干个git命令写的脚本。这是curl git repo三者之间的关系。关于repo和git的使用,可以参考这里:
(1),http://blog.chinaunix.net/uid-20780196-id-3171133.html
(2),http://www.cnblogs.com/pied/archive/2012/04/12/2444159.html
(3),http://blog.sina.com.cn/s/blog_8218aa3801013ady.html
(4),http://zhidao.baidu.com/question/466204880.html
3,利用curl下载repo脚本
在普通用户下登录,不是root。这时~表示/home/xxx/的目录,在~下新建一个bin文件夹,用来放下载的repo脚本。参考android的官方指导文档http://source.android.com/source/downloading.html,然后将~/bin目录添加到PATH。方法为sudo gedit /etc/profile, 然后添加 PATH=$PATH:~/bin 保存关闭后,再终端输入source /etc/profile使设置生效。事实上这里也可以用绝对路径来写死,/home/xxx/bin 需要注意的是,这一切都是在普通用户下,如果以root用户登录,~表示的是/root文件夹。所以此次下载android源码一律是普通用户,不要随便切换。因为里面的~在普通用户和root用户下表示的地方不一样。如果用绝对路径写死则无此问题。
然后终端输入:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
用这条命令下载repo脚本到刚建的bin文件夹。
老罗的博客里的命令是:wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo 用的是wget,应该也可以。我用的是上面的curl命令。然后chmod a+x ~/bin/repo为其增加可执行权限。
4,新建一个文件夹,即是repo的工作空间,将源码下载到此处。我新建的目录是/home/administrator/document/androidSource. cd到这个目录下,要确保这个目录一般用户可以访问读写。
然后就要用repo init命令来初始化repo了,如果输入:
repo init -u https://android.googlesource.com/platform/manifest
则是让repo下载最新的android源码。一般我们可以通过-b参数指定下载的android版本,输入:
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
则是让repo下载4.0.1的源码,也可以用-b Jelly Bean来指定android的版本,具体可以参考:http://source.android.com/source/initializing.html
和http://source.android.com/source/build-numbers.html,尤其是第二个链接来选定版本号比较好。
如果输入上面的repo init .................xxx,再进入下一步骤虽然可以下载源码,但是下载中间会出现如下报错:
[html]view plaincopy
error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/manifest/info/refs
fatal: HTTP request failed
error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/manifest/info/refs
fatal: HTTP request failed
Fetching projects: 9% (20/221) error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/external/bison/info/refs
fatal: HTTP request failed
Fetching projects: 10% (23/221) error: Failed to connect to 2404:6800:4008:c01::52: Network is unreachable while accessing https://android.googlesource.com/platform/external/apache-xml/info/refs
fatal: HTTP request failed
error: Failed to connect to 2404:6800:4008:c01::52: Network is unreachable while accessing https://android.googlesource.com/platform/external/astl/info/refs
fatal: HTTP request failed
error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/external/bluetooth/glib/info/refs
fatal: HTTP request failed
error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/external/astl/info/refs
fatal: HTTP request failed
Fetching projects: 11% (25/221) error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/external/apache-xml/info/refs
错误的核心就是 error android.googlesource.com/platform/manifest/info/refs,百度一下参考这里:http://www.rosoo.net/a/201302/16504.html 这是google防止匿名访问连接次数过多而设置的。
解决方法是:浏览器登录https://android.googlesource.com/new-password,输入自己的gmail帐号,点击网页上的“确定”或“允许访问”会得到如下信息(我只找到了确定按键):
[html]view plaincopy
Login for Git:
Username: git-yanzi1225627.gmail.com
Password: 1/IwTl_VomaQWIk0I4gRjdDL5SybS8MGDv15Cb0bLonMg
Staying Authenticated:
To stay authenticated by saving the password, append the following line to the ~/.netrc configuration file:
machine android.googlesource.com login git-yanzi1225627.gmail.com password 1/IwTl_VomaQWIk0I4gRjdDL5SybS8MGDv15Cb0bLonMg machine android-review.googlesource.com login git-yanzi1225627.gmail.com password 1/IwTl_VomaQWIk0I4gRjdDL5SybS8MGDv15Cb0bLonMg
Make sure you have set the permissions on ~/.netrc so that only your user account can read the file. If your home directory is on a network filesystem, consider moving it to a local disk and making ~/
.netrc a symbolic link to the local version.
新建一个.netrc文件,gedit ~/.netrc,如果有的话就不用新建了。在linux里前面有个"."表示这个文件是隐藏文件。在里面输入machine开头的两行话保存即可。 5,开始同步源码前的修改,就这个地方我摸了两天 参考文章http://blog.csdn.net/lengxibo/article/details/8299888#reply 原来是需要改/etc/hosts, 终端输入ping www.googlesource.com或ping android.googlesource.com,得到IP是www.googlesource.com和android.googlesource.com的IP, 我的电脑上两个IP都是74.125.31.82.保存就ok了。
chomd a+x download.sh让其可以运行,然后终端输入./download.sh就可以开始下载了,用这一步代替官方文档里的repo sync。
当连接不上终端时休息3毫秒然后再自动repo sync,这样就很完美了。 里面的projects文件夹即是下载的源码:
当然我的还么下载完,估计里面的内容还不太全。下面附一个下载时的截图:然后将下载的地址中间加一个/a,也即最终的repo init的命令是:
repo init -u https://android.googlesource.com/a/platform/manifest -b android-4.0.1_r1
经过4步骤里的改.netrc操作,我发现下载时报的错依旧,大爷的。报错如下:
error: Failed connect to android.googlesource.com:443;Connection refused while accessinghttps://android.googlesource.com/a/platform/frameworks/base/info/refs
fatal: HTTP request failed
error: Cannot fetch platform/tools/motodev
error: Cannot fetch platform/frameworks/base
error: Cannot fetch platform/prebuilts/sdk
error: Exited sync due to fetch errors
然后sudo gedit /etc/hosts, 在里面输入:
[html] view plaincopy
74.125.31.82 www.googlesource.com
74.125.31.82 android.googlesource.com
203.208.46.172 cache.pack.google.com
59.24.3.173cache.pack.google.com
6,开始同步源码喽
按理说在repo init ....之后使用repo sync就可以开始下载源码了,但是在下载过程中经常会出现没网速“死”的情况。当然,我修改了/etc/hosts文件之后就再也么有死过。在没网速提示连接不上时,可以按ctrl+z按键来暂停同步,然后再输入repo sync就可以了。但尽管这样也不太方便,比如大半夜的谁会守着电脑监督下载情况,源码貌似都要一夜才下好,汗。为此,可以参考http://www.rosoo.net/a/201302/16503.html 在工作目录,我的是~/document/androidSource文件夹下新建一个download.sh脚本文件,里面的内容是:
[html] view plaincopy
<span style="font-size:18px;color:#FF0000;"> #!/bin/bash
echo "======start repo sync======"
repo sync
while [ $? == 1 ]; do
echo "======sync failed, re-sync again======"
sleep 3
repo sync
done </span>
7,下载的源码在哪里
在工作目录~/document/androidSource文件夹下,输入命令 ls -a,可以看到有个.repo文件夹。很显示这是个隐藏文件夹,进去这个目录后查看结果如下:
[html] view plaincopy
<span style="font-size:18px;">administrator@ubuntu:~/document/androidSource/.repo$ ls
manifests manifests.git manifest.xml projects repo</span>
[html] view plaincopy
<span style="font-size:18px;">administrator@ubuntu:~/document/androidSource/.repo/projects$ ls
abi build.git development.git external libcore.git prebuilt.git
bionic.git cts.git device frameworks ndk.git sdk.git
bootable dalvik.git docs hardware packages system
</span>
有点奇怪的时我在repo init -u的时候已经用-b指定下载源码版本为4.0.1_r1, 不知到为啥下载的时候还会出现4.2.x的信息,有时候还会出现2.3.x的相关信息,知道为啥的大神告知一下哈。
据说会有10G左右,源码还在下载。等下载完后用mv .repo repo强制把这个隐藏文件夹弄成可见的看着就方便了。(看来不用强制把.repo变可见,在工作目录下等源码下载好后所有文件夹直接可见了。不过用ls -a查看,还是有隐藏文件夹.repo,里面的内容如下:
自上而下,每一列每一列的看,内容和下面androidSource文件夹中的内容是一样的。只不过也的带.git有的不带。估计带.git是可能会有更新的内容吧。这一点是揣测。这和repo准确说是git的工作流程有关。)源码下好了,下一步就干编译。
终于下载完了,附一张截图:
原来下载完成后,androidSource下面的东西自动变的可见了,共占空间4.5G大小。截图如下:
补充一下,早期的android源码是由linux的kernel负责管理的,下载的链接是git://android.git.kernel.org,所以网上有的命令还是这样的:repo init -u http://android.git.kernel.org/platform/manifest.git 这种统统是过时的,kernel已经将android剔除。android源码由android.googlesource.com负责维护发布。所以只要是文档里repo init后面的网址带“kernel”这肯定下不成,趁早pass!
参考文章(下一步编译的时候还要用到):
5,老罗http://blog.csdn.net/luoshengyang/article/details/6559955
6,http://blog.csdn.net/herbert5069/article/details/7671801
7,http://www.cnblogs.com/and_he/archive/2012/01/04/2312027.html
8,http://www.iteye.com/topic/1122739
Ubuntu12.04下载Android4.0.1源码全过程,附若干问题解决[转]的更多相关文章
- Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决
昨晚在编译源码,make一段时间之后报错如下: # A fatal error has been detected by the Java Runtime Environment: # # SIGSE ...
- [2013.7.5新鲜出炉] Ubuntu12.04下载Android4.0.1源码全过程----------------折腾两天,终于下好,附若干问题解决
本文转至 http://blog.csdn.net/yanzi1225627/article/details/9255457 下载源码这一步折腾了我整整两天,期间遇到很多问题,哎,记录于此,希望日后再 ...
- ubuntu13.04下载android4.0.1源码过程
最初我参考的是老罗的博客http://blog.csdn.net/luoshengyang/article/details/6559955 进行下载安装的,但弄着弄着就发现不太对劲了.这里记录下详细过 ...
- 转载: ubuntu13.04下载android4.0.1源码过程
转自:http://blog.csdn.net/zhanglongit/article/details/9263009,中间有些不行的地方进行了些小修改. 最初我参考的是老罗的博客http://blo ...
- [odroid-pc] ubuntu12.04 64bit Android4.0.3 源码编译报错及解决的方法
第一个错误: host Executable: cmu2nuance (out/host/linux-x86/obj/EXECUTABLES/cmu2nuance_intermedia ...
- 下载android4.4.2源码全过程(附已下载的源码)
今天在下载andriod源码,特来与大家分享一下我的经验.当然,网上教下载源码的教程较多,本文主要针对在GFW下下载源码出现的各种问题的解决方法. 1.首先安装下载客户端git , curl. 命令如 ...
- ubuntu 18.04下载mysql8.0.13源码并编译安装(暂时没有成功)
执行如下命令下载解压MySQL8的源码文件压缩包到本地文件: wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.13.ta ...
- 英蓓特Mars board的android4.0.3源码编译过程
英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一.编译环境搭建及要点: 1. 虚拟机软件virt ...
- 【转】如何下载并编译Android4.0内核源码goldfish(图文)
原文网址:http://blog.csdn.net/flydream0/article/details/7070392 关于如何下载Android4.0源码,请查看我的博客内另一篇文章(同样是图文教程 ...
随机推荐
- 修改 VSS 默认登录用户名三种方法
修改 VSS 默认登录用户名三种方法标签: VSS VSS2005c#2014-11-27 10:27 1561人阅读 评论(0) 收藏 举报 分类: VSS软件开发总会有 BUG 和更新的需求,之前 ...
- 俄罗斯方块:Python实现
网上搜到一个Pygame写的俄罗斯方块(tetris),大部分看懂的前提下增加了注释,Fedora19下运行OK的 主程序: #coding:utf8 #! /usr/bin/env python # ...
- 通过并行 提高批量审核PDF性能
上一篇文章提到了 通过 iTextSharp 实现PDF 审核盖章 ,如果当需要一次审核大批量的PDF我们如何来提高程序的性能呢? 下面我们通过并行计算来提升性能. 首先是一个审核PDF的方法 pub ...
- IT项目外包有哪些注意事项
2015年两会上,李克强总理在政府工作报告中首次提出“互联网+”计划,各种互联网创业项目也如雨后春笋般破土而出.由于很多创业团队并没有自己的技术团队,所以软件外包成为很多创业项目普遍采取的一种方案.在 ...
- HTML5迷你游戏作验证码
验证码最常见的是各种变形的字符,因为识别程序进化得越来越聪明,验证码也变得越来越难以识别,给用户造成了很多的麻烦和反感. 已经有很多人尝试过各种改进的验证码,比如动画的验证码,做题目的验证码,要回答问 ...
- adjtimex使用
adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...
- MyBatis第一个项目示例
1.创建一个Java project,JikeBook 2.添加项目所需的依赖包 如 mybatis-3.2.8.jar,是实现mybatis功能所必需的依赖包 mysql-connector-jav ...
- 苹果的HomeKit协议
苹果的HomeKit协议非常底层,其作用仅限于让iOS平台和家居设备能够相互“握手”,但“认识”之后,想要继续控制灯.空调等设备,仍然需要家电厂商在HomeKit的基础上进行二次开发.
- Python对文件的操作(转)
一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python 核心编程>上说的很晦涩,这里没有深刻理解到,希望有人能解释给我听. >>> ...
- (转).NET平台开源JSON库LitJSON的使用方法
一个简单示例: String str = "{’name’:’cyf’,’id’:10,’items’:[{’itemid’:1001,’itemname’:’hello’},{’itemi ...