ZircoN

          32位Ubuntu 11.10下android2.3.7源碼下載與編譯小結(jié)

          1、我是在vmware下安裝ubuntu 11.10的,這個網(wǎng)上資料很多,不多說了。我給ubuntu分了25g硬盤和1g內(nèi)存。

          2、請參照http://source.android.com/source

          初始化編譯環(huán)境

          檢查一下包是否安裝:

          Python 2.4-2.7

          Git 1.5.4 或更高版本

          沒有話可以sudo apt-get install..安裝一下

          JDK 6 因為是編譯android2.3以上,如果編譯2.2以下需要JDK5

          安裝JDK6

          $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
          $ sudo apt
          -get update
          $ sudo apt
          -get install sun-java6-jdk

          如果下載速度不行,可以先把ubuntu的更新源改成網(wǎng)易的源,可參考:http://bolg.malu.me/html/2010/279.html

          其他需要安裝的包:

          我安裝了如下包:官網(wǎng)上那是64位需要安裝的包,我是32位的有些不一樣。

          $ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev x11proto-core-dev libx11-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils

          3、下面開始下載源碼

          首先安裝repo(是一個便于git管理的工具)

          $ mkdir ~/bin
          $ PATH
          =~/bin:$PATH
          $ curl https:
          //dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
          $ chmod a+~/bin/repo

          初始化repo client

          $ mkdir android2.3.7
          $ cd android2.
          3.7

          初始化repo,我是使用的下面的地址,使用官網(wǎng)地址時出現(xiàn)了網(wǎng)絡(luò)錯誤

          $ repo init -u http://android.googlesource.com/platform/manifest.git -b android-2.3.7_r1

          按照提示輸入用戶名和郵箱。

          接著

          $ repo sync

          開始同步源碼,根據(jù)你的網(wǎng)速,我的持續(xù)了50分鐘左右。

          還有一步驗證git tags可參照官網(wǎng)。下完后就可以在剛才創(chuàng)建的android2.3.7文件夾下看見已下載的源碼。

          4、開始編譯

          初始化:

          $ source build/envsetup.sh
          $ lunch full
          -eng

          上面代表編譯的一個targetfull是針對emulator編譯全部包括app、輸入法等,eng是指針對開發(fā)者編譯,有最高權(quán)限。具體可參見官網(wǎng)。

          接著就可以編譯了,在源碼目錄下直接make就行,需要一段時間。

          編譯過程中有幾個問題需要指出一下:

          問題1

          由于我們是32位系統(tǒng),所以有些文件需要修改一下:將

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

          注釋掉,或者將“64”換成“32”

          LOCAL_CFLAGS += -m32
          LOCAL_LDFLAGS 
          += -m32

          然后,將./build/core/main.mk 中的

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

          改為:

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

          問題2

          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

          <command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]

          <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

          這是由于11.10gcc版本過高造成的,可參考這篇文章修改:http://hi.baidu.com/designhouse/blog/item/fec5cdbf8d6a231618d81fc1.html

          至此編譯完畢。

          make編譯的并不是所有內(nèi)容,不包含內(nèi)核和SDK。

          映像生成在out/target/product/generic下:android源碼編譯后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是一個分區(qū)映像文件,在kernel啟動時,ramdisk被用來調(diào)用init,以及把真正的root file system mount起來。system.img包括了主要系統(tǒng),系統(tǒng)app等,會被掛載到/下,可對應查看./system該目錄,可以發(fā)現(xiàn)在其下app/下有一些系統(tǒng)自帶的應用程序。userdata.img包括了一些用戶數(shù)據(jù),被掛載到/data下,對應可查看./data/目錄,emulator加載這3個映像文件。

          5、編譯SDK

          編譯SDK可以得到與源碼同步的SDK,還會生成一些tools,在源碼根目錄下:

          $ sudo make PRODUCT-sdk-sdk

          編譯生成的SDK在out/host/linux-x86/SDK下。之后如果在ubuntu下使用eclipse進行開發(fā),可以使用你編譯的SDK。

          下面就在模擬器中運行鏡像,建議切到root用戶下,首先配置幾個環(huán)境變量,將自己編譯的SDK設(shè)為優(yōu)先級最高,在源碼根目錄下執(zhí)行:

          $ update-alternatives --install /usr/bin/AndroidSDK AndroidSDK ./out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86 255

          這樣會在/etc/alternatives下生成一個指向該SDK目錄的軟連接AndroidSDK,這個目錄主要存放一些系統(tǒng)默認打開的程序的信息和配置。那么/usr/bin/AndroidSDK就指向這個軟連接。接著執(zhí)行:

          gedit ~/.bashrc

          在文件末尾添加:

          export ANDROID_SDK_HOME=/usr/bin/AndroidSDK
          export PATH
          =$ANDROID_SDK_HOME/tools:$PATH
          export ANDROID_PRODUCT_OUT
          =~/android2.3.7/out/target/product/generic

          接著就可以執(zhí)行:

          $ emulator

          運行的就是你編譯的映像。執(zhí)行emulator 命令時,如果不帶任何參數(shù),則Linux Kernel鏡像默認使用~/Android/prebuilt/android-arm/kernel目錄下的kernel-qemu文件,而

          Android鏡像文件則默認使用ANDROID_PRODUCT_OUT目錄下的system.img、userdata.img和ramdisk.img。模擬器運行需要這四個文件,如果你編譯了內(nèi)核則可以使用自己的Kernel鏡像,可用于android移植等。

          6、單獨編譯模塊

          如果你不想編譯整個系統(tǒng),就想編譯某一個應用程序,可以使用mmm命令,使用之前,在源碼目錄下先要執(zhí)行:

          $ build/envsetup.sh

          這樣會生成一些命令,有m即make、mm編譯當前目錄下所有模塊、mmm編譯指定目錄下所有模塊。你可以把packages/apps/Music應用的application name改成MyMusic(AndroidManifest.xml中),然后執(zhí)行:

          $ mmm packages/apps/Music

          在out/target/product/generic/system/app中就可以看見Music.apk,然后執(zhí)行:

          $ make snod

          重新生成system.img。

          7、問題:ubuntu下搭建eclipse編譯android源碼環(huán)境,將會另寫一篇文章。

          posted on 2011-11-13 23:17 ZircoN 閱讀(11969) 評論(4)  編輯  收藏 所屬分類: Android

          評論

          # re: 32位Ubuntu 11.10下android2.3.7源碼下載與編譯小結(jié) 2011-11-14 16:12 karlen

          很詳細,很有幫助,謝謝!  回復  更多評論   

          # re: 32位Ubuntu 11.10下android2.3.7源碼下載與編譯小結(jié) 2012-04-24 16:04 gqs

          ./external/clearsilver/cgi/Android.mk

          ./external/clearsilver/java-jni/Android.mk

          ./external/clearsilver/util/Android.mk

          ./external/clearsilver/cs/Android.mk
          你好,問一下
          我怎么在這個路徑下沒有找到這幾個文件呢?
            回復  更多評論   

          # re: 32位Ubuntu 11.10下android2.3.7源碼下載與編譯小結(jié) 2012-04-24 16:13 gqs

          host Executable: grxmlcompile (out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile) out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/gr_iface.o: file not recognized: File truncated collect2: ld returned 1 exit status make: *** [out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile] Error 1


          我編譯時出這個問題
          是不是就因為沒有更改Android.mk文件的的參數(shù)啊?  回復  更多評論   

          # re: 32位Ubuntu 11.10下android2.3.7源碼下載與編譯小結(jié) 2012-04-24 16:15 gqs

          麻煩 幫幫忙 困擾我很久了   回復  更多評論   

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          公告

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 金华市| 莒南县| 祁阳县| 巨野县| 黄骅市| 昌乐县| 寻甸| 柏乡县| 天长市| 闽清县| 黄山市| 龙井市| 莱阳市| 蓝山县| 青州市| 将乐县| 育儿| 荔波县| 高密市| 伊金霍洛旗| 宣威市| 桂阳县| 高平市| 江达县| 泉州市| 肃南| 漯河市| 德令哈市| 武宁县| 桑植县| 辛集市| 舞阳县| 海口市| 黄浦区| 郯城县| 栖霞市| 铅山县| 汤原县| 喀喇沁旗| 锦州市| 阿尔山市|