Android開發環境搭建

 Android開發環境搭建

[email protected]

1     安裝VirtualBox

通過鏈接http://www.virtualbox.org/wiki/Downloads頁面選擇◦VirtualBox 4.0.8 for Windows hosts x86/amd64下載,下載得到的文件是VirtualBox-4.0.8-71778-Win.exe,直接雙擊,一步一步next完成安裝。

2     VirtualBox中安裝Ubuntu

l  下載Ubuntu,網址http://www.ubuntu.org.cn/getubuntu/download/,我選的是最新的11.0464-bit

l  啓動VirtualBox

l  點擊新建圖標,進入[新建虛擬電腦]對話框。點擊”next”,在【操作系統】中選擇linux,【版本】選Ubuntu(64 bit)

 

l  爲虛擬機分配內存,這裏我選擇1024,視機器配置而定,不宜超過綠色部分

 

 

l  爲虛擬機選擇虛擬硬盤,我們沒有虛擬硬盤,所以點擊【創建新的虛擬硬盤】

l  創建虛擬硬盤的時候,選擇【固定大小映像】

 

 

l  設置虛擬硬盤的位置和大小

 

 

 

l  生成虛擬硬盤的摘要,點擊[Finish],就開始創建虛擬硬盤,可能要等待一段時間。

l  把剛剛創建好的硬盤設爲虛擬機的啓動盤,點擊[next]

l  生成系統摘要,點擊[Finish].創建虛擬機完成

l  設置虛擬光驅,加載Ubuntu安裝光盤(剛剛下載的ubuntu-11.04-desktop-amd64.iso)。

l  在【設置】中點擊【Storage】,IDE控制器,CD/DVD Drive中,選中ubuntu安裝包

 

 

 

l  點擊【系統】,處理器”tab,勾選啓用PAE/NX”硬件加速”tab,勾選“啓用VT-x/AMD-v”和啓用Nested Paging”。驅動順序可以設置爲軟驅,硬盤,光驅

l  重啓,BIOS設置中,enable virtual system

l  打開Virtualbox,啓動虛擬機開始Ubuntu的安裝過程。

l  安裝增強功能。Ubuntu安裝完成後,啓動,非全屏,需要安裝addon。設備—>分配光驅àIDE控制器àchoose a virtual cd/vcd disk file,選中virtualbox裏面的“VBoxGuestAddition.iso”,我的在Program Files/Oracle/VirtualBox目錄下。Restart ubuntu,在終端中/media/VBOXADDITIONS_4.0.8_71778下執行
sudo ./VBoxLinuxAdditions.runs
Restart,完成。

l  創建共享目錄(參考http://blog.csdn.net/hz_chenwenbiaoTMB/archive/2010/07/02/5709573.aspx)。設備à分配數據空間”—>”添加。設置好數據空間位置和名字,選固定,名字最好中文。不要勾選”Auto-mount”

 

linux終端中:
sudo mkdir /mnt/winshare

通過mount命令就可以加載共享目錄(其中share就是剛纔設置的名字,共享文件夾的名稱不要和掛載點名稱一樣)
sudo mount –t vboxsf share /mnt/winshare

如果不想每次都手動掛載,可以在/etc/fstab中添加一項

share /mnt/winshare vboxsf defaults 0 0

l  啓用usb設備(http://blog.csdn.net/zmyde2010/archive/2010/10/16/5945008.aspx)

3     準備編譯環境

http://source.android.com/source/initializing.html

sudo apt-get install g++-multilib

4     下載android source code

http://source.android.com/source/downloading.html

5     編譯

http://source.android.com/source/building.html

 

6 運行模擬器

編譯成功後,emulator~/mydroid/out/host/linux-x86/bin下,ramdisk.imgsystem.imguserdata.img則在~/mydroid/out/target/product/generic(我的android目錄爲mydroid)

編輯~/.bashrc,增加環境變量

export ANDROID_PRODUCT_OUT=~/mydroid/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/mydroid/out/host/linux-x86/bin
export PATH=$PATH:$ANDROID_PRODUCT_OUT_BIN:$ANDROID_PRODUCT_OUT

 

同步這些變化

$source ~/.bashrc

 

運行

$emulator

7     編譯模塊

android中的一個應用程序可以單獨編譯,編譯後要重新生成system.img
在源碼目錄下執行
$ source 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,再運行模擬器

8     tips

l  由於emulator虛擬arm指令,CPU佔用比較高,所以啓動比較慢,特別是第一次啓動,要有耐心。

l  運行模擬器時可以打開內核log輸出,看下是否有嚴重錯誤發生

$emulator –show-kernel

l  可以關閉開機動畫,加速啓動過程

$emulator –no-boot-anim

l  指定內存大小(缺省爲256M),可能對模擬器響應速度有幫助

$emulator –memory 1024

l  如果不調試audio,可以關閉audio

$emulator –noaudio

l  help emulator的選項

$emulator –help

l  如果模擬器一直無法開啓,且無法從kernle log中分析出原因,可以看系統log,結合linux ps,top等命令,或者使用ddms工具進行分析。

$adb logcat

l  MountService Patch

我在運行模擬器的時候通過logcat發現,Android啓動後卡在下面的語句上,不斷的輸出這條語句:
W/MountService( 546): Waiting too long for mReady
google
之,發現需要打補丁

http://blog.csdn.net/AndyTsui/archive/2011/02/16/6188900.aspx

l  關掉重新啓動試試

9     內核編譯

l  瞭解之前編譯的android所用的內核

$adb shell

$cd proc

$cat version

顯示

Linux version 2.6.29-00261-g0097074-dirty ([email protected]) (gcc version 4.4.0 (GCC) ) #20 Wed Mar 31 09:54:02 PDT 2010

$cat cpuinfo

顯示

Processor : ARM926EJ-S rev 5 (v5l)

BogoMIPS : 153.60

Features   : swp half thumb fastmult vfp edsp java

CPU implementer     : 0x41

CPU architecture: 5TEJ

CPU variant       : 0x0

CPU part   : 0x926

CPU revision      : 5

 

Hardware : Goldfish

Revision    : 0000

Serial                   : 0000000000000000

爲了減少版本匹配方面的問題,確定下載2.6.29gold_fish版本。

l  下載Androidlinux內核(kernel爲本地內核保存文件夾)

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

$cd kernel

$git branch

顯示:

$android-2.6.36

$cd kernel

顯示所有head分支

$git branch –a

顯示

$* android-2.6.36

  remotes/origin/HEAD -> origin/android-2.6.36

  remotes/origin/android-2.6.35

  remotes/origin/android-2.6.36

  remotes/origin/android-2.6.37

  remotes/origin/android-2.6.38

  remotes/origin/android-2.6.39

  remotes/origin/archive/android-2.6.25

  remotes/origin/archive/android-2.6.27

  remotes/origin/archive/android-2.6.29

  remotes/origin/archive/android-2.6.32

  remotes/origin/archive/android-gldfish-2.6.29

  remotes/origin/archive/android-goldfish-2.6.27

  remotes/origin/linux-bcm43xx-2.6.39

  remotes/origin/linux-wl12xx-2.6.39

此處注意2.6.26goldfish縮寫成gldfish

Check out android-goldfish-2.6.29版本

$git checkout -b android-goldfish-2.6.29 remotes/origin/archive/android-gldfish-2.6.29

等待下載完數據,再次確認工作分支

$git branch

顯示

  android-2.6.36

* android-goldfish-2.6.29

l  交叉編譯環境設置

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

tom@tom-VirtualBox:~/froyo/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin$ ls

arm-eabi-addr2line  arm-eabi-c++      arm-eabi-g++        arm-eabi-gccbug  arm-eabi-gdbtui  arm-eabi-nm       arm-eabi-ranlib   arm-eabi-size

arm-eabi-ar         arm-eabi-c++filt  arm-eabi-gcc        arm-eabi-gcov    arm-eabi-gprof   arm-eabi-objcopy  arm-eabi-readelf  arm-eabi-strings

arm-eabi-as         arm-eabi-cpp      arm-eabi-gcc-4.4.0  arm-eabi-gdb     arm-eabi-ld      arm-eabi-objdump  arm-eabi-run      arm-eabi-strip

 

$gvim ~/.bashrc

增加如下一行:

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

保存後,同步變化

$source ~/.bashrc

修改Kernel目錄下的Makefile文件,把CROSS_COMPILE指向的prebuilt中的arm-eabi編譯器

  CROSS_COMPILE ?= arm-eabi-

  LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,2 $(call ld-option, l$(comma)?build-id,))

這一行註釋掉,並且添加一個空的LDFLAGS_BUILD_ID定義

LDFLAGS_BUILD_ID =

l  拷貝goldfish配置文件到kernel目錄

$cp arch/arm/configs/goldfish_defconfig .

l  編譯

$make goldfish_defconfig

$make  –j2

編譯較快,最後兩行信息

  OBJCOPY arch/arm/boot/zImage
          Kernel: arch/arm/boot/zImage is ready

l  測試編譯成功的內核

$emulator –memory 1024 –show-kernel –no-boot-anim –kernel arch/arm/boot/zImage

內核啓動的log中可以看出運行了剛編譯成功的zImage

Linux version 2.6.29-gb0d93fb-dirty (tom@tom-VirtualBox) (gcc version 4.4.0 (GCC) ) #1 Wed Jun 1 18:18:53 CST 2011

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章