初始化編譯環境 下載原始碼

lostinai發表於2013-08-24

初始化編譯環境 http://blog.csdn.net/snowolf_538/article/details/6697336

近日,下載了ANDROID的原始碼嘗試進行編譯,故針對其過程,根據Google的官方說明,進行一次翻譯,其原始網址為http://source.android.com/source/index.html,本文只針對Linux環境下的步驟進行翻譯。

 

注意:原始碼的大小大概2.6G,至少需要10G的空閒空間來進行編譯。(snowolf_538:我下載的Gingerbread總共大概佔了近6個G

注意:使用虛擬機器Linux也是可以編譯ANDROID原始碼的,但是需要至少8G的記憶體/交換空間和至少12G的硬碟空間。(snowolf_538:事實上,不理解此處為什麼需要8G的記憶體/交換空間,我使用的是Ubuntu 11.04版本的虛擬機器,只設定了1G的記憶體和2G的交換空間,編譯沒有問題

 

通常來講,需要:

 

 

以下步驟基於Ubuntu 10.04+

 

安裝JDK

 

JDK不再在Ubuntu的主包庫裡面,所以需要根據ANDROID的版本號下載對應的JDK。

JDK6:Gingerbread或者更新

  1. $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"  
  2. $ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"  
  3. $ sudo apt-get update  
  4. $ sudo apt-get install sun-java6-jdk  


snowolf_538:上面的第二句執行時會報錯,說是無效的地址,我實際使用的是sudo add-apt-repository "deb http://archive.canonical.com/ubuntu lucid parter"


JDK5:Froyo或者更老

  1. $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper main multiverse"  
  2. $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper-updates main multiverse"  
  3. $ sudo apt-get update  
  4. $ sudo apt-get install sun-java5-jdk  


安裝必需的包

 

安裝以下必需的包以建立完整的編譯環境

  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  


snowolf_538:以上包安裝時,其中lib32ncurses5-dev、ia32-libs、lib32readline5-dev和lib32z-dev無法找到,故使用libncurses5-dev、libreadline5-dev和libz-dev來代替,ia32-libs好像沒有影響



配置USB訪問

 

在GNU/Linux系統下(特別是在Ubuntu系統下),一般使用者預設不能訪問USB裝置,我們需要配置使其可以訪問。

推薦的方法是用root使用者建立/etc/udev/rules.d/51-android.rules檔案,把以下的行拷貝到該檔案中。<username>必須被替換成實際使用USB去訪問手機的使用者名稱。

  1. # adb protocol on passion (Nexus One)  
  2. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"  
  3. # fastboot protocol on passion (Nexus One)  
  4. SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"  
  5. # adb protocol on crespo (Nexus S)  
  6. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"  
  7. # fastboot protocol on crespo (Nexus S)  
  8. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"  


這些規則將會在下一次裝置插上的時候生效。

下載原始碼 http://blog.csdn.net/snowolf_538/article/details/6697530

 安裝Repo

在ANDROID,Repo是一個用來使Git使用更方便的工具。想了解更多的Repo的資訊,請參見http://source.android.com/source/version-control.html

為了安裝、初始化和配置Repo,需要以下步驟:

  • 確保在你的主目錄下有一個bin目錄,並且其在你的PATH環境變數中
  1. $ mkdir ~/bin  
  2. $ PATH=~/bin:$PATH  

 

  • 下載Repo指令碼並確保其可執行
  1. $ curl https://android.git.kernel.org/repo > ~/bin/repo  
  2. $ chmod a+x ~/bin/repo  


repo的MD5校驗為:bbf05a064c4d184550d71595a662e098

 

初始化Repo客戶端

 

安裝完Repo之後,建立客戶端以便能訪問ANDROID原始碼庫。

  • 建立一個空目錄以存放工作檔案
  1. $ mkdir WORKING_DIRECTORY  
  2. $ cd WORKING_DIRECTORY  

 

  • 執行repo init以下載最新的repo版本
  1. repo init -u git://android.git.kernel.org/platform/manifest.git  


當要CHECK OUT一個特定的分支而不是主分支時,使用-b選項

  1. $ repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo  

 

  • 當遇到提示時,請輸入你的真實姓名和電子郵件地址

當成功下載完之後,你的工作目錄下將建立一個.repo目錄用來存放所有的manifest資訊。

 

獲取原始碼

要下載ANDROID的原始碼,使用以下命令

  1. $ repo sync  


這將下載ANDROID的原始碼到你的當前目錄下面。最初的sync操作將需要幾分鐘時間(snowolf_538:事實上,取決於你的網速)。想了解更多的repo sync命令和其他repo命令的資訊,請參考http://source.android.com/source/version-control.html

 

驗證Git標籤

 

裝載以下公鑰到你的GnuPG金鑰資料庫裡。

  1. $ gpg --import  


拷貝和貼上以下的金鑰,然後輸入EOF(Ctrl+D)結束輸入。

  1. -----BEGIN PGP PUBLIC KEY BLOCK-----  
  2. Version: GnuPG v1.4.2.2 (GNU/Linux)  
  3.   
  4. mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV  
  5. lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7  
  6. 8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD  
  7. u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z  
  8. wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq  
  9. /HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5  
  10. jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4  
  11. MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9  
  12. b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv  
  13. aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k  
  14. cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX  
  15. gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI  
  16. 2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl  
  17. QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up  
  18. hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk  
  19. C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX  
  20. LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+  
  21. OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M  
  22. pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s  
  23. KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb  
  24. N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA  
  25. vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo  
  26. G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ  
  27. hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l  
  28. EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=  
  29. =Wi5D  
  30. -----END PGP PUBLIC KEY BLOCK-----  


匯入金鑰之後,可以使用以下命令來驗證

  1. $ git tag -v TAG_NAME 

編譯和執行 http://blog.csdn.net/snowolf_538/article/details/6698359

編譯ANDROID系統的基本順序如下,

 

初始化

 

使用envsetup.sh指令碼來初始化環境。

  1. $ source build/envsetup.sh  


或者

  1. $ . build/envsetup.sh  


選擇編譯目標

 

使用lunch命令來選擇編譯目標。確切的配置可以作為引數傳進去,如:

  1. $ lunch full-eng  


上面的例子是一個針對emulator的完整的編譯,包括所有的除錯資訊都是使能的。

如果不帶引數執行lunch,將會提示選擇編譯目標。

所有的編譯目標使用BUILD-BUILDTYPE的格式來指定,其中BUILD指向一個特定的功能組合,如下所示:

Build Name

Device

Notes

generic

emulator

一般普通的配置

full

emulator

完整配置,包括所有的語言、應用和輸入法

full_crespo

crespo

完整配置,執行在Nexus S("Crespo")

 

BUILDTYPE是下列之一:

Buildtype Use
user 有限制的訪問,適合於產品
userdebug 和user相似,但是有root訪問和除錯能力,適合於除錯
eng 開發配置,包含額外的除錯工具

 

關於更多為在實際裝置上執行編譯的資訊,請參考http://source.android.com/source/building-devices.html

 

編譯程式碼

 

使用make來編譯程式碼。GNU make能夠使用-jN引數來指定併發任務數,通常來說N的取值是計算機上準備用來進行編譯的硬體核心的1到2倍。例如,在雙E5520的機器上(2個CPU,每個CPU有4個core,每個core有2個thread),最快速的編譯可以指定為make -j16或者make -j32。

 

  1. $ make -j4  


(snowolf_538:我在四核的機器上面指定make -j8,確實很快,4個核心都跑到100%)

 

執行

 

你可以在emulator上執行或者把它燒進實際的裝置中執行。請注意你已經通過lunch選擇了編譯的目標,最好不要在一個不同的平臺上執行。

 

燒進裝置

我們使用fastboot來燒進裝置。首先把裝置置於fastboot模式,這可以通過按住特定的按鍵組合來實現,也可以通過以下shell命令。

  1. $ adb reboot bootloader  

 

一旦裝置處於fastboot模式,執行

  1. $ fastboot flashall -w  


-w選項將擦除裝置上的/data分割槽,這在第一次燒進裝置的時候有用,但以後就不需要了。

關於更多為在實際裝置上執行編譯的資訊,請參考http://source.android.com/source/building-devices.html

 

模擬ANDROID裝置

 

emulator將會在編譯過程中自動新增到你的PATH路徑裡,執行

  1. $ emulator 




相關文章