在Ubuntu7.10上編譯android

來源:互聯網
上載者:User
文章目錄
  • 2.1 python和JDK
  • 2.2 "fatal: git 1.5.4 or later required"
  • 3.1 安裝依賴的軟體
  • 3.2 安裝指令碼repo
  • 3.3 初始化代碼倉庫
  • 3.4 “fatal: git 1.5.4 or later required”的解決
  • 3.5 下載代碼
  • 3.6 編譯
1 概述

上個星期看到android開放原始碼的訊息,雖然覺得Google的這個動作會對業界產生很大影響,但沒有時間仔細看,只瀏覽了 Project layout。今天上午一個網友在mail中說已經編譯、運行過android。我趁著中午休息時間,在一個Ubuntu7.10的虛擬機器上編譯、運行了一下。

我在這個虛擬機器上編譯過openmoko、poky。相對於這兩個使用OpenEmbedded的平台,android的編譯要簡單一些,快一些。我在編譯openmoko和poky時,將所有下載包都儲存在一個目錄中,將編譯目錄的sources子目錄指向這個目錄。這樣做,一方面即使以後有些連結失效,也還可以編起來(其實編譯時間都不需要串連外網);另一方面在重新編譯時間,不用重新下載,可以加快編譯速度。即使這樣,完全編譯一次poky也要一個晚上。編譯android時,下載用了1個小時,編譯也只需要1個小時。

2 編譯中的兩個小問題2.1 python和JDK

Google網站對編譯過程的介紹還是很清晰的。不過在介紹其它軟體包時,都給出了apt-get命令,卻單獨給出了python和JDK的連結地址,容易對讀者產生誤導,以為要手工安裝這兩個軟體。其實這兩個軟體也應該通過apt-get安裝。特別是python,如果從原始碼安裝,可能因為依賴其它軟體,導致一些組件編譯失敗,影響android的編譯。而且python 2.6的原始碼包沒有提供make uninstall,卸載比較麻煩。其實我們只需要一個apt-get命令,就可以安裝所有依賴的軟體。

2.2 "fatal: git 1.5.4 or later required"

在Ubuntu7.10上執行repo init時,會出現"fatal: git 1.5.4 or later required"的錯誤提示。在Ubuntu8.04上編譯沒有這個問題。下面的流程裡會介紹怎樣解決這個問題。

3 在Ubuntu7.10上的編譯流程3.1 安裝依賴的軟體

執行

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

3.2 安裝指令碼repo
cd ~mkdir binexport PATH=$PATH:~/bincurl http://android.git.kernel.org/repo >~/bin/repochmod a+x ~/bin/repo

將repo所在目錄加到PATH後就可以在其它目錄直接執行。

3.3 初始化代碼倉庫

我把/ui/mydroid作為工作目錄,建立目錄後在這個目錄執行:

repo init -u git://android.git.kernel.org/platform/manifest.git

如果返回"fatal: git 1.5.4 or later required",就執行3.4。否則執行3.5。

3.4 “fatal: git 1.5.4 or later required”的解決3.4.1 刪除git-core,添加apt源

首先執行

sudo apt-get remove git-core

再編輯apt的源檔案

sudo vi /etc/apt/sources.list

在最後添加

deb http://www.backports.org/debian/ etch-backports  maindeb-src http://www.backports.org/debian/ etch-backports  main

然後執行

sudo apt-get update

更新源。這時如果出現沒有公開金鑰的錯誤提示:“由於沒有公開金鑰,下列簽名無法進行驗證: NO_PUBKEY EA8E8B2116BA136C”,就執行3.4.2。否則執行3.4.3。

3.4.2 安裝公開金鑰

執行gpg命令下載公開金鑰:

sudo gpg --keyserver wwwkeys.pgp.net --recv-keys EA8E8B2116BA136Csudo gpg --export -a EA8E8B2116BA136C > /tmp/key

添加公開金鑰:

sudo apt-key add /tmp/key
3.4.3 更新git-core

執行:

sudo apt-get updatesudo apt-get install debian-backports-keyringsudo apt-get updatesudo apt-get -t etch-backports install git-core

然後再執行:

repo init -u git://android.git.kernel.org/platform/manifest.git

應該就可以了。

3.5 下載代碼

執行

repo sync

下載代碼。我從13:30執行這條命令,14:30完成下載。

3.6 編譯

執行

make

編譯。我從14:30開始編譯,15:40左右完成。編譯的最後輸出是:

Install system fs image: out/target/product/generic/system.imgTarget ram disk: out/target/product/generic/ramdisk.imgTarget userdata fs image: out/target/product/generic/userdata.img
4 執行

可以用模擬器運行一下剛才編譯的映像。從網上下載一個android-sdk-linux_x86-1.0_r1.zip,我將其放到~/android目錄解壓。在路徑中增加sdk的tools目錄:

export PATH=${PATH}:~/android/android-sdk-linux_x86-1.0_r1/tools

通過環境變數告訴模擬器映像所在的目錄:

export ANDROID_PRODUCT_OUT=/ui/mydroid/out/target/product/generic

最後執行:

emulator

就可以了。可以用-skin參數選擇皮膚。sdk的tools/lib/images/skins目錄中是sdk內建的皮膚。下面是兩個啟動並執行:

  

相對於android的java架構,我更喜歡GTK和C。但不得不承認android的UI比openmoko做得強多了。

5 結束語

可以在~/.bashrc的最後添加:

export PATH=${PATH}:~/bin:~/android/android-sdk-linux_x86-1.0_r1/toolsexport ANDROID_PRODUCT_OUT=/ui/mydroid/out/target/product/generic

自動化佈建編譯、運行環境。

這兩天晚上正在改gsmd的中文簡訊bug,沒時間仔細看android的編譯系統,感覺上應該比OpenEmbedded簡單。其實OpenEmbedded用習慣了也不錯,就是不夠精簡,速度慢一些,佔用空間大一些。編譯android的工作目錄有3.5個G。我編譯poky的目錄有10.59個G,編譯openmoko的目錄有11.6個G。

相關文章

聯繫我們

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