作者:唐老师,华清远见嵌入式学院讲师。

1.   编译Android模拟器

在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别。

编译Android模拟器的步骤和编译Android系统很相似:

Ø  build/envsetup.sh

Ø  lunch sdk-eng

Ø  make sdk

在每次执行make的时候,编译系统会自动的验证上次编译项和这次编译项,如果两次不一样,会删除所有的目标代码,其实现在./build/core/main.mk

[plain]view plaincopyprint?

1.  71 # This allows us to force a clean build - includedafter the config.make

                      2.  72 # environment setup is done, but before we generateany dependencies. This

                      3.  73 # file does the rm -rf inline so the deps which areall done below will

                      4.  74 # be generated correctly

                      5.  75 include $(BUILD_SYSTEM)/cleanbuild.mk

我们将第75行注释掉,这样就不会每次都自动删除上次编译的中间代码重新编译了。

编译完之后效果如下图所示:

sdk安装在了下面的目录里:

[plain]view plaincopyprint?

1.   WORKING_DIRECTORY/out/host/linux-x86/sdk

在该目录下有一个压缩包,里面就是我们从eclipse里更新下载指定Target的sdk包。

如果你做过app开发都会知道,我们只有下载了不同版本的sdk之后才能创建不同版本的模拟器。当我们编译完sdk之后就可以创建并运行Android4.0的模拟器了。

[plain]view plaincopyprint?

1.  $ cd WORKING_DIRECTORY/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools

首先,查看当前编译出来的sdk的id号,用于创建一个模拟器:

[plain]view plaincopyprint?

1.  $ ./android list targets

                      2.  Available Android targets:

                      3.  ----------

                      4.  id: 1 or "android-14"

                      5.         Name:Android 4.0
                      6.         Type:Platform
                      7.         API   level:14
                      8.         Revision: 2
                      9.          Skins:WXGA800, WQVGA400, WXGA720, HVGA, WVGA854, WQVGA432, WVGA800 (default), QVGA,WSVGA
                      10.  ABIs : no ABIs.

创建一个模拟器

[plain]view plaincopyprint?

1.  $ ./android create avd -n mydroid -t 1

注:-n 表示指定模拟器的名字, -t表示指定创建模拟的版本id

启动模拟器

[plain]view plaincopyprint?

1.  $ ./emulator -avd mydroid &

由于模拟器要启动android系统,它要使用几个映像文件,分别是:kernel-qemu , system.img, userdata.img, ramdisk.img

Ø  kernel-qemu:内核映像文件,它是linux操作系统针对qemu模拟器编译的内核文件,里面安装有qemu的仿真硬件驱动,如果将来在开发板或手机上移植android,那么,第一步就是要先make出一个支持开发板或手机的kernel来。

Ø 
system.img:是android系统的文件系统,里面包含了android系统的应用程序(apk),系统用到的各种库(jar, so,
a)和资源,配置文件(etc目录下),系统命令(bin,usr/bin,
xbin),该映像文件是由out/target/product/PRODUCT/system目录打包生成的,我们可以对这个目录里的东西进行定制
化,比如,你要想让android系统默认为安装一个应用程序,那么可以将要安装的apk文件拷贝到out/target/product
/PRODUCT/system/app目录下

Ø  userdata.img:用户数据映像,里面包含有程序安装信息,好比如是windows的C:/Program Files/目录

Ø 
ramdisk.img:内存磁盘映像,这个文件对于没有做过Linux移植的人来说,不好理解,linux内核启动起来,要挂载一个文件系统作为自己的
根文件系统,通常文件系统是存放在块设备上的,也就是硬盘或flash上的,里面含有Linux内核启动过程中依赖的一些程序和配置文件,前面所述的
userdata.img和system.img映像,在linux系统启动起来后挂载到其data,system目录下。

我们可以通过下面的脚本run_emulator.sh,来指定Android模拟器来加载指定的映像文件:

[plain]view plaincopyprint?

1.  #!/bin/bash

                      2.  PWD_PATH=`pwd`

                      3.  IMG_PATH=$PWD_PATH/out/target/product/generic

                      4.  exportPATH=$PWD_PATH/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools:$PATH

                      5.  exportANDROID_PRODUCT_OUT=$PWD_PATH/out/target/product/generic
                      6.  export ANDROID_SWT=$PWD_PATH/out/host/linux-x86/framework

                      7.  emulator-kernel$PWD_PATH/kernel/goldfish/arch/arm/boot/zImage

注:
        ANDROID_PRODUCT_OUT:环境变量必须指定,emulator就是从该环境变量下查找所有的映像文件的
        -kernel:指定内核映像

当然也可以分别指定每个映像文件,通过下面的命令:

[plain]view plaincopyprint?

1.  $ emulator-kernel$PWD_PATH/kernel/goldfish/arch/arm/boot/zImage\

                      2.  -image $IMG_PATH/system.img \

                      3.  -data $IMG_PATH/userdata.img\

                      4.  -ramdisk $IMG_PATH/ramdisk.img

注:
        -system指定system.img
        -data指定userdata.img
        -ramdisk指定ramdisk.img

如果将来要运行adb shell连接模拟器的话,我们都要使用root权限,否则会出现:error:device not found的错误。

通过启动起来的Android系统->System Settings->About phone,可知使用的是我们自己编译的内核启动的。

文章来源:华清远见嵌入式学院原文地址:http://www.embedu.org/Column/Column633.htm
更多相关嵌入式免费资料查看华清远见讲师博文>>

深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器的更多相关文章

  1. 深入浅出-Android系统移植与平台开发(一)- Android4.0系统的下载与编译

    作者:唐老师,华清远见嵌入式学院讲师. 一.Android4.0系统的下载与编译 Android系统的下载与编译,Google的官方网站上已经给出了详细的说明,请参照Android的官方网址: htt ...

  2. 深入浅出 - Android系统移植与平台开发(五)- 定制手机模拟器ROM

    一. 修改化定制Android4.0系统 Android系统启动时,先加载Linux内核,在Linux的framebuffer驱动里可以定制开 机界面,Linux内核启动成功后,挂载根文件系统,启动A ...

  3. 深入浅出 - Android系统移植与平台开发(一)

    深入浅出 - Android系统移植与平台开发(一) 分类: Android移植2012-09-05 14:16 16173人阅读 评论(12) 收藏 举报 androidgitgooglejdkub ...

  4. 深入浅出 - Android系统移植与平台开发(五)- 编译Android源码(转)

    2.3编译Android源码 Android源码体积非常庞大,由Dalvik虚拟机.Linux内核.编译系统.框架代码.Android定制C库.测试套件.系统应用程序等部分组成,在编译Android源 ...

  5. 深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制(瘋耔修改篇一)

    首先非常感谢原文作者为我们提供的知识库,因为有你们的贡献,我们的开发难度更显简单 原文 :   http://blog.csdn.net/mr_raptor/article/details/30113 ...

  6. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境

    作者:唐老师,华清远见嵌入式学院讲师. 编译Android源码 关于android系统的编译,Android的官方网站上也给出了详细的说明.http://source.android.com/sour ...

  7. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  8. 深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制

    第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架 ...

  9. 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速

    作者:唐老师,华清远见嵌入式学院讲师. Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速度越来越快,但是随着新 版本的出现,其启动速度一直都比较慢,当然,作为程序员,我们 ...

随机推荐

  1. T-SQL 常用语句

    1. 查看 Table 或者 Column 被那些object(存储过程.函数或View)调用. select a.* from sysobjects a, syscomments b where a ...

  2. .NET NLog 详解(二)

    Git是个很好的源码管理系统,你可以瞬间切换为任何历史版本.为了更好的解析NLog这个组件,我们将时钟倒拨回2004年.(注意:NLog v0.9 has been released 是在2005-0 ...

  3. [Outlook] Outlook2013能收但无法发送邮件-0x800CCC13, 0x800CCC0B, 0x8004210B

    [20140704更新],在公司收邮件的时候,问题再次出现,错误码:0x800ccc13,按照以下方法测试成功: 1. 按照以前办法,反复重启,失败 2. 按照以下参考连接A中的步骤 a. Click ...

  4. pthread_create传递参数

    转自:http://blog.csdn.net/yeyuangen/article/details/6757525 #include <iostream> #include <pth ...

  5. 深入理解计算机中的 csapp.h和csapp.c

    csapp.h其实就是一堆头文件的打包,在http://csapp.cs.cmu.edu/public/code.html 这里可以下载.这是<深入理解计算机系统>配套网站. 在头文件的# ...

  6. Mesa 3D

    Mesa 3D是一个在MIT许可证下开放源代码的三维计算机图形库,以开源形式实现了OpenGL的应用程序接口. OpenGL的高效实现一般依赖于显示设备厂商提供的硬件,而Mesa 3D是一个纯基于软件 ...

  7. MongoDB3.0新特性

    3月3日,MongoDB3.0终于发布了. 主要特点包括了对之前收购的WiredTiger存储引擎的支持,插件式存储引擎API,SCRAM-SHA-1认证机制,并改进了解释功能.此外,包含了自动化.备 ...

  8. connot resolve symbol R

    出现这个原因大都是layout里的xml文件出错,就不会自动生成R文件

  9. 遍历CallBack对象 和 HHIVE对象

    内核中有个PLIST_ENTRY CmpHiveListHead;CmpHiveListHead = &CMHIVE.HiveList; CMHIVE结构如下:kd> dt _CMHIV ...

  10. 在苹果手机上input有内阴影怎么去除

    一个input中在安卓手机上完全按照自己的样式去展示,但是在苹果手机上发现Input有内阴影,怎么去除内阴影呢? 在input样式中这样添加 #div{ .... appearance:button; ...