本次編譯過程主要參考官方文檔(http://source.Android.com/download)
1、安裝一些環境
- sudo apt-get install build-essential
- sudo apt-get install make
- sudo apt-get install gcc
- sudo apt-get install g++
- sudo apt-get install libc6-dev
-
- sudo apt-get install patch
- sudo apt-get install texinfo
- sudo apt-get install libncurses-dev
-
- sudo apt-get install git-core gnupg
- sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
- sudo apt-get install ncurses-dev
- sudo apt-get install zlib1g-dev
- sudo apt-get install valgrind
- sudo apt-get install python2.5
安裝java環境
sudo apt-get install sun-java5-jre sun-java5-plugin sun-java5-fonts sun-java5-jdk
如果安裝失敗,可以去JAVA官網下載JDK1.5的安裝包(http://java.sun.com/javase/downloads/5u22/jdk
)
2、設定環境變數 (如果是安裝JAVA官網的JDK,可以跳過了)
vim ~/.bashrc
在.bashrc中新增或整合PATH變數,如下
- #java 程式開發/啟動並執行一些環境變數
- JAVA_HOME=/usr/lib/jvm/java-5-sun
- JRE_HOME=${JAVA_HOME}/jre
- export Android_JAVA_HOME=$JAVA_HOME
- export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
- export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
- export JAVA_HOME;
- export JRE_HOME;
- export CLASSPATH;
- HOME_BIN=~/bin/
- export PATH=${PATH}:${JAVA_PATH}:${JRE_PATH}:${HOME_BIN};
- #echo $PATH;
最後,同步這些變化:
source ~/.bashrc
3、編譯Android源碼,並得到~/project/Android/cupcake/out 目錄
進入Android源碼目錄:
make
這一過程很久(2個多小時)
4、在模擬器上運行編譯好Android
Android SDK的emulator程式在Android-sdk-linux_x86-1.0_r2/tools/下,emulator是需要載入一些image的,預設載入Android-sdk-linux_x86-1.0_r2/tools/lib/images下的kernel-qemu(核心) ramdisk.img system.img userdata.img
編譯好Android之後,emulator在~/project/Android/cupcake/out/host/linux-x86/bin下, ramdisk.img system.img userdata.img則在~/project/Android/cupcake/out/target/product/generic下
cd ~/project/Android/cupcake/out/host/linux-x86/bin
增加環境變數
vim ~/.bashrc
在.bashrc中新增環境變數,如下
直接make Android源碼時,並沒有make linux kernel。因此是在運行模擬器,所以不用編譯 linux kernel。如果要移值Android,或增刪驅動,則需要編譯 linux kernel
linux kernel的編譯將在以後的文章中介紹。
6、編譯模組
Android中的一個應用程式可以單獨編譯,編譯後要重建system.img
在源碼目錄下執行
. 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來編譯指定目錄的模組,如編譯連絡人:
mmm packages/apps/Contacts/
編完之後產生兩個檔案:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk
可以使用make snod重建system.img
再運行模擬器
make sdk
7、編譯SDK(我是使用JAVA JDk 安裝包)
- #java 程式開發/啟動並執行一些環境變數
- export Android_PRODUCT_OUT=~/project/Android/cupcake2/out/target/product/generic
- Android_PRODUCT_OUT_BIN=~/project/Android/cupcake2/out/host/linux-x86/bin
- export PATH=${PATH}:${Android_PRODUCT_OUT_BIN};
最後,同步這些變化:
- source ~/.bashrc
- emulator -image system.img -data userdata.img -ramdisk ramdisk.img
最後進入Android案頭,就說明成功了。
out/host/linux-x86/bin下產生許多有用工具(包括Android SDK/tools的所有工具),因此,可以把eclipse中Android SDK的路徑指定到out/host/linux-x86/bin進行開發
補充:如果在windows下使用SDK,則需要在windows中轉變原有的SDK資料。詳細請查考。
http://blog.csdn.net/happyhell/archive/2010/07/13/5732062.aspx
8、編譯linux kernel --- 進行中中。