編譯Android OS源代碼

最近一段時間在編譯Android 的source code的部分工做,網上的許多資料都廢話太多,下面是我將其精簡出來的版本。html

(個人編譯環境是 ubuntu linux 12.04 64bit)java

首先須要安裝一些依賴環境:(http://source.android.com/source/initializing.htmlpython

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.htmlubuntu

一、下載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

相關文章
相關標籤/搜索