2024年2月19日发(作者:南门如冬)
Android源代码由两部分组成,其一是Android系统应用部分的代码,其次是Android所使用的内核代码,如果针对Google Nexus S来开发ROM,就需要下载三星的内核代码
Android 系统应用代码:
/platform/manifest
Android内核代码:
/kernel/
准备阶段:设置Linux编译环境(本人是Ubuntu 11.10 ,32位系统),一般你需要以下配置:
Python 2.5 -- 2.7.
GNU Make 3.81 -- 3.82,,
JDK 6 (for Gingerbread or newer); JDK 5( for Froyo or older).
Git 1.7 or newer.
1、安装一些必备的包。
Git是Linux Torvalds为了帮助管理Linux内核而开发的一个开放源码的分布式版本控制系统软件,它不同于SVN,CVS这样集中式的版本控制系统。在集中式版本控制系统中只有一个仓库(repository),许多个工作目录,而git这样的分布式控制系统中,每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中 式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而收到影响?
因为Android是由kernel,Dalvik,Bionic,prebuild,build等多个Git项目组成,
所以Android项目编写了一个名为repo的python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。
$ sudo 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
$ sudo apt-get install libx11-dev:i386
2、创建源代码目录
首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它加到PATH环境变量中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH 或者 $export PATH=$PATH:~/bin
3、用curl下载repo脚本,并保存在~/bin/repo文件中:
$ curl /dl/googlesource/git-repo/repo > ~/bin/repo
为repo加上执行权限
$ chmod a+x ~/bin/repo
4、初始化版本库
首先建立一个目录,用来存放下载下来的东西
$mkdir MyAndroid
$cd MyAndroid
以后,执行如下命令
$ repo init -u /platform/manifest -b android-2.3.7_r1
我这里下载的是android2.3.7版本的,所用的参数是android-2.3.7_r1。由于最新的是
android-4.0.3_r1,所以使用上面即可下载2.3.7的源代码
注意:如果要是把所有的版本都下载下来,那时间是需要很久很久的,需要耐心等待,但是如果仅仅是下载某一个版本的话,还是很快就可以了。
最后,如果看到repo initialized in /MyAnroid的提示,说明本地的版本库已经初始化成功了(期间需要你填写姓名和Gmail地址)。
5、执行repo sync命令
$repo sync
如果出现如下的字样的话,说明下载完成了:
Syncing work tree:100%(168/168),done.
这个下载过程同样需要很久,少则几个小时,多则几天,依赖于网速。
6、编译Android系统应用的源代码
$cd ~/MyAndroid
这里的这个MyAndroid目录其实就是你下载后源代码所在的位置,查看该文件夹下的东西类似如下
|-- Makefile |-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性测试套件标准)
|-- dalvik (dalvik JAVA虚拟机)
|-- development (应用程序开发相关)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (主要保护硬解适配层HAL代码)
|-- out (编译完成后的代码输出与此目录)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (文件系统库、应用及组件——C语言)
这时,如果直接执行make命令的话,会出现错误,这是因为在make(编译)之前,需要安装一些依赖包才能够正常编译,否则会出现各种各样的问题。
7、编译android 2.3.7系统源代码
首先,需要注意的是,下载后的源代码先不要编译,最好备份一下,然后再编译。不能直make。
(1)进入到你的bin目录下,清理编译过的文件,释放空间
$make installclean
$make clean
(2)用脚本初始化环境变量
$source build/
或者
$. build/
(3)选择版本号,执行lunch操作
这里我选择了 1。直接在emulator上跑。
(4)开始编译源代码
$make -j4
其中-j(n)表示用n核cpu编译,这样会更快速,可以用top命令查看cpu的个数
完成编译大约1个小时左右
8、以下是各种错误对应的解决办法:
编译过程中可能会遇到一些错误,把错误直接google,一般都能找到解决方法的。编译成功后,会在~/MyAndroid/目录下得到~/MyAndroid/out/target/product/generic。编译好的源代码会在out目录下生成两个img镜像文件,可以先执行$updatedb 创建数据库,用来方便查询所需的文件:
$locate
$locate
9、配置环境变量
在编译过程中,系统会自动为你设置好必要的环境变量的。
10、在模拟器上运行编译好的镜像文件
$ emulator
最后进入android桌面,就说明成功了。 但是上面的只是系统应用源码编译完成后,用google自带的模拟器来运行测试的,如果需要在Nexus S上的话,需要三星的内核编译,所以还需要其他的动作要进行。这个我还有做,所以等到以后再做总结。以上的总结主要来自网上,自己也做了一下修改。
2024年2月19日发(作者:南门如冬)
Android源代码由两部分组成,其一是Android系统应用部分的代码,其次是Android所使用的内核代码,如果针对Google Nexus S来开发ROM,就需要下载三星的内核代码
Android 系统应用代码:
/platform/manifest
Android内核代码:
/kernel/
准备阶段:设置Linux编译环境(本人是Ubuntu 11.10 ,32位系统),一般你需要以下配置:
Python 2.5 -- 2.7.
GNU Make 3.81 -- 3.82,,
JDK 6 (for Gingerbread or newer); JDK 5( for Froyo or older).
Git 1.7 or newer.
1、安装一些必备的包。
Git是Linux Torvalds为了帮助管理Linux内核而开发的一个开放源码的分布式版本控制系统软件,它不同于SVN,CVS这样集中式的版本控制系统。在集中式版本控制系统中只有一个仓库(repository),许多个工作目录,而git这样的分布式控制系统中,每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中 式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而收到影响?
因为Android是由kernel,Dalvik,Bionic,prebuild,build等多个Git项目组成,
所以Android项目编写了一个名为repo的python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。
$ sudo 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
$ sudo apt-get install libx11-dev:i386
2、创建源代码目录
首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它加到PATH环境变量中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH 或者 $export PATH=$PATH:~/bin
3、用curl下载repo脚本,并保存在~/bin/repo文件中:
$ curl /dl/googlesource/git-repo/repo > ~/bin/repo
为repo加上执行权限
$ chmod a+x ~/bin/repo
4、初始化版本库
首先建立一个目录,用来存放下载下来的东西
$mkdir MyAndroid
$cd MyAndroid
以后,执行如下命令
$ repo init -u /platform/manifest -b android-2.3.7_r1
我这里下载的是android2.3.7版本的,所用的参数是android-2.3.7_r1。由于最新的是
android-4.0.3_r1,所以使用上面即可下载2.3.7的源代码
注意:如果要是把所有的版本都下载下来,那时间是需要很久很久的,需要耐心等待,但是如果仅仅是下载某一个版本的话,还是很快就可以了。
最后,如果看到repo initialized in /MyAnroid的提示,说明本地的版本库已经初始化成功了(期间需要你填写姓名和Gmail地址)。
5、执行repo sync命令
$repo sync
如果出现如下的字样的话,说明下载完成了:
Syncing work tree:100%(168/168),done.
这个下载过程同样需要很久,少则几个小时,多则几天,依赖于网速。
6、编译Android系统应用的源代码
$cd ~/MyAndroid
这里的这个MyAndroid目录其实就是你下载后源代码所在的位置,查看该文件夹下的东西类似如下
|-- Makefile |-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性测试套件标准)
|-- dalvik (dalvik JAVA虚拟机)
|-- development (应用程序开发相关)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (主要保护硬解适配层HAL代码)
|-- out (编译完成后的代码输出与此目录)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (文件系统库、应用及组件——C语言)
这时,如果直接执行make命令的话,会出现错误,这是因为在make(编译)之前,需要安装一些依赖包才能够正常编译,否则会出现各种各样的问题。
7、编译android 2.3.7系统源代码
首先,需要注意的是,下载后的源代码先不要编译,最好备份一下,然后再编译。不能直make。
(1)进入到你的bin目录下,清理编译过的文件,释放空间
$make installclean
$make clean
(2)用脚本初始化环境变量
$source build/
或者
$. build/
(3)选择版本号,执行lunch操作
这里我选择了 1。直接在emulator上跑。
(4)开始编译源代码
$make -j4
其中-j(n)表示用n核cpu编译,这样会更快速,可以用top命令查看cpu的个数
完成编译大约1个小时左右
8、以下是各种错误对应的解决办法:
编译过程中可能会遇到一些错误,把错误直接google,一般都能找到解决方法的。编译成功后,会在~/MyAndroid/目录下得到~/MyAndroid/out/target/product/generic。编译好的源代码会在out目录下生成两个img镜像文件,可以先执行$updatedb 创建数据库,用来方便查询所需的文件:
$locate
$locate
9、配置环境变量
在编译过程中,系统会自动为你设置好必要的环境变量的。
10、在模拟器上运行编译好的镜像文件
$ emulator
最后进入android桌面,就说明成功了。 但是上面的只是系统应用源码编译完成后,用google自带的模拟器来运行测试的,如果需要在Nexus S上的话,需要三星的内核编译,所以还需要其他的动作要进行。这个我还有做,所以等到以后再做总结。以上的总结主要来自网上,自己也做了一下修改。