Android2.3.4源码编译过程
2014年02月07日 00:33:49 Android ⁄ 共 4575字 暂无评论 ⁄ 被围观 1,722次

1、编译android系统

1.1 准备工作

需要Sun JDK 1.6(Android 2.2版本需要Sun JDK 1.5)

$sudo apt-get install sun-java6-jdk

还需要安装一些其他的包:

$ sudo apt-get install gcc g++ flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libreadline5-dev

$sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++

1.2 修改源代码

这一步骤是针对32位系统的,如果你的机器是64位的,此步可以跳过,不用修改

修改原因:android高于froyo/2.2版本,需要在64位机器上编译。

修改内容:

1、~/android-2.3.4_r1/build/core/main.mk:

将76行的 “ifneq (64,$(findstring64,$(build_arch)))” 替换成 “ifneq (i686,$(findstring i686,$(build_arch)))”

2、

~/android-2.3.4_r1/external/clearsilver/cgi/Android.mk

~/android-2.3.4_r1/external/clearsilver/java-jni/Android.mk

~/android-2.3.4_r1/external/clearsilver/util/Android.mk

~/android-2.3.4_r1/external/clearsilver/cs/Android.mk

将以上四个文件中的

LOCAL_CFLAGS += -m64

LOCAL_LDFLAGS += -m64

修改为:

LOCAL_CFLAGS += -m32

LOCAL_LDFLAGS += -m32

1.3 编译过程

1. 切入源码目录(以~/android-2.3.4_r1为例)

$ cd ~/android-2.3.4_r1

2. $ . build/envsetup.sh

3. $ lunch

选择generic_eng(或generic_x86,应该只有其中一个)

4. $ make -j2 <注>:-j2 是选择2个线程同时编译(网上这么说的)

5. 坐等。

6. 编译完的系统在~/android-2.3.4_r1/out/target/product/...下

 

1.4 验证

在~/android-2.3.4_r1/out/target/product/generic目录下生成 userdata.img system.img ramdisk.img

 

2 编译 Android SDK

2.1 编译过程

1.切入源码目录

$ cd ~/android-2.3.4_r1

2.$ make PRODUCT-sdk-sdk

<注>:也可以使用 $make sdk 命令,“make PRODUCT-sdk-sdk” 命令是对“make sdk”的扩展,原因是使用“make sdk”时,不能自动生成R文件,必须手动生成。但有时使用“make sdk”也没有问题。

2.2 验证

编译完会在~/android-2.3.4_r1/out/host/linux-x86/sdk下,有一个zip文件和一个文件夹(相当于那个zip文件解压后的产物),例如:

android-sdk_eng.fanm_linux-x86

android-sdk_eng.fanm_linux-x86.zip

你需要拿走一个备份,不然你在做其他动作的时候很可能就会把sdk清空了,特别是编译ADT时,sdk这个目录就被清理没了。

2.3 可能出现的问题及解决方法

1、couldn't locate source file: usr/share/pc-bios/bios.bin

couldn't locate source file: usr/share/pc-bios/vgabios-cirrus.bin

注意,这里的usr/share目录指的是Android2.3.4/out/host/linux-x86目录下的usr/share目录

修改办法:复制Android2.3.4/prebuilt/common下的pc-bios文件夹到Android2.3.4/out/host/linux-x86/usr/share即可

2、找不到ddmlib-tests.jar、 ninepath-tests.jar 、common-tests.jar 和sdkuilib-tests.jar文件,可能还有其他类似的文件,不定,但修改方法一致

修改办法: 在Android2.3.4/out/host/linux-x86/framework这个目录下,可以找到以下几个文件common.jar、ddmlib.jar、ninepatch.jar、sdkuilib.jar这四个文件,然后将它们分别复制一份,并重命名,命名的原则很简单,就是在原有的名字后面跟上-tests即可

 

3 编译Android内核(此步可以不做)

3.1 准备过程

准备交叉编译工具:

到http://sourcery.mentor.com/gnu_toolchains

下载arm的交叉编译工具。不同的工具效果可能不同,甚至可能引起编译失败,但我并未对此做许多测试。我下载的是arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2。

解压之后将之sudo cp到/usr/local目录下,(以/usr/local/arm-2011.03为例)

然后:

$ export PATH=$PATH:/usr/local/arm-2011.03/bin

另外还要看一下arm-2011.03/bin下的编译工具都是以什么开头的,如arm-none-eabi-,或者可能是arm-none-linux-gnueabi-等,将它记下来(下文用{CCPREFIX}表示)

3.2 编译过程

1. 切入Android内核源码目录(以~/android-kernel-src/common为例)

$ cd ~/android-kernel-src/common

2. 查看分支

$ git branch -a

3. 选择Goldfish中的最新版本,如android-gldfish-2.6.29

$ git checkout remotes/origin/archive/android-gldfish-2.6.29

4. 坐等。

5. $ make ARCH=arm CROSS_COMPILE={CCPREFIX} goldfish_defconfig

6. $ make ARCH=arm CROSS_COMPILE={CCPREFIX}

7. 坐等。

8. 编译完之后在内核源码目录下arch/arm/boot下生成了个zImage文件,就是内核文件,把它拿走备份即可。

 

4 编译ADT Eclipse Plugin

可以编译android源码自带的ADT,也可以编译其他版本的。以自带的为例:

4.1 编译过程

1. $ cd ~/android-2.3.4_r1/sdk/eclipse/scripts

2. 如果不事先设置好ECLIPSE_HOME环境变量的话,下一步的脚本就会自己尝试下载Eclipse Ganymede(一个好老的版本),反正我是没下载成功,估计又是涉及到代理的问题。所以最好是事先准备好一个,推荐Eclipse RCP & RAP Developers (Indigo),下载地址:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/indigo/R/eclipse-rcp-indigo-linux-gtk.tar.gz

下载完后解压

3. $ export ECLIPSE_HOME=你的eclipse解压后的地址

4. $ ./build_server.sh ~/adt <注>: ~/adt 是你指定生成adt的目录,要事先创建好

4.2 验证

在~/adt目录里生存一个zip文件,就是插件文件,拿出来备份。例如:android-eclipse-v201110311437.zip

 

5 组装

1. 把你之前备份的SDK目录(zip文件的话解压出来一个目录)、内核文件和ADT插件准备好。

2. 打开Eclipse,选择help里的Install New Software,Add->archive->选择刚刚生成的ADT插件(android-eclipse-v201110311437.zip)->OK->Selct All->Next->...,把ADT装好。(如果安装过程发现很慢,可以把网线拔掉,这样会很快)

3. 打开Eclipse的Windows->Preferences,左边树状结构中找“Android”,然后指定SDK所在地址,这时应该会出现问题,点击Apply后目标平台列表里依然没有东西。

4. 遇到上述情况后,找到SDK根目录,把tools/和platform-tools/目录全都复制到platforms/android_2.3.5/下,把/platform-tools目录下的adb复制到/tools目录下,再次执行上述操作,问题应该已经解决。

5. 那么就可以点击Eclipse中的机器人图标,新建一个模拟器(很有可能右边一排按钮看不到,试着调整窗口大小,拉动中间的splitter,总会看到的),运行一下试试。

6. 没有问题之后尝试用我们自己编译的内核替换掉原配内核。打开SDK根目录下的platforms/android_2.3.5/images,把kernel-qemu文件备份,再把准备好的内核文件改名为kernel-qemu后放进去。(如果没有编译内核,这步可以跳过)

7. 重新运行这个机器,如果能正常启动,那么恭喜了。

8. 最后试着用Eclipse新建一个Android默认工程,运行在模拟器上,如果能正常运行,那么恭喜了。

也可以在命令行中运行模拟器:

$cd ~/android-2.3.4_r1/out/host/linux-x86/sdk/tools

$./emulator -system ~/android-2.3.4_r1/out/target/product/generic/system.img -data ~/android-2.3.4_r1/out/target/product/generic/userdata.img -ramdisk ~/android-2.3.4_r1/out/target/product/generic/ramdisk.img

还可以设置环境变量

export PATH=$PATH:/home/android-2.3.4_r1/out/host/linux-x86/bin

export ANDROID_PRODUCT_OUT=/home/android-2.3.4_r1/out/target/product/generic/

设置完之后,可以在终端中运行模拟器:

$emulator

给我留言

留言无头像?