天天看點

Android源碼下載下傳及開發環境的搭建

        前一博文給自己列了一下android的學習計劃,是時候一個個的完成了。如計劃列的,我要寫的第一篇是《android源碼 的下載下傳及開發環境的搭建》,緻于如何去下載下傳源碼,其實網上已經一大堆的文章了,一搜就有。但在這裡,我想說,一個源碼的下載下傳,不是簡單的把源碼下載下傳下來之 樣就ok了,就可以開始你的源碼學習之旅。要想更好的學習源碼和進行開發,一個适合自己的開發環境還是必不可少的,這裡我會列出來我給自己準備的開發環境 的做法,不能說明是最優的,但至少我感覺對我來說還是挺友善的。

         android源碼的開發環境,對機子的要求還是挺高的。首先,源碼的大小就接近10g,編譯完之後,占用的空間驟增到逼近 20g了。而源碼的編譯過程中,而且還有一種可能是在編譯的時候報錯了,編譯就這樣中斷了,一直找不到原因的所在,卻萬萬沒想到,自己虛拟機的記憶體配置設定太 小了,導緻編譯失敗。一增大配置設定的記憶體大小,就正常的編譯過去了。

        自我全用的感覺,如果是虛拟機裡面安裝的話建議如下:

        1、虛拟機裡配置設定的硬碟大小至少60g(可設定為動态增長就好了) ;

        2、記憶體大小配置設定至少1.5g(自家的電腦就2g而已,為止又買了個4g的);

        但如果是雙系統的,那就不用說了。

        android源碼如官網介紹的在linux和mac系統環境下進行下載下傳,windows還是不支援哦。

        這裡簡單的弄出源碼下載下傳的一些步驟,可以完成ubuntu環境下的下載下傳,而對于mac系統或是更多詳細的環境下載下傳資訊,可以在 android官方網站上檢視http://source.android.com/source/initializing.html。

3.1.1 jdk安裝

        由于sun 的已經不再存在于ubuntu的主要包分支中,是以為了下載下傳它,需要添加源路徑,以便下載下傳到正确版本的jdk。ubuntu裡面自帶安裝的openjdk會導緻android編譯失敗。

java 6: android2.3及以上版本

<code>1</code>

<code>$</code><code>sudo</code>

<code>add-apt-repository</code><code>"deb http://archive.canonical.com/ lucid partner"</code>

<code>2</code>

<code>apt-get update</code>

<code>3</code>

<code>apt-get</code><code>install</code> <code>sun-java6-jdk</code>

3.1.2 添加需要的包

64位系統:

<code>apt-get</code><code>install</code> <code>git-core gnupg flex bison gperf build-essential \</code>

<code>  </code><code>zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \</code>

<code>  </code><code>x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \</code>

<code>4</code>

<code>  </code><code>libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \</code>

<code>5</code>

<code>  </code><code>libxml2-utils xsltproc</code>

對于ubuntu 10.10:

<code>ln</code> <code>-s /usr/lib32/mesa/libgl.so.1 /usr/lib32/mesa/libgl.so</code>

對于ubuntu 11.10:

<code>ln</code> <code>-s /usr/lib/i386-linux-gnu/libx11.so.6 /usr/lib/i386-linux-gnu/libx11.so</code>

<code></code>

32位系統:

<code>  </code><code>zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \</code>

<code>  </code><code>libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \</code>

<code>以上的方式可以正常的在ubuntu下完成源碼編譯環境的設定。完成以上的步驟設定,就可以接下來的源碼下載下傳了。這個時候無法去确認,隻能在源碼的編譯過程中,碰到了錯誤,再來解決問題。</code>

<code>3.2 源碼下載下傳</code>

<code>    </code> <code>p.s:有此時候,環境需要設定上網代理。這裡需要在終端裡面進行代理設定,否則是不能正常的進行下載下傳操作。</code>

<code>    設定代理在終端上設定:</code>

<code>$</code><code>export</code>

<code>http_proxy=http://username:</code><code>pwd</code><code>@yourproxyaddress:proxyport</code>

<code>https_proxy=https://username:</code><code>pwd</code><code>@yourproxyaddress:proxyport</code>

<code>#查詢是否設定成功可以使用echo指令列印出剛設定的代理,或可以正常顯示出設定的值說明,已經設定完成。</code>

<code>$</code><code>echo</code>

<code>$http_proxy</code>

<code>$https_proxy</code>

<code>3.2.1 下載下傳repo</code>

<code>    由于android源碼内容及子產品很多,谷歌使用了git的版本控制工具,并對不同的子產品設定不同的git伺服器,又自行研發了repo工具,把上百的git工程,統一起來。隻需要一個repo文本,便可以從上百的git伺服器,取到完成的android源碼。</code>

<code>    在使用者目錄下,建立bin檔案夾,用于存放repo,并把該路徑設定到環境變量中:</code>

<code>$</code><code>mkdir</code>

<code>~/bin</code>

<code>$ path=~/bin:$path</code>

下載下傳repo的腳本,用于執行repo.

<code>$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo &gt; ~/bin/repo</code>

<code>$</code><code>chmod</code>

<code>a+x ~/bin/repo</code>

Android源碼下載下傳及開發環境的搭建

以上為正常的下載下傳完成的效果。

3.2.2 初始化一個repo的用戶端

      建立一個空的目錄,用于存放android源碼。

<code>myandroid</code>

<code>$</code><code>cd</code>

<code>在上面建立的目錄下運作repo進行下載下傳源碼:</code>

    下載下傳主線分支,主分支裡面包含着最新修改的bugs,并未正式發出版本的最新源碼。

<code>$ repo init -u https://android.googlesource.com/platform/manifest</code>

<code>下載下傳其他分支,正式釋出的版本,可以通過添加-b的指令下載下傳下來。</code>

<code>$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1</code>

<code>以上操作初始化了一個repo用戶端,設定分支的方向。</code>

<code></code><code>出下以下資訊,說明了已經在正常的進行用戶端下載下傳操作。</code>

Android源碼下載下傳及開發環境的搭建

在下載下傳過程中會需要填寫name及email,填寫完之後,選擇y進行确認。

Android源碼下載下傳及開發環境的搭建

最後,提示repo初始化完成在所在的目錄下,這裡也可以看到目前的目錄下有一個隐藏檔案.repo/ 這個檔案裡面設定着一些初始化的資訊。

Android源碼下載下傳及開發環境的搭建

接下來就是代碼同步的過程了,這個過程很漫長,也需要很有耐心。

雖然隻是一個簡單的指令,即:

<code>$ repo</code><code>sync</code>

效果如下:(若出現了new branch 、new tag說明已經在正常的同步過程了)這時隻需要等待其完成,這個同步的時間會很久,因為android的代碼全部下載下傳下來了,也包括着其他的分支。整個源 碼大概會有16g左右,惟有等待了,但這個時候可以用來準備一下開發環境。

   下載下傳一個漫長的過程,在下載下傳的過程中,有可以會有中斷的情況,這時需要重新的repo sync,進行繼續的同步了。下載下傳完成的最後,會有許多100%的下載下傳成功的提示,

3.3.1 建構本地開發分支

        主要是建構本地開發分支,在本地的開發分支上可進行添加和修改自己想要的代碼。

       在源碼的根目錄下

<code>$git --git-</code><code>dir</code>

<code>.repo/manifests/.git/ branch -a</code>

Android源碼下載下傳及開發環境的搭建

以上這些就是分支的名稱,當希望去切換到其他分支上的時候,這裡以切換到android-4.0.3_ri,并建立自己的開發分支為例如下:

<code>$repo init -b android-4.0.3_r1</code>

<code>#初始化用戶端到某一分支</code>

<code>$repo</code><code>sync</code>

<code>#進行同步,此時更新的速度比一開始的源碼下載下傳要快得多了,大概個把小時可完成</code>

<code>$repo start myandroid4.0.3 --all</code>

<code>6</code>

<code>#構造本地分支,取一個分支名稱myandroid4.0.3</code>

<code>7</code>

<code>$repo checkout myandroid4.0.3</code>

<code>8</code>

<code>#檢出到自己建立的分支上。</code>

4、開發環境搭建       

4.1 開發環境搭建結構圖

Android源碼下載下傳及開發環境的搭建

圖4-1 android源碼開發環境搭建   

上圖畫出我在對android源碼上的學習和工作上所設定的開發環境。這是目前為此我感覺比較合适的方式。

        對于上面的幾點,解決以下幾點:

        1、為何不直接在ubuntu環境下直接去使安裝eclipse就好了?

        理由: 對于我個人來說,編輯和修改代碼還是習慣于window環境下,ubuntu裡面的環境隻是個别情況下才去進行編譯,這裡面所設計的開發環境适用于習慣基 于window下寫代碼的,如果可本身就已經習慣在ubuntu下進行開發,可直接在ubuntu裡面安裝eclipse即可。

        2、為什麼使用samba來映像挂載,而不是使用mount,直接把window下的目錄直接挂載到ubuntu上就好了?

        理由:如果以mount的方式,把window的目錄挂載到ubuntu上,再把源碼移至挂載的目錄上,就會發現,複制或移動 的過程中,會報出檔案已經存在的現象,提示是否替換。這個原因很簡單,windows下的檔案系統對檔案名的大小寫不敏感,對于它來說a.txt和 a.txt其實是同一個檔案,而對于linux系統來說a.txt和a.txt則是兩個不同的檔案。android源碼也正因為有這樣的同名卻大小寫一緻 的情況,是以隻能支援在ubuntu環境下。這時就需要把ubuntu環境下的目錄給挂載出來,以samba挂載出來的目錄實為ubuntu下的,是以其

檔案系統是基于linux的。這樣的友善不會導緻破壞源碼的現象.

        3、為何這裡要使用xmanger工具。

        理由:工具隻是為了提高工作效率,xmanger工具裡面包含着很多實用的小工具,包括xshll,xftp等終端指令通路和 檔案操作,更友善的避免了windows和ubuntu的切換而浪費的時間。xshell隻是作為windows下的窗體,友善視窗間的切換。

4.2 samba環境搭建

4.2.1 安裝samba與smbfs

<code>apt-get</code><code>install</code> <code>samba</code>

<code>apt-get</code><code>install</code> <code>smbfs</code>

4.2.2 建立共享的檔案夾

        對于網絡映射可見的檔案夾目錄,放在這檔案夾裡面的檔案可被通路到。

<code>/home/sammor/share</code>

<code>777 /home/ray/share</code><code>#設定檔案夾的權限為777</code>

4.2.3 備份并編輯smb.conf允許網絡使用者通路

<code>cp</code> <code>/etc/samba/smb.conf /etc/samba/smb.conf_backup</code>

<code>gedit /etc/samba/smb.conf</code>

搜尋以下一行文字

<code>; security = user</code>

改為:

<code>$ security = user</code>

<code>$ username map = /etc/samba/smbusers</code>

将下列幾行新增到檔案的最後面,假設允許通路的使用者為:nancy。而檔案夾的共享名為 share

<code>01</code>

<code>[share]</code>

<code>02</code>

<code>comment = shared folder with username and password</code>

<code>03</code>

<code>path = /home/sammor/share</code>

<code>04</code>

<code>public =</code><code>yes</code>

<code>05</code>

<code>writable =</code><code>yes</code>

<code>06</code>

<code>valid</code><code>users</code>

<code>= sammor</code>

<code>07</code>

<code>create mask = 0700</code>

<code>08</code>

<code>directory mask = 0700</code>

<code>09</code>

<code>force user = sammor</code>

<code>10</code>

<code>force group = nogroup</code>

<code>11</code>

<code>available =</code><code>yes</code>

<code>12</code>

<code>browseable =</code><code>yes</code>

找到[global]把 workgroup = mshome  改為:

<code>workgroup = workgroup</code>

<code>display charset = utf-8</code>

<code>unix charset = utf-8</code>

<code>dos charset = cp936</code>

<code>上面假設新增加的使用者名為nancy,故現在需要添加該使用者</code>

<code>useradd</code> <code>nancy</code>

<code>smbpasswd -a nancy</code>

<code>gedit /etc/samba/smbusers</code>

<code><code>在建立立的檔案中加入下面的一行并儲存</code></code>

<code>nancy =</code><code>"network username"</code>

<code>删除網絡上用的帳号的指令把 -a改為-x</code>

<code>sudo</code> <code>testparm</code><code>#如果顯示出之前設定的資訊,即成功設定上了</code>

<code>sudo</code> <code>/etc/init.d/samba restart</code><code>#有可能找不到對應的檔案,但此時已經成功啟動了</code>

4.2.4 win7/xp中建立映射網絡

        計算機—&gt;右擊“映射網絡驅動器”—&gt;填寫虛拟機中的ip及對應的共享 的檔案share,确定之後需要填寫網絡上的帳号和密碼(即上面建立的為nancy使用者),如果順利的話,可以連接配接上,這時在此映射檔案夾裡面,建立和修 改的檔案可以在ubuntu系統裡面看到了。

Android源碼下載下傳及開發環境的搭建

後面的三行是為了防止出現中文目錄亂碼的情況。其中根據你的local,utf-8 有可能需要改成 cp936。

4.3 源碼導入eclipse

4.3.1 設定eclipse的相關配置

       進入eclipse的安裝目錄中,找到eclipse.ini檔案,修改該檔案中的。 

<code>-xms40m</code>

<code>-xmx256m</code>

<code>-xx:maxpermsize=256m</code>

為能支援android源碼檢視,改為:

<code>-xms128m</code>

<code>-xmx512m</code>

4.3.2 提取android對eclipse的支援的配置檔案

從android源碼的路徑中找到

Android源碼下載下傳及開發環境的搭建

把.classpath複制到源碼的根目錄上,為了導入eclipse作準備。

而對于android-formatting.xml、android.importorer,導入eclipse中。

打開eclipse,在eclipse中

1、 window &gt; preferences &gt; java &gt; code style.

2、 formatter &gt; import to import <code>android-formatting.xml</code>.

3、organize imports &gt; import to import <code>android.importorder</code>.

4.3.2 修改.classpath

        對于eclipse,每一個工程都對應着一個.classpath,而android源碼中,也已經準備好了該檔案。但這裡需 要對.classpath檔案進行确定每一個目錄路徑是否存在,否則可能會導入工程時産生源碼的影響。因為工程還未進行編譯,幫這裡面主要不存在的路徑是 out/目錄。

Android源碼下載下傳及開發環境的搭建

4.3.3 建立工程,導入源碼

        使用eclipse的java project的方式進行項目工程建立,而不是用android project的方式(該方式會破壞源碼的結構)。

        1、  file &gt; new &gt; java  project.

        2、 取工程名,并引導指定源碼存在的路徑。

        3、 直接finish進入,并等待完全結果。

Android源碼下載下傳及開發環境的搭建

4.3.4 源碼的修改

        當外面repo sync去更新碼時,需要在eclipse進行同步變化,則需要:

        1、window &gt; show view &gt; navigator

        2、在該視圖下面,右擊對應的工程名字

        3、點選refresh進行更新

reference:

1、android源碼:

http://source.android.com

2、samba安裝參考:

http://forum.ubuntu.org.cn/viewtopic.php?t=20852