Android環境建立之編譯Android核心源碼筆記—2

來源:互聯網
上載者:User

http://blog.csdn.net/hens007/article/details/7465574

三.編譯android源碼和工具包

1.編譯android源碼

進入source目錄下,執行make 即可。

編譯完成後,可以在源碼目錄的out/target/product/generic/目錄下看到編譯好的ramdisk.img、system.img和userdata.img了。

 

編譯中出現的問題:

Ubuntu11.10內建的gcc與g++版本為4.6,用該版本編譯android時會遇到一些錯誤,錯誤如下所示:

 

$ java -version

java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK Client VM (build 20.0-b11, mixed mode, sharing)
原來可能是沒有安裝JDK1.6。

 

有的說是JDK安裝不對,再來安裝:

在ubuntu11.10上安裝jdk1.6
JDK:Linux X86下SUN公司的 jdk-6u30-linux-i586.bin

搭建步驟

第一:下載JDK。http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u30-download-1377139.html,選擇Linux X86下的 jdk-6u30-linux-i586.bin,這樣直接用迅雷下載,速度快,放在本機上。

第二:將檔案轉移到Ubuntu系統下,具體轉移的方式採用網路位置的方式。具體參見我的另外一篇博文http://www.cnblogs.com/BreakMind/archive/2012/01/31/2332522.html。

第三:開啟Ubuntu 11.10的終端。這裡說一下,Ubuntu 11.10的終端已經很痛點擊查看到,我知道開啟Ubuntu 11.10的終端方式有兩種。1、快速鍵,Ctrl+Atl+T ,這三個鍵聯合起來用就可以開啟終端。2、滑鼠點擊左上方的Ubuntu表徵圖(或者點擊微軟鍵),輸入Terminal,這個時候就顯示出終端了。

第四:命令列,實現整個安裝過程。(說明一下,Ubuntu 11.10有內建的OpenJDK,這是整個安裝過程中,需要注意的問題)

首先把JDK拷貝到指定的目錄,然後解壓縮拷貝後的檔案到指定的目錄中,具體命令列如下:
    $ sudo cp jdk-6u30-linux-i586.bin /usr/lib/jvm
    $ cd /usr/lib/jvm
    $ sudo ./jdk-6u30-linux-i586.bin
    $ sudo mv jdk1.6.0_30/ java-1.6.0_30-sun/
    $ sudo ln -s java-1.6.0_30-sun java-6-sun
    $ sudo rm jdk-6u30-linux-i586.bin
其次設定環境變數,主要是PATH、CLASSPATH和JAVA_HOME,注意PATH最後所添加的bin目錄:
    $ sudo vi /etc/environment
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/u
    sr/lib/jvm/java-6-sun/bin"
    CLASSPATH="/usr/lib/jvm/java-6-sun/lib"
    JAVA_HOME="/usr/lib/jvm/java-6-sun"
然後就是要告訴系統,我們使用的sun的JDK,而非OpenJDK了:
    $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-6-sun/bin/java 300
    $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-6-sun/bin/javac 300
    $ sudo update-alternatives --config java
此時螢幕會有如下顯示:
選擇 路徑 優先順序 狀態
    ------------------------------------------------------------
    0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自動模式
    1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手動模式
    * 2 /usr/lib/jvm/java-6-sun/bin/java 300 手動模式
要維持當前值

  • 請按斷行符號鍵,或者鍵入選擇的編號:我們輸入值:2 斷行符號
    如上所示,這樣就設定好了要使用的java了。最後我們驗證一下:
        $ java -version
        java version "1.6.0_27"
        Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
        Java HotSpot(TM) Server VM (build 20.2-b06, mixed mode)

    /*

    haili@haili-desktop:~$sudo gedit ~/.bashrc
    在檔案的尾部追加:
    export JAVA_HOME=/usr/bin/jdk
    export JRE_HOME=JAVA_HOME/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
     
    使更改生效。儲存檔案,執行
    haili@haili-desktop:~$source ~/.bashrc
    有的說這樣可以解決,但是對我來說似乎只有一個結果,那就是失敗。好像每走一步哪怕是小得微乎其微的一步都是如此的艱難和充滿荊棘。不過既然選擇了這條路,沒別的捷徑,那就一直往前走吧,哪怕是頭破血流又如何,大不了再來一次。可以肯定的是這其中的過程和酸甜苦辣絕對只有自己可以體會得到。

    */

    把JDK1.6重新安裝,現在可以make了,原來的問題是:在安裝時執行下面步驟後:

    $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

    $ sudo apt-get update

    有一提示,說是不能讀取源,需要用“apt-get  update”來更新才能解決問題,這時要執行:

    $ apt-get update

    到這裡要注意了,此時還要重新執行:

    $ sudo apt-get update

    後才能執行:

    $ sudo apt-get install sun-java6-jdk

    否則就可能出現上面的棘手奇怪問題,下面總結一下安裝JDK1.6的步驟:

    $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

    $ sudo apt-get update

    $ apt-get update //這一步在我這裡要有

    $ sudo apt-get update //這步也必須執行,否則make總是不成功,這個問題整整弄得小弟多開銷了一天時間

    $ sudo apt-get install sun-java6-jdk

     

    這裡就是make後產生的ramdisk.img、system.img和userdata.img了,期待以久的東西。其實它到底編譯多長時間我也不清楚,聽說是挺長的,不過我是在下班前直接編譯,不關電腦,第二天過來時已經全部編譯完成,像我的電腦配置一般要兩到三個小時這樣吧。

    應該是因為版本的原因,可以考慮用低一些版本比如4.4。

    解決方案:

       ubuntu 32bit系統下安裝gcc 4.4的最好方法是僅用以下兩條命令,不需要其它命令,否則編譯時間可能會出錯:

    1 $sudo apt-get install gcc-4.4

    2 $sudo apt-get install g++-4.4

    裝完後進入到/usr/bin目錄下

    $ls -l gcc*   會顯示以下結果:

    發現gcc連結到gcc-4.6, 需要將它改為連結到 gcc-4.4,方法如下:

    1 $sudo mv gcc gcc.bak

    2 $sudo ln -s gcc-4.4 gcc

    同理,對g++也做同樣的修改:

    1 $ls -l g++*

     

    需要將g++連結改為g++-4.4:

     

    1 $sudo mv g++ g++.bak

     

    2 $sudo ln -s g++-4.4 g++

     

    再查看gcc和g++版本號碼:

    gcc -v

    g++ -v

    均顯示gcc version 4.4.6 ,說明gcc 4.4安裝成功。 

    2.編譯android 核心

    1.設定環境變數

     export  PATH=$PATH:/Android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

     export  ARCH=arm //注意=後面不要有空格,export不要寫成Export,否則會有提示找不到命令

    source  ~/.hashrc   
    //使修改生效

    2.設定交叉參數

    把 kernel/goldfish目錄下面的Makefile中把這行:

    CROSS_COMPILE ?=

    修改為:

    CROSS_COMPILE ?=arm-eabi-

    別外還有把LDFLAGS_BUILD_ID=$(patsubst  –W1$(comma)%,%, $(call ld-option, -W1$(comma) –build-id,),改為:

                    LDFLAGS_BUILD_ID=

    有的網友說也可以通過下面的方式來設定:

    1. $ export ARCH=arm  
    2. $ export SUBARCH=arm  
    3. $ export CROSS_COMPILE=arm-eabi-
    1. $ source build/envsetup.sh  //缺少這條指令,可能會導致無法編譯通過  
    2. $ lunch full-eng            //缺少這條指令,可能會導致無法啟動模組器,系統報無法找到AVD,並要求你建立AVD

           其實還要注意,一定要執行這兩步:

    export  PATH=$PATH:/Android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

     export  ARCH=arm  //注意=後面不要有空格,export不要寫成Export,否則會有提示找不到命令

    否則會的提示:

     當時就是因為這個也走了不少的彎路,浪費不少時間,開始還以為是上面的Makefile的設定出現問題。

     

    到這裡可以開始執行配置操作:

    $ make  clean

    $ make goldfish_armv7_defconfig    //不能用設定檔:make goldfish_defconfig,否則後面步驟可能出現意想不到的結果

    $ make  

    make goldfish_armv7_defconfig 後得到如下:

    到這裡圓滿完成編譯。在arch/arm/boot目錄下面會有產生的zImage檔案。ls arch/arm/boot

     

    3. 下面步驟不是編譯SDK

             現在不知道編譯出來的鏡像是否可用,要測試和使用SDK進行開發,就需要編譯SDK,當然也是可以從官方網站上下載SDK。由於編譯Android源碼和核心時並不會自動編譯SDK,需要我們自已動手來完成,進入Android源碼目錄執行:

    $ make PRODUCT-sdk-sdk

     

    注意:

             為了避免在搭建環境時編譯的SDK無效,最好是第一次不要使用make sdk來編譯,而應該使用上面的make PRODUCT-sdk-sdk。還有在編譯完成後後在目錄/out/host/linux-x86/sdk下面產生android-sdk_eng.xxx_linux-x86.zip和android-sdk_eng.xxx_linux-x86。做好SDK的備份,因為後面的模組編譯是可能會把SDK目錄下面的檔案給清除掉。

     

    4.  編譯單獨模組

          Android允許對應用程式進行單獨編譯,但是這樣必需重建system.img,現在為了省時間,我不編譯單獨模組。

     

    5.  編譯ADT

           編譯ADT的主要目的是使用Eclipse來開發應用程式,當然如果不想自己編譯也是可以從官方網站上下載安裝或者乾脆線上更新都可以。

    5.1  配置環境

           要編譯ADT首先要確保系統中已經安裝了Eclipse。如果沒有安裝,則在編譯ADT時會下載安裝,注意這個是要超級使用者的許可權,否則不能安裝也不能編譯。我是直接編譯ADT,再讓它自己下載安裝Eclipse。執行:

    $  sdk/eclipse/scripts/build_server.sh    /Android/source/adt(這裡是自己的源碼存放目錄,要根據自己情況來寫)

    但是編譯時間它卻不會自己下載,有下面提示:

    看來得真要自己到官方網站去下載再安裝。從提示來看應該是可以從這個網站下載所需要的:

    http://download.eclipse.org/technology/epp/downloads/release/galileo/SR2/eclipse-rcp-galileo-SR2-linux-gtk.tar.gz

    我是從這裡下載:http://www.bergfiles.com/i/bf4a1420f0h32i0

                                   eclipse-rcp-galileo-SR2-linux-gtk.tar.gz

    只要單擊eclipse-rcp-galileo-SR2-linux-gtk.tar.gz就可以通過迅雷下載。

     

     

    要是從前者下載則點擊下列蘭色部分即可用迅雷下載:

     

     下載完後,從提示可以看到:

    Downloading and installing Eclipse in /buildbot/eclipse-android/3.5.2

    要求我們把Eclipse安裝在/buildbot/eclipse-android/3.5.2目錄下。

     

     gedit  ~/.bashrc在檔案後面加上:

    export

    ECLIPSE_HOME=$PATH:/opt/Boardcon/Android/source_4.0.1/adt

    $ sdk/eclipse/scripts/build_server.sh     /Android/source/adt

    ADT編譯完成。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.