source buile/envsetup.sh

lunch sdk-eng

make sdk -j2

编译完之后,sdk安装在了下面的目录里

ANDROIID_DIR/out/host/linux-x86/sdk

在这个目录下有一个压缩包,里面就是我们从eclipse里下载的sdk的包。

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

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

首先,查看当前sdk的Id号,用于创建一个模拟器

$ ./android list targets

Available Android targets:

----------

id: 1 or "android-14"

Name: Android 4.0

Type: Platform

API level: 14

Revision: 2

Skins: WXGA800, WQVGA400, WXGA720, HVGA, WVGA854, WQVGA432, WVGA800 (default), QVGA, WSVGA

ABIs : no ABIs.

创建一个模拟器

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

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

启动模拟器

$ ./emulator &

由于模拟器要启动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的根文件系统里面通常包含有以下内容:

usr:大的目录,存放应用程序和文件

bin:常用的命令目录

etc:系统相关配置文件目录

dev:系统设备目录

opt:主机额外安装的软件目录

boot:存放系统启动时必须读取的配置文件,包括核心 (kernel) 在内

home:普通用户家目录

lib:系统使用库目录

var:日志文件目录

lost+found:系统不正常产生错误时,会将一些遗失的片段放置于此目录下

mnt:外设的挂载点目录

proc:虚拟文件目录,是系统信息的映射

root:root用户家目录

sbin:超级命令所在目录

tmp:一般使用者或者是正在执行的程序暂时放置文件的地方

而ramdisk.img这个映像,其实里面就是上述目录和一些基本配置文件的打包映像,ramdisk是将映像加载到内存里,然后将内存当做一个块设备(硬盘)来使用,所以说通常ramdisk.img通常比较小。当然,除了上面的FHS标准的Linux文件系统目录以外,android系统里,还增加了data,system目录。

前面所述的userdata.img和system.img映像,其实就是挂载到data,system目录下的。

我们可以通过下面的命令,来指定模拟器,启动哪个内核,使用哪些文件系统:

./emulator -avd mydroid -system

ANDROIID_DIR/out/target/product/generic/system.img -data

ANDROIID_DIR/out/target/product/generic/userdata.img -ramdisk

ANDROIID_DIR/out/target/product/generic/ramdisk.img -kernel

ANDROIID_DIR/prebuilt/android-arm/kernel/kernel-qemu-armv7

-system指定system.img

-data指定userdata.img

-ramdisk指定ramdisk.img

-kernel指定内核映像

实验:对androd系统进行瘦身

android系统抽屉里显示的应用存放在out/target/product/PRODUCT/system/app目录里,我们可以将一些不常用的,不想用的apk文件删除,一来减小Android的体积,二来可以加快系统启动速度,因为在系统启动时,会扫描system/app目录下的apk文件,对比有没有安装更新。

删除一些apk,去掉计算器,日历,电话,短信

$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Calculator.*

$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Calendar.*

$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Email.*

$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Message.*

$ rm -f ANDROIID_DIR/out/target/product/PRODUCT/system/app/Telephone.*

删除了之后,执行下面的命令,只编译system.img,而不去检查依赖关系,这样很快就能编译完

$ make snod

注:上述命令必须要保证执行了source buile/envsetup.sh和lunch full-eng之后,以后只要是说make,都指已经执行了前述两步骤

snod的意思是编译system imge no dependency

然后,再重新启动模拟器,指定自己编译的system.img,查看抽屉里有没有我们删除的应用

./emulator -avd mydroid -system

ANDROIID_DIR/out/target/product/generic/system.img -data

ANDROIID_DIR/out/target/product/generic/userdata.img -ramdisk

ANDROIID_DIR/out/target/product/generic/ramdisk.img -kernel

ANDROIID_DIR/prebuilt/android-arm/kernel/kernel-qemu-armv7

思考:我们能不能将全部的system/app下的apk删除掉,如果不能,哪些必须要保留,为什么?

嵌入android模拟器,编译运行Android模拟器相关推荐

  1. Android 判断App运行在模拟器还是真机上的最终解决方案

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/qq_39731011/article ...

  2. 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能

    以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Andro ...

  3. [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能

    reference to : http://www.cnblogs.com/soaringEveryday/p/4991563.html 以往的Android开发有一个头疼的且拖慢速度的问题,就是你每 ...

  4. android cts 编译,使用 Android studio 分析运行 CTS 用例

    CTS 的用例其实是个大宝库,是写单元测试的典范,研究和学习这些用例的内容不管是对 Android 系统的研究还是对个人的技术提升都是很有帮助的.但是网络上对于这部分的介绍却很少,都只是讲怎么运行 C ...

  5. android studio后台运行,Android Studio:无限期运行后台任务

    10 个答案: 答案 0 :(得分:72) 我发现我应该使用@ free3dom的解决方案,即文件菜单中的Invalidate Caches / Restart option. 每次通过在GIT中切换 ...

  6. mac中创建flutter,运行ios模拟器,运行安卓模拟器教程

    文章目录 创建flutter项目 运行flutter项目到IOS模拟器 运行flutter项目到安卓模拟器 创建flutter项目 cd 到要创建flutter项目的目录 执行命令: flutter ...

  7. Android反编译工具Android Killer

    转载于:http://www.cnblogs.com/common1140/p/5198460.html 今天百度搜索"Android反编译"搜索出来的结果大多数都是比较传统的教程 ...

  8. 简诉android源代码编译过程,Android源码编译过程及原理(二)

    在未来等风也等你 本节主要记录的内容anroid 编译系统的结构 编译中枢中main.mk的基本解析 除非特别说明本节中的目录都是基于android的源码目录 1. android 编译系统的结构 a ...

  9. 苹果手机可以测试Android,苹果手机可以运行Android 10,只能简单测试,会开启新时代吗...

    原标题:苹果手机可以运行Android 10,只能简单测试,会开启新时代吗 如果要将手机分类的话,可以有多种分类方法,从手机厂商发源地分的话,可以分为国内手机(小米.OPPO.vivo以及华为等)和国 ...

最新文章

  1. R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例、拟合方差分析模型(two-way ANOVA)、计算Eta Squared
  2. 10 个最值得 Python 新人练手的有趣项目
  3. 【工具推荐】ELMAH——可插拔错误日志工具(转)
  4. CEikEdWin 类的使用
  5. JAVA——System.in作为控制台输入时结束输入(输入EOF)解决方案
  6. 硬盘数据恢复经验(转)
  7. 为什么dos下的com文件都要org 0100h呢?为什么系统启动时要org 07c00h呢
  8. L2-DAY 2-程序完善夜
  9. linux使用vim同时打开文件,VIM 在同一个窗口中同时编辑多个文件
  10. linux dstat,使用Dstat来进行Linux综合性能诊断
  11. 台达plc与串口软件通讯测试,台达PLC串口通信
  12. 特殊域名后缀如何申请备案?
  13. 算术收益率与对数收益率(几何收益率)
  14. python中shelf对象_Python对象持久化存储工具pickle
  15. 微信推广二维码接口使用总结
  16. ATL SERVER
  17. DDIM代码详细解读(4):分类器classifier的网络设计、训练、推理
  18. python去除\u3000,空格,\n等
  19. 植物肉品牌v2进军中国市场,带来牛肉糜、猪肉糜及牛肉汉堡饼等
  20. KS检验、t检验、f检验、Grubbs检验、狄克逊(Dixon)检验、卡方检验小结

热门文章

  1. 前端JS如何获取日历
  2. 【论文必用】模糊C均值聚类的简单介绍、复现及Python代码详解、聚类可视化图的绘制过程详解!
  3. 电机驱动芯片界的“卷”王之王-----Trinamic!
  4. 学计算机的都喜欢玩游戏吗,男生沉迷于网吧玩游戏,高考成绩都懒得查,老师帮查后考了712分...
  5. 凸优化学习笔记:QP及SOCP问题
  6. 民宿管理系统课程设计_民宿开致辞.doc
  7. 浏览器查看pdf插件pdfobject
  8. 远翔升压FP6296,内置MOS,单节锂电池升压输出12V/1A
  9. http层协议是哪层通信协议
  10. 励志语录,送给正在努力奋斗的人!