初始化编译环境 下载源代码

初始化编译环境 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是下列之一:

BuildtypeUse
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 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值