一、获取Android源代码
Git是Linux Torvalds(Linux之父)为了协助办理Linux内核开发而开发的一个开放源码的分布式版别操控软件,它不同于Subversion、CVS这样的集中式版别操控体系。在集中式版别操控体系中只要一个库房(Repository),许多个作业目录(Working Copy),而在Git这样的分布式版别操控体系中(其他首要的分布式版别操控体系还有BitKeeper、Mercurial、GNU Arch、Bazaar、Darcs、SVK、Monotone等),每一个作业目录都包括一个完好库房,它们支撑离线作业,本地提交能够稍后提交到服务器上。
由于Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,假如咱们别离运用Git来逐一获取显得很费事,所以Android项目编写了一个名为Repo的Python的脚原本统一办理这些项目的库房,使得项目的获取愈加简略。
在Ubuntu 8.04上装置Git只需求设定正确的更新源,然后运用apt-get就能够了,apt-get是一条Linux指令,首要用于主动从互联网的软件库房中查找、装置、晋级、卸载软件或操作体系。
apt-get指令一般需求root权限履行,所以一般跟着sudo指令。
sudo apt-get install git-core curl
这条指令会从互联网的软件库房中装置git-core和curl。
其间curl是一个运用URL语法在指令行方法下作业的文件传输东西,它支撑许多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,咱们需求装置它从网络上获取Repo脚本文件。
curl http://android.git.kernel.org/repo >~/bin/repo
这句指令会下载repo脚本文件到当时主目录的/bin目录下,并保存在文件repo中。
最终咱们需求给repo文件可履行权限
chmod a+x ~/bin/repo
接下来咱们就能够运用repo脚本和Git、curl软件获取Android的源代码了:)
首要建一个目录,比方~/android。
然后运用下面指令获取源码:
repo init –u git://android.git.kernel.org/platform/manifest.git
这个进程会继续很长的时刻(笔者下载了一天),下载结束后会看到repo initialized in /android这样的提示,阐明本地的版别库现已初始化结束,而且包括了当时最新的sourcecode。
假如咱们想拿某个分支版别的代码,而不是主线代码,需求运用-b参数指定branch的姓名,比方:
repo init –u git://android.git.kernel.org/platform/manifest.git –b cupcake
假如咱们仅仅想获取某一个project的代码,比方kernel/common,就不需求repo脚本了,直接运用Git东西即可,假如细心研讨repo脚本会发现,repo脚本其实便是安排Git东西去获取各个Project并把它们安排到同一个项目Android内。
git clone git://android.git.kernel.org/kernel/common.git
咱们上面运用repo脚本获取了各个项目,那么接下来就需求把整个Android代码树同步到本地,如下:
repo sync project1 project2 …
笔者运用repo sync指令直接同步悉数项目到本地。
二、源码编译
悉数同步结束后,进入到Android目录下,运用make指令编译,你会发现呈现如下过错提示:
host C: libneo_cgi = external/clearsilver/cgi/cgi.c
external/clearsilver/cgi/cgi.c:22:18: error: zlib.h: No such file or directory
这个过错是由于咱们短少zlib1g-dev,需求运用apt-get指令从软件库房中装置,如下:
sudo apt-get install zlib1g-dev
同理,咱们还需求顺次装置如下软件
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install gperf
sudo apt-get install libsdl-dev
sudo apt-get install libesd0-dev
sudo apt-get install libncurses5-dev
sudo apt-get install libx11-dev
以上软件悉数装置结束后,运转make指令再次编译Android源码。
这个时分你会发现呈现许多java文件无法编译的过错,翻开Android的源码咱们能够看到在android/dalvik/libcore/dom/src/test/java/org/w3c/domts下有许多java源文件,这意味着编译Android之前需求先装置JDK。
首要从sun官方网站下载jdk-6u16-linux-i586.bin文件并装置它。
在Ubuntu 8.04中,/etc/profile文件是大局的环境变量装备文件,它适用于一切的shell。在咱们登陆Linux体系时,首要发动/etc/profile文件,然后再发动用户目录下的~/.bash_profile、~/.bash_login或~/.profile文件中的其间一个,履行的次序和上面的排序相同。假如~/.bash_profile文件存在的话,一般还会履行~/.bashrc文件。
所以咱们只需求把JDK的目录放到/etc/profile里即可,如下:
JAVA_HOME=/usr/local/src/jdk1.6.0_16
PATH=$PATH:$JAVA_HOME/bin:/usr/local/src/android-sdk-linux_x86-1.1_r1/tools:~/bin
然后重新发动一下机器,输入java –version指令,提示如下信息代表装备成功:
java version 1.6.0_16
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode, sharing)
在编译完好个项目后,终端会呈现如下提示:
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
Installed file list: out/target/product/generic/installed-files.txt
root@dfsun2009-desktop:/bin/android#
三、源码运转
在编译完好个项目后,假如咱们需求观看编译后的运转作用,那么就需求在体系中装置模拟器android-sdk-linux_x86-1.1_r1,这个SDK的下载地址为: