最近一段時間在編譯Android 的source code的部分工做,網上的許多資料都廢話太多,下面是我將其精簡出來的版本。html
(個人編譯環境是 ubuntu linux 12.04 64bit)java
首先須要安裝一些依賴環境:(http://source.android.com/source/initializing.html)python
1、配置環境linux
根據我這種環境須要執行的命令有:android
$ 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
2、下載代碼git
有一下步驟:(http://source.android.com/source/downloading.html)ubuntu
一、下載Repoapi
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
二、而後用Repo初始化倉庫URL和branchbash
$ repo init -u https://android.googlesource.com/platform/manifest $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
三、根據提示輸入一些你的google帳戶等等markdown
3、同步數據
這時候纔是真正的下載代碼數據的時候了,
我下載的時候這個倉庫整個已經有20GB,花了整整一個晚上,由於用了國外代理因此速度還算比較快並且中間沒有斷開過。
$ repo sync
若是你在大陸由於網絡的問題常常斷開的話,建議寫一個bash循環下載,由於它是支持斷點續傳的。
4、開始編譯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 unlockfastboot flash boot boot.imgfastboot flash system system.imgfastboot flash userdata userdata.imgfastboot erase cache