廢話少說,進入正題
1. 下載原始碼。
2. 啟動終端,進入android工作目錄。
3. 編譯手機,make -jN編譯,N代表數字,我的cpu是i5,我用的是make -j4,期間出現很多錯,下面會一一介紹。
4. 編譯模擬器,make sdk -j2。網上抄來的命令,我沒改成j4實驗。網上說大概30分鐘,我這大概編譯了1個多小時,期間電腦特卡,基本什麼都幹不了。
【 source build/envsetup.sh】
【lunch sdk-eng】
【make sdk -j2】
5. 進入out/host/linux-x86/sdk/android-sdk_eng.t_linux-x86/tools$這個目錄。
6. 輸入【./android list targets】可以察看sdk版本號碼。
7. 建立avd,【 ./android create avd -n mydroid -t 1】。
8. 執行命令【 ./mksdcard 4000M .img】
9. 運行模擬器【 ./emulator -avd mydroid】。
下面說一下編譯android源碼錯誤解決方案:
1. 命令列>:0:0: 錯誤: “_FORTIFY_SOURCE”重定義 [-Werror]
修改 build/core/combo/HOST_linux-x86.mk檔案的line 56
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
改為
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
2.
In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: 錯誤: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 錯誤 1
修改external/oprofile/libpp/format_output.h:94行
mutable counts_t & counts;
改為:
counts_t & counts;
3.
external/gtest/src/../include/gtest/internal/gtest-param-util.h:122:11: 錯誤: ‘ptrdiff_t’不是一個類型名
In file included from external/gtest/src/../include/gtest/gtest-param-test.h:157:0,
from external/gtest/src/../include/gtest/gtest.h:69,
from external/gtest/src/gtest_main.cc:32:
修改檔案external/gtest/include/gtest/internal/gtest-param-util.h中添加#include <cstddef>, 位置如下:
#include <gtest/internal/gtest-linked_ptr.h>
#include <gtest/internal/gtest-internal.h>
#include <cstddef>
4.
/home/t/WORKING_DIRECTORY/external/llvm/lib/Support/Mutex.cpp:143: undefined reference to `pthread_mutex_trylock'
collect2: ld 返回 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/test-librsloader_intermediates/test-librsloader] 錯誤 1
make: *** 正在等待未完成的任務....
In file included from external/gtest/src/gtest-all.cc:38:0:
在external/llvm/llvm-host-build.mk中增加如下代碼:
LOCAL_LDLIBS := -lpthread -ldl
5.
frameworks/compile/slang/slang_rs_export_foreach.cpp:247:23: 錯誤: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]
host C++: llvm-rs-cc <= frameworks/compile/slang/slang_rs_reflection.cpp
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 錯誤 1
修改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
參考於:
http://blog.csdn.net/zhbpd/article/details/7680835
http://blog.csdn.net/forlong401/article/details/7066893
6.
cts/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java:191: android.app.Activity 中的 onCreateDialog(int,android.os.Bundle) 無法實現 com.android.cts.verifier.PassFailButtons.PassFailActivity 中的 onCreateDialog(int,android.os.Bundle);正在嘗試指定更低的存取權限;為
public
private static <T extends android.app.Activity & PassFailActivity>
^
1 錯誤
make: *** [out/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-debug.jar] 錯誤 41
make: *** 正在等待未完成的任務....
DroidDoc took 2702 sec. to write docs to out/target/common/docs/doc-comment-check
修改cts/Android.mk檔案,去掉兩行include代碼。
#include cts/CtsTestCoverage.mk
#include $(call all-subdir-makefiles)
7. 如果按照google網站的說明下載,編譯,解決完上面6個錯誤就可以編譯完成了。我的配置是:
ubuntu12.04
android 4.0.3
如果您和我的配置一樣,又想一次編譯成功,就直接按上面說的修改這6出檔案,make就等著結果吧!
8. 運行 emulator 提示 emulator: WARNING: system partition size adjusted to match image file (166 MB > 66 MB)
所需空間不足
修改:emulator 加入參數 -partition-size 1024 (大於系統所要求的尺寸)即可,例如 emulator -partition-size 1024
參考:http://www.2cto.com/os/201205/130064.html