157
阿裏雲
技術社區[雲棲]
Android源碼下載及開發環境的搭建
1、前言
前一博文給自己列了一下Android的學習計劃,是時候一個個的完成了。如計劃列的,我要寫的第一篇是《Android源碼 的下載及開發環境的搭建》,致於如何去下載源碼,其實網上已經一大堆的帖子了,一搜就有。但在這裏,我想說,一個源碼的下載,不是簡單的把源碼下載下來之 樣就OK了,就可以開始你的源碼學習之旅。要想更好的學習源碼和進行開發,一個適合自己的開發環境還是必不可少的,這裏我會列出來我給自己準備的開發環境 的做法,不能說明是最優的,但至少我感覺對我來說還是挺方便的。
2、硬件環境準備
Android源碼的開發環境,對機子的要求還是挺高的。首先,源碼的大小就接近10G,編譯完之後,占用的空間驟增到逼近 20G了。而源碼的編譯過程中,而且還有一種可能是在編譯的時候報錯了,編譯就這樣中斷了,一直找不到原因的所在,卻萬萬沒想到,自己虛擬機的內存分配太 小了,導致編譯失敗。一增大分配的內存大小,就正常的編譯過去了。
自我全用的感覺,如果是虛擬機裏麵安裝的話建議如下:
1、虛擬機裏分配的硬盤大小至少60G(可設置為動態增長就好了) ;
2、內存大小分配至少1.5G(自家的電腦就2G而已,為止又買了個4G的);
但如果是雙係統的,那就不用說了。
Android源碼如官網介紹的在linux和mac係統環境下進行下載,Windows還是不支持哦。
3、Android 源碼下載
這裏簡單的弄出源碼下載的一些步驟,可以完成ubuntu環境下的下載,而對於Mac係統或是更多詳細的環境下載信息,可以在 Android官方網站上查看https://source.android.com/source/initializing.html。
3.1 Android 源碼編譯環境準備
3.1.1 JDK安裝
由於sun 的已經不再存在於ubuntu的主要包分支中,所以為了下載它,需要添加源路徑,以便下載到正確版本的JDK。ubuntu裏麵自帶安裝的openjdk會導致Android編譯失敗。
java 6: Android2.3及以上版本
1 |
$ sudo
add-apt-repository "deb https://archive.canonical.com/ lucid partner"
|
3 |
$ sudo
apt-get install
sun-java6-jdk
|
3.1.2 添加需要的包
64位係統:
1 |
$ sudo
apt-get install
git-core gnupg flex bison gperf build-essential \
|
2 |
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
|
3 |
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
|
4 |
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
|
對於ubuntu 10.10:
1 |
$ sudo
ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
|
對於ubuntu 11.10:
1 |
$ sudo
ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
|
32位係統:
1 |
$ sudo
apt-get install
git-core gnupg flex bison gperf build-essential \
|
2 |
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
|
3 |
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
|
以上的方式可以正常的在ubuntu下完成源碼編譯環境的設置。完成以上的步驟設置,就可以接下來的源碼下載了。這個時候無法去確認,隻能在源碼的編譯過程中,碰到了錯誤,再來解決問題。
3.2 源碼下載
P.S:有此時候,環境需要設置上網代理。這裏需要在終端裏麵進行代理設置,否則是不能正常的進行下載操作。
設置代理在終端上設置:
1 |
$ export
http_proxy=https://username: pwd @yourproxyaddress:proxyport
|
2 |
$ export
https_proxy=https://username: pwd @yourproxyaddress:proxyport
|
3 |
#查詢是否設置成功可以使用echo命令打印出剛設置的代理,或可以正常顯示出設置的值說明,已經設置完成。 |
3.2.1 下載repo
由於Android源碼內容及模塊很多,穀歌使用了git的版本控製工具,並對不同的模塊設置不同的git服務器,又自行研發了repo工具,把上百的git工程,統一起來。隻需要一個repo文本,便可以從上百的git服務器,取到完成的Android源碼。
在用戶目錄下,創建bin文件夾,用於存放repo,並把該路徑設置到環境變量中:
下載repo的腳本,用於執行repo.
1 |
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
|

以上為正常的下載完成的效果。
3.2.2 初始化一個repo的客戶端
創建一個空的目錄,用於存放android源碼。
在上麵創建的目錄下運行repo進行下載源碼:
下載主線分支,主分支裏麵包含著最新修改的bugs,並未正式發出版本的最新源碼。
1 |
$ repo init -u https://android.googlesource.com/platform/manifest |
下載其他分支,正式發布的版本,可以通過添加-b的命令下載下來。
1 |
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 |
以上操作初始化了一個repo客戶端,設置分支的方向。
出下以下信息,說明了已經在正常的進行客戶端下載操作。

在下載過程中會需要填寫Name及Email,填寫完之後,選擇Y進行確認。

最後,提示repo初始化完成在所在的目錄下,這裏也可以看到當前的目錄下有一個隱藏文件.repo/ 這個文件裏麵設置著一些初始化的信息。

接下來就是代碼同步的過程了,這個過程很漫長,也需要很有耐心。
雖然隻是一個簡單的命令,即:
效果如下:(若出現了new branch 、new tag說明已經在正常的同步過程了)這時隻需要等待其完成,這個同步的時間會很久,因為Android的代碼全部下載下來了,也包括著其他的分支。整個源 碼大概會有16G左右,惟有等待了,但這個時候可以用來準備一下開發環境。
下載一個漫長的過程,在下載的過程中,有可以會有中斷的情況,這時需要重新的repo sync,進行繼續的同步了。下載完成的最後,會有許多100%的下載成功的提示,
3.3.1 構建本地開發分支
主要是構建本地開發分支,在本地的開發分支上可進行添加和修改自己想要的代碼。
在源碼的根目錄下
1 |
$git --git- dir
.repo/manifests/.git/ branch -a
|

以上這些就是分支的名稱,當希望去切換到其他分支上的時候,這裏以切換到android-4.0.3_ri,並創建自己的開發分支為例如下:
1 |
$repo init -b android-4.0.3_r1 |
4 |
#進行同步,此時更新的速度比一開始的源碼下載要快得多了,大概個把小時可完成
|
5 |
$repo start myandroid4.0.3 --all |
6 |
#構造本地分支,取一個分支名稱myandroid4.0.3 |
7 |
$repo checkout myandroid4.0.3 |
4、開發環境搭建
4.1 開發環境搭建結構圖

圖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
1 |
$ sudo
apt-get install
samba
|
2 |
$ sudo
apt-get install
smbfs
|
4.2.2 創建共享的文件夾
對於網絡映射可見的文件夾目錄,放在這文件夾裏麵的文件可被訪問到。
1 |
$ mkdir
/home/sammor/share
|
2 |
$ chmod
777 /home/ray/share #設置文件夾的權限為777
|
4.2.3 備份並編輯smb.conf允許網絡用戶訪問
1 |
$ sudo
cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
|
2 |
$ sudo
gedit /etc/samba/smb.conf
|
搜尋以下一行文字
改為:
2 |
$ username map = /etc/samba/smbusers |
將下列幾行新增到文件的最後麵,假設允許訪問的用戶為:nancy。而文件夾的共享名為 share
02 |
comment = Shared Folder with username and password |
03 |
path = /home/sammor/share |
找到[global]把 workgroup = MSHOME 改為:
2 |
display charset = UTF-8 |
上麵假設新增加的用戶名為nancy,故現在需要添加該用戶
2 |
$ sudo
smbpasswd -a nancy
|
3 |
$ sudo
gedit /etc/samba/smbusers
|
在新建立的文件中加入下麵的一行並保存
1 |
nancy = "network username"
|
刪除網絡上用的帳號的命令把 -a改為-x
1 |
sudo testparm
#如果顯示出之前設置的信息,即成功設置上了
|
2 |
sudo /etc/init.d/samba restart
#有可能找不到對應的文件,但此時已經成功啟動了
|
4.2.4 win7/xp中創建映射網絡
計算機—>右擊“映射網絡驅動器”—>填寫虛擬機中的IP及對應的共享 的文件share,確定之後需要填寫網絡上的帳號和密碼(即上麵創建的為nancy用戶),如果順利的話,可以連接上,這時在此映射文件夾裏麵,創建和修 改的文件可以在ubuntu係統裏麵看到了。
後麵的三行是為了防止出現中文目錄亂碼的情況。其中根據你的local,UTF-8 有可能需要改成 cp936。
4.3 源碼導入eclipse
4.3.1 設置eclipse的相關配置
進入eclipse的安裝目錄中,找到eclipse.ini文件,修改該文件中的。
為能支持Android源碼查看,改為:
4.3.2 提取android對eclipse的支持的配置文件
從android源碼的路徑中找到
把.classpath複製到源碼的根目錄上,為了導入eclipse作準備。
而對於android-formatting.xml、android.importorer,導入eclipse中。
打開eclipse,在eclipse中
1、 Window > Preferences > Java > Code Style.
2、 Formatter > Import to import android-formatting.xml
.
3、Organize Imports > Import to import android.importorder
.
4.3.2 修改.classpath
對於eclipse,每一個工程都對應著一個.classpath,而android源碼中,也已經準備好了該文件。但這裏需 要對.classpath文件進行確定每一個目錄路徑是否存在,否則可能會導入工程時產生源碼的影響。因為工程還未進行編譯,幫這裏麵主要不存在的路徑是 out/目錄。
4.3.3 創建工程,導入源碼
使用eclipse的java project的方式進行項目工程創建,而不是用Android project的方式(該方式會破壞源碼的結構)。
1、 File > New > java project.
2、 取工程名,並引導指定源碼存在的路徑。
3、 直接Finish進入,並等待完全結果。
4.3.4 源碼的修改
當外麵repo sync去更新碼時,需要在eclipse進行同步變化,則需要:
1、Window > show View > Navigator
2、在該視圖下麵,右擊對應的工程名字
3、點擊refresh進行更新
reference:
最後更新:2017-04-03 14:53:41