编译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