Ubuntu12.04下載Android4.0.1源碼全過程,附若干問題解決[轉]

來源:互聯網
上載者:User

標籤: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

 

  1.  

  2.  

  3.  

  4. error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/manifest/info/refs  

  5.  

  6.  

  7.  

  8. fatal: HTTP request failed  

  9.  

  10.  

  11.  

  12. error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/manifest/info/refs  

  13.  

  14.  

  15.  

  16. fatal: HTTP request failed  

  17.  

  18.  

  19.  

  20. Fetching projects:   9% (20/221)  error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/external/bison/info/refs  

  21.  

  22.  

  23.  

  24. fatal: HTTP request failed  

  25.  

  26.  

  27.  

  28. 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  

  29.  

  30.  

  31.  

  32. fatal: HTTP request failed  

  33.  

  34.  

  35.  

  36. error: Failed to connect to 2404:6800:4008:c01::52: Network is unreachable while accessing https://android.googlesource.com/platform/external/astl/info/refs  

  37.  

  38.  

  39.  

  40. fatal: HTTP request failed  

  41.  

  42.  

  43.  

  44. error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/external/bluetooth/glib/info/refs  

  45.  

  46.  

  47.  

  48. fatal: HTTP request failed  

  49.  

  50.  

  51.  

  52. error: The requested URL returned error: 406 while accessing https://android.googlesource.com/platform/external/astl/info/refs  

  53.  

  54.  

  55.  

  56. fatal: HTTP request failed  

  57.  

  58.  

  59.  

  60. 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

    1.  

    2.  

    3.  

    4. Login for Git:  

    5.  

    6.  

    7.  

    8. Username: git-yanzi1225627.gmail.com  

    9.  

    10.  

    11.  

    12. Password: 1/IwTl_VomaQWIk0I4gRjdDL5SybS8MGDv15Cb0bLonMg  

    13.  

    14.  

    15.  

    16. Staying Authenticated:  

    17.  

    18.  ‍

    19.  

    20. To stay authenticated by saving the password, append the following line to the ~/.netrc configuration file:  

    21.  

    22.  

    23.  

    24. 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   

    25.  

    26.  

    27.  

    28.   

    29.  

    30.  

    31.  

    32. 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 ~/

    33.  

    34.  

    35.  

    36. .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檔案夾即是下載的源碼: 
             當然我的還麼下載完,估計裡面的內容還不太全。下面附一個下載時的:

    37. 然後將下載的地址中間加一個/a,也即最終的repo init的命令是

    38. repo init -u https://android.googlesource.com/a/platform/manifest -b android-4.0.1_r1
    39.       經過4步驟裡的改.netrc操作,我發現下載時報的錯依舊,大爺的。報錯如下:

    40. error: Failed connect to android.googlesource.com:443;Connection refused while accessinghttps://android.googlesource.com/a/platform/frameworks/base/info/refs

    41. fatal: HTTP request failed

    42. error: Cannot fetch platform/tools/motodev

    43. error: Cannot fetch platform/frameworks/base

    44. error: Cannot fetch platform/prebuilts/sdk 

    45. error: Exited sync due to fetch errors

    46.          然後sudo gedit /etc/hosts, 在裡面輸入:

    47.  

    48.  

    49. [html] view plaincopy

    50.  

    51.  

    52. 74.125.31.82 www.googlesource.com  

    53.  

    54.   

    55.  

    56. 74.125.31.82 android.googlesource.com  

    57.  

    58.   

    59.  

    60. 203.208.46.172 cache.pack.google.com  

    61.  

    62.   

    63.  

    64. 59.24.3.173cache.pack.google.com  

    65. 6,開始同步源碼嘍

    66.        按理說在repo init  ....之後使用repo sync就可以開始下載源碼了,但是在下載過程中經常會出現沒網速“死”的情況。當然,我修改了/etc/hosts檔案之後就再也麼有死過。在沒網速提示串連不上時,可以按ctrl+z按鍵來暫停同步,然後再輸入repo sync就可以了。但儘管這樣也不太方便,比如大半夜的誰會守著電腦監督下載情況,源碼貌似都要一夜才下好,汗。為此,可以參考http://www.rosoo.net/a/201302/16503.html  在工作目錄,我的是~/document/androidSource檔案夾下建立一個download.sh指令檔,裡面的內容是:

    67.  

    68.  

    69. [html] view plaincopy

    70.  

    71.  

    72. <span style="font-size:18px;color:#FF0000;">    #!/bin/bash     

    73.  

    74.     echo "======start repo sync======"     

    75.  

    76.     repo sync     

    77.  

    78.     while [ $? == 1 ]; do     

    79.  

    80.     echo "======sync failed, re-sync again======"     

    81.  

    82.     sleep 3     

    83.  

    84.     repo sync     

    85.  

    86.     done   </span>  

    87. 7,下載的源碼在哪裡

    88.           在工作目錄~/document/androidSource檔案夾下,輸入命令 ls -a,可以看到有個.repo檔案夾。很顯示這是個隱藏檔案夾,進去這個目錄後查看結果如下:

    89.  

    90.  

    91. [html] view plaincopy

    92.  

    93.  

    94. <span style="font-size:18px;">[email protected]:~/document/androidSource/.repo$ ls  

    95.  

    96. manifests  manifests.git  manifest.xml  projects  repo</span>  

    97.  

    98.  

    99. [html] view plaincopy

    100.  

    101.  

    102. <span style="font-size:18px;">[email protected]:~/document/androidSource/.repo/projects$ ls  

    103.  

    104. abi         build.git   development.git  external    libcore.git  prebuilt.git  

    105.  

    106. bionic.git  cts.git     device           frameworks  ndk.git      sdk.git  

    107.  

    108. bootable    dalvik.git  docs             hardware    packages     system  

    109.  

    110. </span>  

       

    111. 有點奇怪的時我在repo init -u的時候已經用-b指定下載源碼版本為4.0.1_r1, 不知到為啥下載的時候還會出現4.2.x的資訊,有時候還會出現2.3.x的相關資訊,知道為啥的大神告知一下哈。

    112.            據說會有10G左右,源碼還在下載。等下載完後用mv .repo repo強制把這個隱藏檔案夾弄成可見的看著就方便了。(看來不用強制把.repo變可見,在工作目錄下等源碼下載好後所有檔案夾直接可見了。不過用ls -a查看,還是有隱藏檔案夾.repo,裡面的內容如下:

    113. 自上而下,每一列每一列的看,內容和下面androidSource檔案夾中的內容是一樣的。只不過也的帶.git有的不帶。估計帶.git是可能會有更新的內容吧。這一點是揣測。這和repo準確說是git的工作流程有關。)源碼下好了,下一步就幹編譯。

    114.          終於下載完了,附一張:

    115.  

    116.        原來下載完成後,androidSource下面的東西自動變的可見了,共占空間4.5G大小。如下:

    117.  

    118.  

    119.  

    120.       補充一下,早期的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!

    121.  

    122. 參考文章(下一步編譯的時候還要用到):

    123. 1,http://www.59a.cn/1182.html

    124. 2,http://wenku.baidu.com/view/7bd2a3f10242a8956aece40d.html

    125. 3,http://www.startos.com/ubuntu/tips/2011021022209.html

    126. 4,http://www.rosoo.net/a/201302/16503.html

    127. 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源碼全過程,附若干問題解決[轉]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.