Ubuntu下Android源碼的獲取(Android4.4爲例)

 上篇博客記錄了在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下載。可以寫腳本自動進行,網上比較多,下面提供一個:

[plain] view plain copy
  1. #!/bin/bash      
  2. echo "======start repo sync======"      
  3. repo sync      
  4. while [ $? = 1 ]; do      
  5. echo "======sync failed, re-sync again======"      
  6. sleep 3      
  7. repo sync      
  8. 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 

待續...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章