標籤:android style blog http io ar color os 使用
學校裡一直在做應用程式層開發,考慮到日後就業問題,這次決定研究源碼和驅動,並進行編譯。沒想到就下載源碼這一步折騰了我整整兩天,期間遇到很多問題,哎,記錄於此,希望日後再下源碼的人不要再走無謂的彎路了。事實上可以在這裡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;">[email protected]:~/document/androidSource/.repo$ ls
manifests manifests.git manifest.xml projects repo</span>
[html] view plaincopy
<span style="font-size:18px;">[email protected]:~/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!
參考文章(下一步編譯的時候還要用到):
1,http://www.59a.cn/1182.html
2,http://wenku.baidu.com/view/7bd2a3f10242a8956aece40d.html
3,http://www.startos.com/ubuntu/tips/2011021022209.html
4,http://www.rosoo.net/a/201302/16503.html
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源碼全過程,附若干問題解決[轉]