上篇博客记录了在Linux系统(Ubuntu)下搭建Android环境,接下来看下怎么获取Android源码,这里主要以Android4.4的源码为例。

先附上官网的地址:http://source.android.com/source/initializing.html.在上述地址里对Android的开发环境的搭建和源码的获取等有详细的介绍,按照其讲述过程完全可以搞定。下面我主要介绍我自己的获取的过程,其实是对官网的步骤的精简及我遇到的一些问题,后面还收集了一些在网友遇到的问题。简述如下:


1.安装两个软件curl和Git

$ sudo apt-get install curl
$ sudo apt-get install git-core


2.建立bin文件夹,添加到环境变量


$ mkdir ~/DevelopHelp/bin

$ gedit ~/.bashrc
在文件的末尾添加环境变量:
export PATH=~/DevelopHelp/bin:$PATH

$ source ~/.bashrc(使环境变量生效)

上述环境变量设置放法只对当前用户有效


3.下载repo工具,保证其可执行

$ curl http://git-repo.googlecode.com/files/repo-1.13 > ~/DevelopHelp/bin/repo
$ chmod a+x ~/DevelopHelp/bin/repo


官网提供:

$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

下载路径貌似无法访问。修改为以上路径下载即可。

查看所有repo版本http://code.google.com/p/git-repo/downloads/list?can=1&q=下载任何一个版本repo

均可以,我开始使用了repo-1.19,但后面后会有找不到公钥的问题,折腾了半天也没有解决,若大家有解

决该问题的经历,欢迎提供方法及原因。


4.建一个空目录放Android源代码,可以修改为最大权限,进入该目录

$mkdir ~/Android/Android4.4
$sudo chmod –R 777 ~/Android/Android4.4
$cd ~/Android/Android4.4


5.初始化repo

$ repo init -u https://android.googlesource.com/platform/manifest


期间需要填写名字和邮箱验证。注册google帐号和gmail邮箱。
继续,初始化到需要下载的分支。


问题:

这里有可能报出一下错误:

fatal:Cannotgethttps://gerrit.googlesource.com/git-repo/clone.bundle

fatal:error[Errno101]Networkisunreachable

解决办法

按官网的步骤一步步执行
用浏览器登录https://android.googlesource.com/new-password,并且gmail帐号登录;
点击网页上的“允许”,得到类似的结果:

machine android.googlesource.com login git-<userName>.gmail.com password <password>
machine android-review.googlesource.com login git-<userName>.gmail.com password <password>
将上边的两行追加到~/.netrc文件结尾。(如果你的linux系统中从来没有建立过此文件,就在home目录下建立.netrc文件,将上面的信息加到新建的文件中去),
下载地址的URI更改为https://android.googlesource.com/a/platform/manifest(中间加上了“/a”)。
因为访问基本是匿名的,为了防止连接过多,对同一IP地址的连接数做了一定的限制。用 gmail帐号进行认证。
在公司网络内或者用虚拟机下载的话,会经常遇到这问题。


接着往下:

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1.2


通过下面的网址可以查看想要下载的分支
https://android.googlesource.com/platform/manifest/+refs


6.执行repo sync 进行同步

$repo sync

等着下载完毕即可完成,repo支持断点续传功能,下次可以再次运行$repo sync下载。可以写脚本自动进行,网上比较多,下面提供一个:

[plain] view plain copy
  1. #!/bin/bash
  2. echo"======startreposync======"
  3. reposync
  4. while[$?=1];do
  5. echo"======syncFailed,re-syncagain======"
  6. sleep3
  7. done

备注

下面是整理的一些问题和解决办法,希望大家在评论中也一起总结和讨论。

(1)“A new repo command ( 1.18) is available”

解决:依照提示输进去就可以了, cp /home/cfy/android/.repo/repo/repo /home/cfy/bin/repo


(2)error: Failed connect to android.googlesource.com:443;

Connection refused while accessing

https://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
等错误信息。

解决

编辑/etc/hosts文件
$ sudo gedit /etc/hosts
增加下面内容,保存

74.125.237.1 dl-ssl.google.com

74.125.71.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

注:

google source 的ip 是会改动的,所以使用如下命令:

$ nslookup googlesource.com

$ nslookup android.googlesource.com

查看实际ip,将上面得到ip地址按照74.125.31.82 android.googlesource.com 格式加到/etc/hosts


(3) fatal: '../platform/abi/cpp.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
error: Cannot fetch platform/abi/cpp

解决

在~/JK_WorkSpace/Android/AndroidResource/Android4.4/.repo下的

manifest.xml里找到fetch属性,改成fetch="git://Android.git.linaro.org"即可

(4) fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable

代理环境变量造成的问题,用下列指令清除代理:
unset HTTP_PROXY

待续...

Ubuntu下Android源码的获取Android4.4为例的更多相关文章

  1. HTML实现代码雨源码及效果示例

    这篇文章主要介绍了HTML实现代码雨源码及效果示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. html5 移动端视频video的android兼容(去除播放控件、全屏)

    这篇文章主要介绍了html5 移动端视频video的android兼容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. ios – 存档期间不存在Xcode环境变量

    我有一个具有TestFlight构建方案的iOS应用程序.在此方案中,我在“运行”选项卡中设置了一个称为TESTFLIGHT的环境变量,值为1.此外,在构建方案的“配置文件”选项卡中,它已选中“使用RUn操作的参数和变量”选项,并在列表中看到相应的EV.当从Xcode运行应用程序时,这可以正常工作,但是当我在存储设备上运行应用程序时,环境变量TESTFLIGHT不存在.我的问题是有一个我在这里缺少的选项/方案选项卡?

  4. xcode – 为什么Jenkins在我的Mac上运行不会连接到本地的git repo?

    我正在尝试使用Jenkins实现自动化构建,用于我的iOS项目.我添加了Git插件,但是一旦我尝试将git的URL放在项目的git配置中,它会在下面的屏幕截图中显示错误.这里Jenkins不能从repo克隆到其工作空间.解决方法在大多数情况下,gitbarerepo有扩展名.git我的意思是(其他)/test1看起来不正确,我认为应该是(其他)/test1.git在我的mac上有同样的错误.

  5. 哪些Xcode项目文件可以从我的git repo中排除?

    我正在开发一个iOS项目,并使用git进行版本控制.我正在与另一位开发人员合作.我应该保留哪些Xcode项目文件在repo中,哪些可以排除,这样不会对其他开发者产生负面影响?这里有一些非代码文件,git告诉我已被修改或添加…

  6. Xcode 4:使用Git repo commit版本在每个构建上更新CFBundleVersion

    我正在将Xcode4与Git结合使用,并希望在每个版本的Info.plist中增加CFBundLeversion.密钥CFBundLeversion的值应更新为我对Git存储库的最后一次提交的数量.我发现thatpython脚本运行良好,但遗憾的是它没有更新我的Xcode项目中的Info.plist–它只是更新了“BUILT_PRODUCTS_DIR”中的Info.plist.有没有人知道如何让Xcode4获取最新提交的版本并将该信息放入项目的Info.plist中?

  7. 源码推荐:简化Swift编写的iOS动画,iOS Material Design库

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  8. Silver:用Swift编写iOS、Android和.NET应用

    Silver编译器可以为.NETCLR、Java/AndroidJVM和Cocoa运行时提供编译工作。

  9. Swift教程17-淡化MVC,使用MVVM框架开发轻巧便于维护的iOS/android app

    MVVM是微软提出一种移动开发框架,旨在针对传统的MVC框架,解决传统的MVC框架的控制器的臃肿问题.M:Model模型,也就是数据模型;比如一条微博,对应的所有字段合成一条微博整体,这个整体就是ModelV:View视图,只用来显示的视图,如iOS的UIView,Cell;当然在iOS中Storyboard中,view总是和控制器关联,这并不是严格的view如果我们纯手写代码定义一个view那么

  10. swift皮筋弹动发射飞机ios源码

    这是一个款采用swift实现的皮筋弹动发射飞机游戏源码,游戏源码比较详细,大家可以研究学习一下吧。

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部