久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    android2.2源碼編譯-Ubuntu10.04 (X86) android2.2 JDK1.6 - 楚廣明的博客 - 博客園

     Ethan的博客 2010-11-30

    android2.2源碼編譯

    環境:--Ubuntu10.04 (X86) + android2.2 + JDK1.6

    注意:官方聲明,32位系統下JDK必須用1.5---這是因為編譯android api docs 需要1.5。要用JDK1.6必須用64位系統---為什么是64目前不得而知。要是想一次成功,最好還是按照官方說的用JDK1.5(當然你用64位 linux就更方便了),這樣的話基本沒什么大問題。

    1)安裝必要的軟件環境

    1 $ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

    官方推薦的就是上面這些,如果在編譯過程中發現某些命令找不到,就apt-get它。可能需要的包還有:

    1 1 $ sudo apt-get install make2 $ sudo apt-get install gcc3 $ sudo apt-get install g++4 $ sudo apt-get install libc6-dev5 $ sudo apt-get install patch6 $ sudo apt-get install texinfo7 $ sudo apt-get install zlib1g-dev8 $ sudo apt-get install valgrind9 $ sudo apt-get install python2.5(或者更高版本)

    注意:

    1.官方文檔說如果用sun-java6-jdk會出問題,得要用sun-java5- jdk。

    2.經測試發現,如果僅僅make(make不包括make sdk),用sun-java6-jdk是沒有問題的。而make sdk,就會有問題,嚴格來說是在make doc出問題,它需要的javadoc版本為1.5。因此,我們安裝完sun-java6-jdk后最好再安裝sun-java5-jdk,或者只安裝 sun-java5-jdk。這里sun-java6- jdk和sun-java5-jdk都安裝,并只修改javadoc.1.gz和javadoc。因為只有這兩個是make sdk用到的。這樣的話,除了javadoc工具是用1.5版本,其它均用1.6版本:1 $ sudo apt-get install sun-java6-jdk

    修改javadoc的link

    1 $ cd /etc/alternatives

    2 $ sudo rm javadoc.1.gz

    3 $ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz

    4 $ sudo rm javadoc

    5 $ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc

    當碰到JDK1.6在32位系統下的檢查問題時,可以通過一下方法解決

    修改下列文件:

    1 external/clearsilver/cgi/Android.mk,

    2

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

    4

    5 external/clearsilver/util/Android.mk,

    6

    7 external/clearsilver/cs/Android.mk四個文件。

    把下面腳本中的ifneq改為ifeq可暫時規避問題

    1 # This forces a 64-bit build for Java6

    2 ifneq ($(filter 1.6%,$(java_version)),)

    3 LOCAL_CFLAGS += -m64

    4 LOCAL_LDFLAGS += -m64

    5 endif

    2)設置環境變量1 $ gvim ~/.bashrc

    在.bashrc中新增或整合PATH變量,如下:

    01 #java 程序開發/運行的一些環境變量

    02 JAVA_HOME=/usr/lib/jvm/java-6-sun

    03 JRE_HOME=${JAVA_HOME}/jre

    04 export ANDROID_JAVA_HOME=$JAVA_HOME

    05 export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH

    06 export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

    07 export JAVA_HOME;

    08 export JRE_HOME;

    09 export CLASSPATH;

    10 HOME_BIN=~/bin/

    11 export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

    保存后,同步更新:

     1 source ~/.bashrc

    3)安裝repo(用來更新android源碼)

    創建~/bin目錄,用來存放repo程序,如下:

    1 $ cd ~

    2 $ mkdir bin

    并加到環境變量PATH中,在第2步中已經加入

    下載repo腳本并使其可執行:

    1 $ curl http://android.git./repo >~/bin/repo

    2 $ chmod a+x ~/bin/repo

    4)初始化repo

    repo是android對git的一個封裝,簡化了一些git的操作。

    創建工程目錄:

    1 $ mkdir android

    2 $ cd android

    repo初始化

     1 $ repo init -u git://android.git./platform/manifest.git

    在此過程中需要輸入名字和email地址。初始化成功后,會顯示:

    repo initialized in /android

    在~/android下會有一個.repo的隱藏目錄。

    5)同步源代碼1 $ repo sync

    這一步要很久很久

    6)編譯android源碼,并得到~/android/out目錄

    1 $ cd ~/andoird

    2 $ make

    這一過程很久,我是看了部一個多小時的電影之后編譯完成的,具體看電腦配置了~

    7)在模擬器上運行編譯好的android

    編譯好android之后,

    emulator在~/android/out/host/linux-x86/bin 下,

    ramdisk.img,system.img和userdata.img則在~/android/out/target/product /generic下1 $ cd ~/android/out/host/linux-x86/bin

    增加環境變量

     1 $ gvim ~/.bashrc

    在.bashrc中新增環境變量,如下

    1 #java 程序開發/運行的一些環境變量

    2 export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic

    3 ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin

    4 export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

    最后,同步這些變化:

    1 $ source ~/.bashrc

    2 $ cd ~/android/out/target/product/generic

    3 $ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

    最后進入android桌面,就說明成功了。

    8)編譯模塊

    android中的一個應用程序可以單獨編譯,編譯后要重新生成system.img

    在源碼目錄下執行1 $ . build/envsetup.sh (.后面有空格)

    就多出一些命令:

    - croot:   Changes directory to the top of the tree.

    - m:       Makes from the top of the tree.

    - mm:      Builds all of the modules in the current directory.

    - mmm:     Builds all of the modules in the supplied directories.

    - cgrep:   Greps on all local C/C++ files.

    - jgrep:   Greps on all local Java files.

    - resgrep: Greps on all local res/*.xml files.

    - godir:   Go to the directory containing a file.

    可以加—help查看用法

    我們可以使用mmm來編譯指定目錄的模塊,如編譯聯系人:1 $ mmm packages/apps/Contacts/

    編完之后生成兩個文件:

    out/target/product/generic/data/app/ContactsTests.apk

    out/target/product/generic/system/app/Contacts.apk

    可以使用

     1 $ make snod

    重新生成system.img,再運行模擬器

    9)編譯SDK

    直接執行make是不包括make sdk的。make sdk用來生成SDK,這樣,我們就可以用與源碼同步的SDK來開發android了。

    a)(這一步不一定需要,看自己的配置)修改/frameworks/base/include/utils/Asset.h

    ‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改為 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’

    原因是eclipse編譯工程需要大于1.3M的buffer;

    b)編譯ADT。

    本人沒有進行這步;

    c)執行make sdk。

    注意,這里需要的javadoc版本為1.5,所以你需要在步驟1中同時安裝sun-java5-jdk1 $ make sdk

    編譯很慢。編譯后生成的SDK存放在out/host/linux-x86/sdk/,此目錄下有android- sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目錄。android-sdk_eng.xxx_linux-x86就是 SDK目錄

    實際上,當用mmm命令編譯模塊時,一樣會把SDK的輸出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出來

    此后的應用開發,就在該SDK上進行,所以把7)對于~/.bashrc的修改注釋掉,增加如下一行:

     1 export PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools

    注意要把xxx換成真實的路徑;

    d)關于環境變量、android工具的選擇

    目前的android工具有:

    A、我們從網上下載的SDK,如果你下載過的話( tools下有許多android工具,lib/images下有img映像)

    B、我們用make sdk編譯出來的SDK( tools下也有許多android工具,lib/images下有img映像)

    C、我們用make編譯出來的out目錄( tools下也有許多android工具,lib/images下有img映像)

    那么我們應該用那些工具和img呢?

    首先,我們一般不會用A選項的工具和img,因為一般來說它比較舊,也源碼不同步。其次,也不會用C選項的工具和img,因為這些工具和img沒有 經過 SDK的歸類處理,會有工具和配置找不到的情況;事實上,make sdk產生的很多工具和img,在make編譯出來out目錄的時候,已經編譯產生了,make sdk只是做了copy而已。

    e)安裝、配置ADT

    略過;

    f)創建Android Virtual Device

    編譯出來的SDK是沒有AVD(Android Virtual Device)的,我們可以通過android工具查看:1 $ android list

    創建AVD:1 $ android create avd -t 1 -n myavd

    可以android –help來查看上面命令選項的用法。創建中有一些選項,默認就行了

    再執行android list,可以看到AVD存放的位置

    以后每次運行emulator都要加-avd myavd或@myavd選項:1 $ emulator -avd myavd

    10)編譯linux內核映像

    a)準備交叉編譯工具鏈

    android代碼樹中有一個prebuilt項目,包含了我們編譯內核所需的交叉編譯工具。

    b)設定環境變量1 $ gvim ~/.bashrc

    增加如下兩行:

    1 export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin

    2 export ARCH=arm

    保存后,同步變化:1 $ source ~/.bashrc

    c)獲得合適的內核源代碼1 $ cd ~/android

    獲得內核源代碼倉庫

    1 $ git clone git://android.git./kernel/common.git kernel

    2 $ cd kernel

    3 $ git branch

    顯示

    * android-2.6.27

    說明你現在在android-2.6.27這個分支上,也是kernel/common.git的默認主分支。

    顯示所有head分支:1 $ git branch -a

    顯示

    * android-2.6.27

    remotes/origin/HEAD -> origin/android-2.6.27

    remotes/origin/android-2.6.25

    remotes/origin/android-2.6.27

    remotes/origin/android-2.6.29

    remotes/origin/android-goldfish-2.6.27

    remotes/origin/android-goldfish-2.6.29

    我們選取最新的android-goldfish-2.6.29,其中goldfish是android的模擬器模擬的CPU。

    1 $ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29

    2 $ git branch

    顯示

    android-2.6.27

    * android-goldfish-2.6.29

    我們已經工作在android-goldfish-2.6.29分支上了。

    d)設定交叉編譯參數

    打開kernel目錄下的Makefile文件,把CROSS_COMPILE指向剛才下載的prebuilt中的arm-eabi編譯器

    CROSS_COMPILE ?= arm-eabi-

    1 LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\

    2 $(call ld-option, -Wl$(comma)–build-id,))

    這一行注釋掉,并且添加一個空的LDFLAGS_BUILD_ID定義,如下:1 LDFLAGS_BUILD_ID =

    e)編譯內核映像

    1 $ cd ~/android/kernel

    2 $ make goldfish_defconfig

    3 $ make

    f)測試生成的內核映像1 $ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage

    ==========================================================

    最后:在編譯的過程中有可能出現各種錯誤,可以google找一下,一般的錯誤都能找到,預祝大家成功,OK收工~

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 人妻系列无码专区免费| 性欧美牲交在线视频| 午夜大片爽爽爽免费影院| 久久综合色天天久久综合图片| 欧美黑人又粗又大高潮喷水| 无码国产偷倩在线播放| 99久久国产综合精品女图图等你| 美女裸体无遮挡免费视频网站| 国产精品丝袜亚洲熟女| 一本一道VS无码中文字幕 | 日本道精品一区二区三区| 日本高清色WWW在线安全| 国产欧美一区二区精品久久久| 第一亚洲中文久久精品无码| 少妇精品无码一区二区三区| 少妇高清一区二区免费看| 国内极度色诱视频网站| 国产乱人伦偷精品视频下| 亚州中文字幕一区二区| 国产精品毛片无遮挡高清| 宾馆人妻4P互换视频| 少妇精品无码一区二区三区| 国产成人欧美日本在线观看| 无套内谢少妇毛片在线| 又大又粗又爽A级毛片免费看| 亚洲高清WWW色好看美女| 韩国免费a级毛片久久| 又大又长粗又爽又黄少妇毛片| 亚洲精品男男一区二区| 老子影院午夜精品无码| 国产不卡精品视频男人的天堂 | 国内少妇人妻偷人精品| 97精品国产一区二区三区| 无码人妻丰满熟妇区五十路在线| 亚洲综合在线日韩av| 18无码粉嫩小泬无套在线观看| 亚洲 都市 无码 校园 激情| 亚洲精品日韩精品久久| 精品无码一区二区三区AV| 成在线人视频免费视频| 日本成熟少妇激情视频免费看|