编译Android OS源代码

最近一段时间在编译Android 的source code的部分工作,网上的许多资料都废话太多,下面是我将其精简出来的版本。

(我的编译环境是 ubuntu linux 12.04 64bit)

首先需要安装一些依赖环境:(http://source.android.com/source/initializing.html

一、配置环境

根据我这种环境需要执行的命令有:

$ sudo apt-get install sun-java6-jdk
$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

二、下载代码

有一下步骤:(http://source.android.com/source/downloading.html

1、下载Repo

$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

2、然后用Repo初始化仓库URL和branch

$ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

3、根据提示输入一些你的google账户等等

三、同步数据

这时候才是真正的下载代码数据的时候了,

我下载的时候这个仓库整个已经有20GB,花了整整一个晚上,因为用了国外代理所以速度还算比较快而且中间没有断开过。

$ repo sync

如果你在大陆因为网络的问题经常断开的话,建议写一个bash循环下载,因为它是支持断点续传的。

四、开始编译android

编译的过程其实还好,网上蛮多资料可查,我都是一步一步踏着前人的肩膀摸索过来的。

主要参考网址:http://source.android.com/source/building-running.html

下面附带一些编译时候常见出现的问题:

Error:

make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] Error 1

解决办法:

$ sudo apt-get install libc6-dev-i386

 

Error:

make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

解决办法:

$ sudo apt-get install lib32z1-dev

 

Error:

make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1

解决办法
$ sudo apt-get install lib32ncurses5-dev

 

Error:

make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

解决办法:

此处编译错误是由于ubuntu 12.04采用GCC4.6.1导致的。

修改文件 /build/core/combo/HOST_linux-x86.mk

将以下语句

HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

修改为

HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

 

Error:

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1

解决办法:

修改文件 /frameworks/base/libs/utils/Android.mk

修改以下语句

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

改成

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissive

 

Error:

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] Error 1

解决办法:

modify this file: external/oprofile/libpp/format_output.h 

将以下代码

mutable counts_t & counts; 

改成

counts_t & counts;

 

Error:

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libgtest_host_intermediates/gtest-all.o] Error 1

解决办法:

modify this file: external/gtest/include/gtest/internal/gtest-param-util.h

增加一行:

#include <cstddef>

 

Error:

make: *** [out/host/linux-x86/obj/EXECUTABLES/test-librsloader_intermediates/test-librsloader] Error 1

解决办法:

modify this file: external/llvm/llvm-host-build.mk

Add this line:

LOCAL_LDLIBS := -lpthread -ldl

 

Error:

make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] Error 1

解决办法:

modify this file: frameworks/compile/slang/Android.mk

将以下

local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror

修改成

local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter

 

Error:

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libMesa_intermediates/src/glsl/linker.o] Error 1

解决办法:

Eidt this file: external/mesa3d/src/glsl/linker.cpp 

增加一行: 

 #include <cstddef>

 

最终将编译好的img文件,刷进手机就OK啦~~

在这个之前可以对android的源代码做适当的修改,自定义自己的ROM就这么简单,马上试一试吧。

fastboot oem unlock
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash userdata userdata.img
fastboot erase cache

posted @ 2013-12-05 15:41 重庆Debug 阅读(...) 评论(...) 编辑 收藏