深入理解Android之一源码的分析1——源码的下载

首先第一步:sudo apt-get install git-core curl

这个就报错误,报找不到软件包,这个的解决方法是按照书的步骤来的,即在软件源中的UBUNTU软件TAB页上,“下载自”选择了一个好的选项(选择其它服务器,中国,让操作系统自己找了一个,是"mirror.sohu.com/ubuntu")。然后再执行一次命令就下载下来了。网上有的说需要修改source.list(sudo gedit /etc/apt/sources.list),其实和这个是一样的。

第二步,创建文件下载的路径:mkdir -p develop/download,然后进入这个路径cd ~/develop/download

第三步,下载repo,书上说的是用curl http://Android.git.kernel.org/repo > ./repo,即将repo 下载到.repo文件夹中去。结果这个不行,报没有可用的源,这个地址不可以使用。换了:

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >./repo也不行,现在象可以下载了,但是一直下载的速度是0.

这个真是折腾老长时间,修改了后来换了一个非官方的网址:

curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" >./repo 

chmod a+x repo

如果不使用上面的方法在HOST里增加:

gedit /etc/hosts 

添加如下内容: 

74.125.237.1   dl-ssl.google.com

这个未经测试,只是说这么做可以。

第四步,初始化repo,  ./repo init -u git//Android.git.kernel.org/platform/manifest.git -b froyo

现象和第三步一样,出现如下错误:

error: The requested URL returned error: 403 while accessing http://android.git.kernel.org/platform/manifest.git/info/refs fatal: HTTP request failed  fatal: cannot obtain manifest http://android.git.kernel.org/platform/manifest.git

地址是不对的,然后换成下面的

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

如果上面这个不行使用这个:

将初始化地址改为:  repo init -u git://github.com/android/platform_manifest.git git://github.com/android/platform_manifest.git

下面这个是非官方的网址,是可以用的:

repo  init  -u  git://codeaurora.org/platform/manifest.git -b gingerbread

但是不知道以后还可不可以用,可以用多长时间。

第五步,./repo sync, 这步是最最难熬的,一开始出现了个错误:

“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”

解决方法:

1、在存放android系统源代码的目录(也就是执行repo sync命令的目录)下,有个.repo的隐藏目录,用ls -a可以查看的到,进入该目录:cd .repo; 

2、打开.repo目录下的manifest.xml文件(命令vim manifest.xml)并找到fetch属性,在我的文件中显示fetch="..",将fetch修改为fetch="git://Android.git.linaro.org/",保存并退出;

(注:对于新装的ubuntu,用vi打开可能无法编辑,此时就用vim编辑器,如果没有安装,会提示,安装即可。sudo apt-get install vim)

 3、继续执行./repo sync就可以下载了。

然后基本就没遇到其它的问题,当然网上的资料说得还有很多的问题,有一种情况需要说明,可能在这个过程中会不断的有网络的传输错误,那么你就得手动的./repo sync,如果你不想这么做就可以写一个脚本:

#!/bin/bash   
echo "======start repo sync======"   
./repo sync   
while [ $? = 1 ]; do   
echo "======sync failed, re-sync again======"   
sleep 3   
./repo sync   
done

 (我自己试验的可行的脚本的写法:

①vim a.txt

②将上面脚本的内容写入,并保存退出

③chmod 777 a.txt  (修改a.txt的权限为可执行)

④./a.txt)

这里最后还要提到一个问题,如果出现下面的错误:

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

等错误信息。 

 

解决方法:编辑/etc/hosts文件 

 

 $ sudo gedit /etc/hosts 

 

增加下面内容,保存 

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.173 cache.pack.google.com

但是好像这么解决的作用并不是很大。

说明一下,./repo sync过程很长的,书上说两个G,那个坑爹的说法,后来在网上查找说是足有16个G,下了大约三天三夜吧。挺熬人的。其它最后大家发现,上面折腾来折腾去,为什么,还不是XX人写得防火墙软件整得不好上网。无语。

下面还有内核的源码,还得装JDK,挺多,慢慢来吧。