上篇博客記錄了在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: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable
解決辦法:
按官網的步驟一步步執行
用瀏覽器登錄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下載。可以寫腳本自動進行,網上比較多,下面提供一個:
- #!/bin/bash
- echo "======start repo sync======"
- repo sync
- while [ $? = 1 ]; do
- echo "======sync failed, re-sync again======"
- sleep 3
- repo sync
- 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待續...
- 頂