日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【转】ubuntu 11.10(32位系统)下编译android源码

發布時間:2024/9/5 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ubuntu 11.10(32位系统)下编译android源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文網址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html

本文介紹在ubuntu 11.10系統下編譯android 2.3.3源碼,編譯之前請確定上兩篇文章(http://www.cnblogs.com/dwayne/archive/2011/11/16/2250732.html和http://www.cnblogs.com/dwayne/archive/2011/11/11/2245383.html)中所需的準備工作已經成功完成。編譯完成生成系統鏡像文件,并在模擬器中運行。

準備工作完成后,開始編譯工作。下載下來的源碼有5G多,如果按照我之前寫的獲取源碼的話,源碼目錄為~/Android/source

一、環境設置

wayne@wayne-pc:~/Android/source$ source build/envsetup.sh
including device/htc/passion/vendorsetup.sh
including device/samsung/crespo/vendorsetup.sh
wayne@wayne-pc:~/Android/source$ lunch full-eng

在lunch時,如果提示permission denied權限不夠的話,需要在源碼根目錄下執行,賦予目錄下所有文件權限

wayne@wayne-pc:~/Android/source$ sudo chmod -R 777 *

這時候會lunch指令會打印出如下所示文段:

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.3
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRI40
============================================

一、開始編譯

編譯過程可能會出現許多錯誤而中止,在此wayne將會把所有遇到的問題以及解決方法一一貼出來,以供以后參考。

1.Q:

wayne@wayne-pc:~/Android/source$ make -j2
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.3
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRI40
============================================
Checking build tools versions...
build/core/main.mk:76: ************************************************************
build/core/main.mk:77: You are attempting to build on a 32-bit system.
build/core/main.mk:78: Only 64-bit build environments are supported beyond froyo/2.2.
build/core/main.mk:79: ************************************************************
build/core/main.mk:80: *** stop。 停止。

解決方法:cd到源碼根目錄,執行:

$ gedit build/core/main.mk

找到

ifneq (64,$(findstring 64,$(build_arch)))

將其修改為

ifneq (i686,$(findstring i686,$(build_arch)))

然后依次修改以下四個make文件:

external/clearsilver/cgi/Android.mk
external/clearsilver/java-jni/Android.mk
external/clearsilver/util/Android.mk
external/clearsilver/cs/Android.mk

將其中的

LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64

修改為

LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32

2.Q:

frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing ‘const android::RefBase::weakref_impl’ as ‘this’ argument of ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’ discards qualifiers [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1

解決方法:

$ gedit frameworks/base/libs/utils/Android.mk

修改以下語句

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissive

3.Q:

arm-eabi-gcc: error trying to exec 'cc1': execvp: No such file or directory
make: *** [out/target/product/generic/obj/lib/crtbegin_dynamic.o] Error 1

如果之前的依賴包都已經安裝成功的話,此處應該是交叉編譯工具權限的問題。這個問題只要在文章開頭lunch時執行了賦予權限命令,就應該不會遇到了。

4.Q:

<command-line>:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
<built-in>:0:0: note: this is the location of the previous definition
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

此處編譯錯誤是由于ubuntu 11.10采用了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

?

編譯時還有可能出現類似的錯誤,根據錯誤提示的關鍵詞比如g++錯誤、jre錯誤等,都是些細節問題,比較好解決。

經過兩小時左右的等待后,終于順利完成。編譯成功后會生成system.img等鏡像文件,下面是編譯完成提示:

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Installed file list: out/target/product/generic/installed-files.txt

?

三、啟動所編譯的系統

編譯完之后會在out/target/product/generic目錄下生成system.img ramdisk.img userdata.img三個鏡像文件。

在啟動模擬器之前,需要先為模擬器系統設置環境變量,執行gedit ~/.bashrc,新增環境變量如下:

export ANDROID_PRODUCT_OUT=~/Android/source/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/Android/source/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

最后,同步這些變化并啟動模擬器:

$ source ~/.bashrc
$ cd ~/Android/source/out/target/product/generic
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

加載上我們所編譯出來的系統文件,終于出現了期待已久的模擬器:



到這里,源碼編譯就完成了,接下來就可以進行自己的改動測試了。依然,歡迎交流指正By wayne!


作者:Wayne?
出處:http://www.cnblogs.com/dwayne/?
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意請保留此段聲明,且在文章頁面明顯位置給出原文鏈接。?

轉載于:https://www.cnblogs.com/wi100sh/p/4308809.html

總結

以上是生活随笔為你收集整理的【转】ubuntu 11.10(32位系统)下编译android源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。