Ubuntu 10.04 64位下源码编译android-4.0.4_r2.1

参考网站 http://source.android.com

具体步骤如下:

ubuntu默认情况是用普通用户进行登录系统的,我为了操作简便也就以root用户进行了登录。从普通用户切换的root用户登录需要做如下几个步骤;

我建的普通用户名为joye

$ sudo passwd root      (此处是为root用户设置密码)

然后输入一个为root创建的密码,在输入一次进行确认。再执行以下命令

$ gksu natutilus

之后点击右上角的关机按钮下拉菜单中,有一个切换用户,以root身份登录就行了。

下面我们开始android 环境的搭建:

首先我们需要做一些准备工作,具体如下

1、安装python2.5-2.7

2、GNU Make 3.81-3.82

3、JDK6 JDK5 (注:最好两者都安装上)

4、Git 1.7

安装python2.5-2.7

默认情况下是已经安装过的,我们可以通过以下命令查看是不是安装过python

#dpkg -l python  

提示为 ii python 后面为版本号 则表示已经安装

如果没有安装我们可以使用命令进行安装

#apt-get install python

 

安装GNU Make

默认已经安装,如果没有安装,使用以下命令进行安装

#apt-get install make

查看是否已经安装使用以下命令

#dpkg -l make

 

安装jdk6 jdk 5

我先安装的是jdk6

#add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse  

(注:与参考网站上提供的网站不同)

#apt-get update

#apt-get install sun-java6-jdk

然后安装jdk5

#add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"

#add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"

#apt-get update

#apt-get install sun-java5-jdk

安装完成后使用命令

#java -version

验证是否成功

 

安装Git

#apt-get install git-core

(关于git后面会在进行设置)

 

5、安装编译所需软件包

#apt-get install git-core gnupg flex bison gperf build-essential \

  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \

  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \

  Libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \

  libxml2-utils xsltproc

 

此处要特别注意的是字母“l”和数字“1”的区别,好些人敲了好些次的命令都不正确,才发现把这两个给弄错了。我平时都是把数字“1”替换成“9”,给字母“l”做区别。当然输入一定要认真了。

6、配置USB访问权限

  GNU/Linux系统下(特别是Ubuntu系统下),默认配置下普通用户不能直接访问usb设备,需要对系统进行一些配置。

  root用户创建新配置文件/etc/udev/rules.d/51-android.rules,并将以下内容拷贝到新配置文件中:

# adb protocol on passion (Nexus One)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"

# fastboot protocol on passion (Nexus One)

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"

# adb protocol on crespo/crespo4g (Nexus S)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"

# fastboot protocol on crespo/crespo4g (Nexus S)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"

# adb protocol on stingray/wingray (Xoom)

SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"

# fastboot protocol on stingray/wingray (Xoom)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"

# adb protocol on maguro/toro (Galaxy Nexus)

SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"

# fastboot protocol on maguro/toro (Galaxy Nexus)

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"

# adb protocol on panda (PandaBoard)

SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"

# fastboot protocol on panda (PandaBoard)

SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"

# usbboot protocol on panda (PandaBoard)

SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"

# usbboot protocol on panda (PandaBoard ES)

SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"

并将以上内容中的

"<username>" 修改为用户名 如我的用户名 "joye"

 

7、下载源码

首先确保在你的用户目录下有一个 bin目录,添加到PATH路径

#mkdir ~/bin

添加环境变量我介绍两种方法

如果你只是临时性的添加修改,下次开机就无效的话,可以输入

PATH=~/bin:$PATH

如果下次开机仍然生效,我把他添加到了/etc/profile文件中,使用以下命令

#nano /etc/profile

在文件的最后添加以下两行

PATH="/root/bin/:$PATH"

export PATH

Ctrl+x退出 y保存,enter返回终端

 

下载repo脚本文件,确保这个文件有执行权限,执行以下命令

#curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

#chmod a+x ~/bin/repo

初始化repo客户端

创建工作目录,用于存放android源码

#mkdir working_directory

#cd working_directory

获取repo最新的配置

#repo init -u https://android.googlesource.com/platform/manifest

(上面的-u用来指定在当前目录安装repository ,会在当前目录下创建一个目录".repo"

-u参数指定一个URL,从这个URL中取得repositorymanifest文件,获取的manifest文件放在.repo目录中。命名为manifest.xml 这个文件的内容其实就是所有被git管理的仓库的列表。)具体内容参见: http://wenku.baidu.com/view/34580eb8fd0a79563c1e729a.html

(上面网址引用别人的)

指定一个manifest分支,使用-b参数

#repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.4_r2.1

获取源码

#repo sync

如果中间出现中断,这个很正常,你可以再次输入 repo sync 命令来进行下载

知道下载完成为止。

 

8、使用验证

首先在用户宿主目录下新建一个文件 .netrc 然后使用google账号进行验证 

点击红色标记部分会提示你输入google账号和密码

使用nano命令打开 .netrc 把标记的这部分内容给粘贴到.netrc.里面 (我的google账号

用户名:xxxxx 密码 xxxxxx  (自己申请)

具体操作如下

 在宿主用户目录下新建文件

#touch .netrc

#nano ~/.netrc

然后把上面的那段文字复制到上面 crtl+x  退出,提示是否使用文件名.netrc ,点击 y 确认,然后点击 enter 保存退出。

 

9、验证git标签

#gpg --import

然后把下面的内容复制粘贴上去 crtl+d 退出

-----BEGIN PGP PUBLIC KEY BLOCK-----

Version: GnuPG v1.4.2.2 (GNU/Linux)

 

mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV

lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7

8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD

u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z

wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq

/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5

jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4

MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9

b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv

aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k

cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX

gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI

2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl

QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up

hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk

C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX

LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+

OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M

pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s

KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb

N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA

vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo

G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ

hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l

EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=

=Wi5D

-----END PGP PUBLIC KEY BLOCK-----

然后初始化git

#git init

#ls -A

如果可以看到.git则表示成功

 

10、设置ccache

.bashrc 文件中输入以下内容,具体如下

#nano /root/.bashrc

输入下面内容

export USE_CCACHE=1

设置cache目录大小 此处设置为50G (注意:在源码目录下输入以下命令)

prebuilt/linux-x86/ccache/ccache -M 50G

 

11、搭建系统

初始化 输入命令(在源码目录下 /root/working_directory/)

#source build/envsetup.sh

或者

#. build/envsetup.sh

然后选择编译目标

#lunch full-eng

编译

#make -j4

完成之后输入命令

#emulator

就可以看到虚拟设备了。