如何编译Android OS源代码以构建自定义版本?

摘要:最近一段时间在编译Android 的source code的部分工作,网上的许多资料都废话太多,下面是我将其精简出来的版本。(我的编译环境是 ubuntu linux 12.04 64bit)首先需要安装一些依赖环境:(http:sou
最近一段时间在编译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