深入理解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,挺多,慢慢来吧。