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)

Android开发环境搭建_第1张图片

 

l  为虚拟机分配内存,这里我选择1024,视机器配置而定,不宜超过绿色部分

 

Android开发环境搭建_第2张图片

 

l  为虚拟机选择虚拟硬盘,我们没有虚拟硬盘,所以点击【创建新的虚拟硬盘】

l  创建虚拟硬盘的时候,选择【固定大小映像】

 

Android开发环境搭建_第3张图片

 

l  设置虚拟硬盘的位置和大小

 

 

Android开发环境搭建_第4张图片

 

l  生成虚拟硬盘的摘要,点击[Finish],就开始创建虚拟硬盘,可能要等待一段时间。

l  把刚刚创建好的硬盘设为虚拟机的启动盘,点击[next]

l  生成系统摘要,点击[Finish].创建虚拟机完成

l  设置虚拟光驱,加载Ubuntu安装光盘(刚刚下载的ubuntu-11.04-desktop-amd64.iso)。

l  在【设置】中点击【Storage】,IDE控制器,CD/DVD Drive中,选中ubuntu安装包

 

 Android开发环境搭建_第5张图片

 

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”

Android开发环境搭建_第6张图片

 

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

 

你可能感兴趣的:(虚拟机,android,linux,ubuntu,branch,linux内核)