2013年5月18日 星期六

在 Ubuntu 12.04 編譯 android source code

1. 安裝jdk

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer

2. 設定環境

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

* 通常裝libgl1-mesa-glx:i386會有依賴性問題,所以先sudo apt-get install libglapi-mesa:i386
桌機的話裝libgl1-mesa-glx-lts-quantal:i386也沒有問題

3. 安裝repo

mkdir ~/bin
PATH=~/bin:$PATH

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo //can not use

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

4. 初始化repo

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

5. 下載source code

repo sync

6. 編譯

source build/envsetup.sh
lunch full-eng
make -jN

7. 錯誤
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 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 

external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]

external/oprofile/libpp/format_output.h  
  
把:  
mutable counts_t & counts;  
改为:  
counts_t & counts;

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

external/gtest/src/../include/gtest/internal/gtest-param-util.h 
添加:  
#include <cstddef>

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

$vim external/llvm/llvm-host-build.mk  
  
在文件中插入一行:  
LOCAL_LDLIBS := -lpthread -ldl

frameworks/compile/slang/slang_rs_export_foreach.cpp:247:23: error: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] Error 1
make: *** Waiting for unfinished jobs....


$ vim frameworks/compile/slang/Android.mk  
  
将 local_cflags_for_slang 所在行最后的 -Werror 去掉:  
  
#local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror  
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter

如果有一些XXX killed的問題,就單純用make就好了,不要-jN

記憶體配太小的話可能會出現
make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex] Killed

2 則留言: