Ubuntu12.04 編譯android原始碼及產生模擬器經曆分享

來源:互聯網
上載者:User

廢話少說,進入正題

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.