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 emulator的更多相关文章

  1. Flink 源码解析 —— 源码编译运行

    更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章. 前言 之前自己本地 clone 了 Flink 的源码,编 ...

  2. 《Flink 源码解析》—— 源码编译运行

    更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章. 前言 之前自己本地 clone 了 Flink 的源码,编 ...

  3. 1.EOS源码编译运行

    目前网络上都是针对老版EOS2.0源码编译的文章,我在mac上参考这些文章编译,最后发现根本就不对,最新版本只需一条命令(./eosio_build.sh,依赖库会自动安装的)即可.我根据这些文章手动 ...

  4. 源码编译基于Android平台的XBMC笔记

    参考官方网站:https://github.com/xbmc/xbmc/blob/master/docs/README.android   1. 编译主机系统 Ubuntu (12.04) 64Bit ...

  5. VsCode源码编译运行

    参考链接官方文档:https://github.com/Microsoft/vscode/wiki/How-to-Contribute 一.准备环境 Git Node.js(64位,>= 8.1 ...

  6. vscode源码编译运行打包使其由英文变为中文

    vscode默认是英文,如果你想让其变为中文,可参考这个链接:https://blog.csdn.net/testcs_dn/article/details/75070415 最近发现一个很奇怪的问题 ...

  7. Android7.0源码编译运行指南【转】

    见连接: http://blog.csdn.net/HardReceiver/article/details/52650303

  8. Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程

    Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程   在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...

  9. Android源码编译的全过程记录

    写本篇文章主要参考了官方文档和网上的一些资料,但是对于Android最新的代码来说,网上资料有些已经过时.本文中步骤已经作者实验,大家可以亲自执行试试.由于没有使用Eclipse的习惯,所以没有做Ec ...

随机推荐

  1. 爬虫基础 - Robots协议

    Robots协议 指定一个robots.txt文件,告诉爬虫引擎怎么爬取 https://www.taobao.com/robots.txt User-agent: Baiduspider Allow ...

  2. Google I/O 2014 - Keynote for Android

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jingxia2008/article/details/34809467 Google I/O 201 ...

  3. golang 复制对象的正确做法

    需求 实际运用种,传参是一对象指针,现在如何最简便地复制一对象? 实现 坑:&*  先拿到值再指针? package main import ( "time" " ...

  4. Django REST Framework简单入门(一)

    Django REST Framework(简称DRF),是一个用于构建Web API的强大且灵活的工具包. REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的. ...

  5. POJ2992:Divisors(求N!因子的个数,乘性函数,分解n!的质因子(算是找规律))

    题目链接:http://poj.org/problem?id=2992 题目要求:Your task in this problem is to determine the number of div ...

  6. Django组件拾忆

    知识预览 一 Django的form组件 二 Django的model form组件 三 Django的缓存机制 四 Django的信号 五 Django的序列化 回到顶部 一 Django的form ...

  7. 1 - bootstrap基本模板

    bootstrap 3.x 下载地址:http://v3.bootcss.com/ 基本模板如下: <!DOCTYPE html> <html lang="zh-cn&qu ...

  8. VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

    上一节鸡啄米讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是 ...

  9. Codeforces Round #275 (Div. 2) 题解

    A 题: 说的是在(LR) 之间找出ab互质 bc 互质 ac 不互质的 3个数 数据量小直接暴力 #include <iostream> #include <cstdio> ...

  10. 20145202马超 2016-2017-2 《Java程序设计》第7周学习总结

    学号 2016-2017-2 <Java程序设计>第X周学习总结 教材学习内容总结 Arrays:用于操作数组的工具类. 里面都是静态方法. asList:将数组变成list集合. 把数组 ...