当前位置:文档之家› android系统vold透析

android系统vold透析

android系统vold透析
android系统vold透析

android系统

vold分析

USB Storage

1. Vold 简介

1.1 udev的由来

udev 是Linux2.6 内核里的一个功能,它替代了原来的devfs,成为当前Linux 预设的设备管理工具。udev 以守护进程的形式运行,通过侦听内核发出来的uevent 来管理/dev目录下的设备文件。不像之前的设备管理工具,udev 在用户空间(user space) 运行,而不在内核空间(kernel space) 运行。

devfs 存在的主要的问题是它处理设备检测、创建和命名的方式,其中设备节点的命名可能是最严重的问题。一般可接受的方式是,如果设备名是可配置的,那么设备命名策略应该由系统管理员决定,而不是由某些开发者强制规定。devfs 文件系统还存在竞争条件(race conditions) 的问题,这是它天生的设计缺陷,不对内核做彻底的修改就无法修正这个问题。所以udef应运而生。

udev能够实现所有devfs实现的功能。具有以下优点:

1)dynamic replacement for /dev。作为devfs的替代者,传统的devfs不能动态

分配major和minor的值,而major和minor非常有限,很快就会用完了。udev

能够像DHCP动态分配IP地址一样去动态分配major和minor。

2)device naming。提供设备命名持久化的机制。传统设备命名方式不具直观性,像

/dev/hda1这样的名字肯定没有boot_disk这样的名字直观。udev能够像DNS

解析域名一样去给设备指定一个有意义的名称。

3)API to access info about current system devices 。提供了一组易用的API去

操作sysfs,避免重复实现同样的代码,

但udev运行在用户模式中,而devfs运行在内核中。udev只支持linux-2.6内核,因为udev严重依赖于sysfs文件系统提供的信息,而sysfs文件系统只在linux-2.6内核中才有。

的产生

Vold的全称是Volume Daemon。在android中,取代udev的是vold,我们这里不去过多的讨论为什么android不继续使用udev,但要知道vold的机制和udev是一样的,理解了udev,也就理解了vold。android一出生就没有尊守传统linux的许多标准,当然也不能指望udev能很好的服务于android。android小区的选择是别起炉灶,为android 定做一套udev,这就是vold了。无论是udev还是vold,都是基于sysfs的,sysfs为内核与用户层的通讯提供了一种全新的方式,并将这种方式加以规范。kernel层能检测到有新的设备接入,并能为之加载相应的驱动,但如何通知用户层呢?这就是sysfs的工作,内核中的sysfs机制要求当有新的驱动加载时给用户层发送相应的event.但这些event只尽告知的义务,具体怎么处理,这就是vold的事了。对于用户层而言,我们无需关心sysfs的

细节,只要知道sysfs能向用户层提供什么就行了。首先,我们要知道如何接收来自内核的https://www.doczj.com/doc/24847349.html,link socket大家应该不会陌生吧,socket这套东西不仅能用于网络间的通讯,也用能用于进程间的通讯,像这种内核态与用户沟通的活,自然也少不了它。关于这个部分,我们将在Vold通信仲介绍。关于Vold的主要作用,如下图所示:

Volume Daemon简介

Android 的volume服务主要是用来管理usb/sd卡等外部存储设备。平台可以对外部存储设备进行操作和轮询状态,当外部存储设备状态发生变化时,volume 服务也会实时报告平台。

2. Vold功能分析

启动

Volume Daemon实在android init进程中启动的(关于android启动有其他同事介绍)。在init 进程中将解析init.rc文件。在该文件中有启动Vold的配置。见下图:

在这里将启动Vold Daemon,并且创建一个socket。改socket主要是为了与framework层通信。

内部架构

Vold(Volume Daemon)的内部框架如上图所示。Vold处理过程大致分为三步:创建连结、引导和事件处理。下面将结合上图对vold工作流程进行详细分析。

2.2.1. 创建连结

在vold作为一个守护进程,一方面接受驱动的信息,并把信息传给应用层;另一方面接受上层的命令并完成相应。所以这里的连结一共有两条:

1)vold socket: 负责vold与framework层的信息传递;

2)接受sysfs uevent的socket: 负责接受kernel的信息;

Vold socket是在init进程启动Volume Daemon时创建的,这是一个用于和framework 层通信的socket,在android系统中叫做Localsocket,framework曾通过JNI机制调用C/C++空间函数,具体过程如下图:

在framework层的NativeDaemonConnector类中调用下面代码

其中mSocket值为“vold”表示要获得socket的名字,该socket上上所述,是在vold 被init的时候创建的,并且保存为全局变量。在socket.connect()中调用LocalSocketImpl.create_native()方法。改方法通过一个函数对应表,调用相应的C/C++函数。该表如下所示:

关于JNI由其他同事详细介绍,这里不展开,只要知道用Java JNI机制调用的是C/C++函数。这个framework层和Vold中分别持有同一个socket实例,这样上层通信就建立起来了。

而与内核通信的socket是在vold main函数中创建的。在main函数中,vold将创建两个单例,VolumeManager和NetLinkManager,与内核通信的socket就在其中创建。这样Volume Daemon与Kernel、framework层的通信框架就建立了。关于Volume Daemon的内部通行将在下一节中详细解释。

2.2.2. 引导

这里主要是在vold启动时,对现有外设存储设备的处理。首先,要载入并解析vold.fstab。vold.fstab如下图所示:

图中红色部分标记可配置的部分。我们在Porting的时候可以设置,系统可以挂载USB Storage 端口的数目。配置格式为:

dev_mount命令标签挂载点子分区设备在sysfs文件系统下的路径(可多个) 以Android X86 froyo中的vold.fstab为例,它仅仅为系统配置了一个外接USB Storage 埠,如上图红色部分所示,其意义对应下表。

需要注意的是:

1)子分区的数目可以为auto,表示只有一个子分区。子分区数目也可以为任意大于0

的一个整数。

2)个参数间不能有空格,应该以tab制表符为参数的间隔,原因是android对

vold.fstab的解析是以”\t”为标识,从而得到各个参数。

如果vold.fatab读取成功,个参数经过验证无误。那个将创建DirectVolume

如果vold.fstab档不存在或者打开档失败,vold将调用:

"/proc/cmdline"fp = fopen("/proc/cmdline", "r")读取Linux内核启动参数。见下图:

如果在Linux内核参数中存在SDCARD(该参数辨识系统SDCARD设备文件的路径),那么将取出该参数值创建AutoVolume。如果不存在SDCARD参数,那么将不创建AutoVolume。见下图:

2.2.

3. 事件处理

这里通过对两个连结的监听,完成对动态事件的处理,以及对上层应用操作的响应。

我们来具体分析一下代码过程。

1)kernel发出uevent

NetLinkManager检测kernel发出的uevent,经过解析后,调用NetLinkHandler::onEvent()。如下图所示:

对于不同的时间类型分别处理。“block”事件由VolumeManager的handleBlockEvent(evt)处理,由多态性,最终调用的是AutoVolume或者DirectVolume的handleBlockEvent(evt)。“switch”事件由VolumeManager处理。忽略“battery”和“power_supply”事件。

这里做一下解释block主要指对volume的一些操作的事件,如mount,unmonut,createAsec 等。Switch主要指volume的connect或者disconnect。

最终根据相关操作,改变设备参数(如设备类型,挂载点等等)。通过CommandListener告知framework层。

2)framework层发出命令

和上面过程正好相反,CommandListener检测到framework层的命令,调用VolumeManager 的函数,VolumeManager遍历Volume清单找出对应的volume,调用volume的函数。而volume 类中的相关调用,最终调用到Linux函数,完成相关操作。

3. Vold通信

3.1实现框架图

在vold作为一个守护进程,一方面接受驱动的信息,并把信息传给应用层;另一方面接收上层的命令并完成相应操作。所以这里的连结一共有两条:

(1)vold socket:负责vold与应用层的信息传递;

(2)访问vold的socket:负责vold与底层的信息传递;

这两个连结都是在进程的一开始完成创建的。

3.2 Uevent简介

uevent由内核发出,通过netlink sokect来传递给vold,在kobject被创建的时候,就会发生uevent的传递。对于未传递的uevent,会在kset下产生uevent文件,这是供用户态触发uevent 使用的,通过向uevent档写入action(add,remove等),可以触发一个uevent,这些uevent 可以被vold捕获,从而完成未完成的vold处理。在系统启动的时候,vold未启动的时候,这些uevent写入了uevent檔,vold启动后,会扫描sys目录查找uevent,然后触发它们,来完成之前未完成的事宜。uevent文件的内容,就是uevent事件的数据。

3.3 NetLink 简介

NetLink socket机制

Netlink socket,socket不仅能用于网络间的通讯,也用能用于进程间的通讯,像这种内核态

与用户沟通的活,自然也少不了它。

在Linux 2.4 版以后版本的内核中,几乎全部的中断过程和使用者态进程的通信都是使用netlink 套接字实现的。netlink 套接字的最大特点是对中断过程的支持,他在内核空间接收用户空间数据时不再需要用户自行启动一个内核线程,而是通过另一个软中断调用用户事先指定的接收函数。工作原理如图。

用户空间

用户态应用使用标准的socket和内核通讯,标准的socket API 的函数,socket(), bind(), sendmsg(), recvmsg() 和close()非常容易地应用到netlink socket。

为了创建一个netlink socket,使用者需要使用如下参数调用socket()

socket(AF_NETLINK, SOCK_RAW, netlink_type)

netlink对应的协议簇是AF_NETLINK,第二个参数必须是SOCK_RAW或SOCK_DGRAM,第三个参数指定netlink协议类型,他能是个自定义的类型,也能使用内核预定义的类型:

…..

#define NETLINK_KOBJECT_UEVENT15 /* Kernel messages to userspace */

同样地,socket函数返回的套接字,能交给bind等函数调用:

static int skfd;

skfd = socket(PF_NETLINK, SOCK_RAW, NL_IMP2);

bind函数需要绑定协议地址,netlink的socket地址使用struct sockaddr_nl架构:

struct sockaddr_nl

{ sa_family_t nl_family;

unsigned short nl_pad;

__u32 nl_pid;

__u32 nl_groups;

};

成员nl_family为协议簇AF_NETLINK,成员nl_pad 当前没有使用,因此要总是设置为0,

成员nl_pid 为接收或发送消息的进程的ID,如果希望内核处理消息或多播消息,就把该字段设置为0,否则设置为处理消息的进程ID。成员nl_groups 用于指定多播组,bind 函数用于把调用进程加入到该字段指定的多播组,如果设置为0,表示调用者不加入所有多播组:struct sockaddr_nl local;

memset(&local, 0, sizeof(local));

local.nl_family = AF_NETLINK;

local.nl_pid = getpid(); /*设置pid为自己的pid值*/

local.nl_groups = 0;

/*绑定套接字*/

if(bind(skfd, (struct sockaddr*)&local, sizeof(local)) != 0)

{

printf("bind() error\n");

return -1;

}

用户空间能调用send函数簇向内核发送消息,如sendto、sendmsg等,同样地,也能使用struct sockaddr_nl来描述一个对端地址,以待send函数来调用,和本地地址稍不同的是,因为对端为内核,所以nl_pid成员需要设置为0:

struct sockaddr_nl kpeer;

memset(&kpeer, 0, sizeof(kpeer));

kpeer.nl_family = AF_NETLINK;

kpeer.nl_pid = 0;

kpeer.nl_groups = 0;

rcvlen = recvfrom(skfd, &info, sizeof(struct u_packet_info),

0, (struct sockaddr*)&kpeer, &kpeerlen);

/*处理接收到的数据*/

}

同样地,函数close用于关闭打开的netlink socket.

3.4主要代码介绍

代码位于目录

System\vold

system\core\include\sysutils

system\core\libsysutils\src

在vold作为一个守护进程,一方面接受驱动的信息,并把信息传给应用层;另一方面接受上层的命令并完成相应操作。

所以这里的连结一共有两条:

(1)vold socket: 负责vold与应用层的信息传递;

(2)访问Vold的socket: 负责vold与底层的信息传递;

这两个连结都是在进程的一开始完成创建的上面。

3.4.1初始化

Main.cpp

VolumeManager, CommandListener, NetlinkManager 都是在main()函数里面初始化的。其中VolumeManager,NetlinkManager内部采用单例模式。

(1)Class NetlinkManager 主要是创建于内核通信的socket,接收来自底层的信息,然后传交给

VolumeManager处理。

(2)class CommandListener主要收到上层 MountService通过doMountVolume发来的命令,分析

后,转交给VolumeManager处理;VolumeManager处理信息后,或报告给上层MountService,或交给volume执行具体操作。

3.4.2处理来自内核的uevent

建立socket连接

NetlinkManager.cpp

int socket(int domain, int type, int protocol);

domain指明所使用的协议族,PF_NETLINK表示Kernel和用户空间的通信。type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW)内核不区分SOCK_DGRAM和SOCK_RAW。允许程序使用低层协议;protocol通常赋值"0"。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远程主机地址和远程协议端口。

接受来自内核的uevent

Class commandlistener 在main()初始化,之后开始开始监听,会开一个线程不停的监听来自内核的消息。

处理

NetlinkListener里面实现onDataAvailable,接受来自内核的消息,然后由NetlinkEvent来解

3.4.3处理来自framework层发出的command

class CommandListener主要收到上层 MountService通过doMountVolume发来的命令,分析后,转交给VolumeManager处理;VolumeManager处理信息后,或报告给上层MountService,或交给volume执行具体操作。

当收到上层传来的命令后解析命令,分发到不同的命令类处理。

VoldCommand主要是实现对runcommand动作的封装,在FrameworkListener会根据收到的消息选择相应的派生类。

NavtiveDaemonConnector

Framework与vold的通信时通过socket来实现的,不过该socket有android做了一个封装,LocalSocket实现的socket的功能。

NavtiveDaemonConnector位于frameworks\base\services\java\com\android\server目录下,他会开启一个线程不停的监听来自vold的消息。

个类LocalSocketImpl ,该类部分函数时通过JNI实现的。

Android是一种基于Linux的自由及开放源代码的操作系统

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。 中文名:安卓 外文名:Android 开发商:Google、开放手持设备联盟 发行商:Google 发行时间:2008年9月23日 编程语 言: C/C++(底层)Java等(应用 层) 系统家 族: 类Unix,Linux 源码模 式: 自由及开放源代码软件 内核类 型: 宏内核(Linux内核) 软件许 可: Apache License, GPL等 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。 Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发 表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。 Android的Logo是由Ascender公司设计的。其中的文字使用了Ascender公司专门制作的 称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜 色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌 象徵。有时候,它们还会使用纯文字的Logo。 2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统和iPhone等榜上有名。

Android系统架构详解

Android系统架构详解 Android系统架构由5部分组成, 分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。 1、Linux Kernel Android relies on Linux version 2.6 for core system services such as security, memory management, process management, network stack, and driver model. The kernel also acts as an abstraction layer between the hardware and the rest of the software stack. Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。 2、Android Runtime Android includes a set of core libraries that provides most of the functionality available in the core libraries of the Java programming language. Android包括一个核心库的集合,她们提供了Java编程语言的核心库中的绝大多数功能。 Every Android application runs in its own process, with its own instance of the Dalvik virtual

Android系统架构简介

Android系统架构简介 Android系统架构简介 目前Android的Linuxkernel控制包括安全、存储器管理、进程管理、网络堆叠、驱动程序模型等。下载Android源码之前,先要 安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git 工作的一个工具。 应用程序 Android系统是基于Linux内核开发,使用Java作编程语言, 使界面到功能,都有层出不穷的变化,其中Activity等同于J2ME 的MIDlet,一个Activity类别负责创建视窗,一个活动中的 Activity就是在foreground(前景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和AIDL连结,达到 复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。 View等同于J2ME的Displayable,程序人员可以透过View类别与“XMLlayout”档将UI放置在视窗上,并可以利用View打造出所 谓的Widgets,其实Widget只是View的一种,所以可以使用xml 来设计layout。至于ViewGroup是各种layout的基础抽象类别,ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中获取View,Android的View类 的显示很大程度上是从XML中读取的。View与事件息息相关,两者 之间透过Listener结合在一起,每一个View都可以注册eventlistener,例如:当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于 J2ME的BitMap。 中介软件

Android操作系统发展史

Android操作系统发展史 今天我们来聊一聊Android系统的历史,首先我们就要先来说说Android系统这个名字的来历。Android这一词最先出现在法国作家利尔亚当在1886年发表的科幻小说《未来夏娃》中,作者将外表像人类的机器起名为Android,这也就是Android小人名字的由来。 知道了Android名字的来历我们再来看一下Android系统的来历。Android系统一开始并不是由谷歌研发出来的,Android系统原来的公司名字就叫做Android,谷歌公司在2005收购了这个仅成立22月的高科技企业。Android系统也开始由谷歌接手研发,Android 系统的负责人以及Android公司的CEO安迪·鲁宾成为谷歌公司的工程部副总裁,继续负责Android项目的研发工作。 在2007年11月5日这天,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成。这一联盟将支持谷歌发布的手机操作系统以及应用软件,将共同开发Android系统的开放源代码。 看完Android系统的发展简介,下面就让我们一起看看具体的Android系统版本的升级更新以及代表机型有哪些。 Android 1.0 代表机型T-Mobile G1 在2008年,在GoogleI/O大会上,谷歌提出了Android HAL架构图,在同年8月18号,Android获得了美国联邦通信委员会(FCC)的批准,在2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最早的版本。 在2008年,在智能手机领域还是诺基亚的天下,Symbian系统在智能手机市场中占有绝对优势,在这种前提下,谷歌发布的Android 1.0系统并没有被外界看好,甚至言论称最多一年谷歌就会放弃Android系统。

现在手机的操作系统主要有Android

现在手机的操作系统主要有Android (安卓)Symbian(塞班)和windows这三种,其中以安卓最火。 我说的很详细,你看看下面的文字差不多都会明白。。。 小米手机MIUI系统:(图片) 小米手机采用Android OS v2.3+MIUI双系统,双系统之间自选(MIUI系统之间数据可以同步,原生系统与MIUI系统数据不能同步)功能上苹果的IOS比Android OS还是要好一点的,特别在优化流畅性和用户体验上面。而Android开源是最大的优势,自由度大,但是优化不足,配置低的手机用起来有点卡

联想乐Phone的系统版本是采用基于Android操作系统的乐Phone OS 平台。Android操作系统是谷歌开发的操作系统,OS即Operation System,号称第一款开源手机系统 联想手机系统:乐OS系统 独有的手写输入法基本功能方面,联想乐OS采用了独有的手写输入法,可以快速输入中英文、数字和标点符号等内容,特别适合国人使用。另外,乐OS支持自动推送功能,新闻、邮件、股票、音乐和视频等热点资讯都会在第一时间推送到手机之上,不会让你错过任何重要的信息。 Lephone 3Gw101(图片)

我的手机图片: 刷机后图片系统(小米MIUI)系统Android 2.3.9 时间过得很快,剩下一年就毕业了,平时有空闲时间多关注人为地理历史方面的知识,这样有助于提升你的阅历,跨专业跨行业了解一些东西,比如地理方面,虽然这个地方你没有去过,但是你通过网络或书籍知道这个地方的人为地理历史背景等。别人问你的时候,你也能回答上来,读万卷书不如行万里路,行万里路不如阅人无数。就是这个道理。尤其是我学工科的,更应该弥补人为方面的不足。

Android体系结构

Android体系结构 android 平台大的方面的层次可以划分成三个层次,包括一个操作系统,中间件与应用程序,android 的系统框架图如下: 图中的软件层次自上而下分成4个层次 1. 应用程序(Application) 2. 用用程序框架(Application Framework) 3. 各种类库(Libraries)与android运行时(Adnorid Runtime) 4. 操作系统(OS) 一、应用程序(Application) 应用层就是与用户交互的一个层次,用户可以瞧得见的一些应用,用户可以操作。这类应用基本都就是通过Java语言编写的独立的能够完成某些功能的应用程序。Android本身提供了桌面(Home),联系人(Contacts),拨打电话(Phone),浏览器(Browers)等很多基本的应用程序。开发人员可以使用应用框架提供的API编写自己的应用程序,普通开发人员要做的事情就就是开应用层的程序提供该广大消费者使用。 二、应用程序框架(Application Framework) 普通开发者可以使用Android基本应用程序使用的系统API,android 应用框架中的各个模块都可以被复用,各种服务也可以被复用,理解了这个机制,开发人员可以更好的更轻松的开发出优秀的android应用。 开发过程中常用到的基本框架组件如下:

1. 一组View(UI 组件),这些UI组件包括Button(按钮),EidtView(文本框),TextView(标签),List(列表) 等等,灵活运用这些组件可以快速方便的创建良好的用户交互界面。 2. Content Providers(内容提供者),听起来有点抽象,通俗的理解Content Provider 就就是提供一种 服务,通过这种服务应用程序之间可以实现数据的互相访问与共享,比如通讯录的存储就使用了这种服务,其它应用也可以访问通讯录中存储的联系人信息。 3. Resource Manager 顾名思义就就是资源管理,android中的资源很多包括图片,用户界面(Layout xml),字体,颜色,UI组件的Id等等都可以称之为资源,这些丰富的资源,都就是通过Resource Manager来统一进行管理。 4. Notification Manager(消息通知管理),它在不影响用户正常操作与使用设备的时候在状态栏上提供 消息的提示。比如有短信来的时候,android自动会将这个消息提示在状态栏上,用户可以及时的瞧到。 5. Activity Manager(活动管理),Activity管理着应用程序的生命周期,并且控制着应用的导航,扮演控 制器的角色。每个Activity类似于Windows应用中的一个wendow。一般的应用都就是通过一个个Activity 交互构成的。 6. Window Manager(窗口管理),管理所有启动的窗口。 7. Location Manager(位置管理),用来管理地图服务的相关功能。 8. Telephoney Manager(电话管理),用来管理有关的电话的相关功能。 9. Package Manager(包管理),管理所有的安装在android系统内的应用程序。 三、库(Libraries)与运行环境(RunTime) 这部分内容开始涉及底层,开发普通的应用不会直接对这个层进行操作。这层中包含了一组类库(Libraries)与运行时(RunTime), 1. 系统C库(libc),一个从BSD集成来的标准C系统函数库(libc)它就是专门为基于嵌入式Linux的设 备定制的。 2. 媒体库(Media Framework),基于PackeVideo OpenCore,该库支持多种常用的音频,视频格式以及 回放与录制,同时支持静态图像文件。编码格式包括:MPEG4、H、264,MP3、AAC、AMR、JPG、PNG。 3. Surface Manager 对显示子系统的管理,并且为多个应用提供2D,3D图层的无缝融合。 4. WebKit,一个最新的web浏览器引擎,用来支持Andiroid浏览器或者嵌入的web视图。 5. SGL 底层的2D图形引擎。 6. OPENGL|ES,基于OpenGL ES 1、0 APIs实现,该库可以使用硬件3D加速或者使用高度优化的 3D软加速。 7. FreeType,位图(bitmap)与适量(vector)字图显示支持。 8. SQLite,一个对所有应用程序可用,功能强大的轻量级关系型数据库引擎。 9. Core Libraries 该核心库提供了Java编程语言核心库的大多数功能。 10. Dalvik VM, android平台的一个虚拟机,它相当于PC中Java的虚拟机JVM。 四、操作系统(OS) Android 的核心系统服务依赖于Linux 2、6 内核,操作系统为Android提供的服务包括: 1. 安全性(Security)。 2. 内存管理(Memory Management) 3. 进程管理(Process Management) 4. 网络堆栈(Network Stack) 5. 驱动程序模型(Driver Model)包含以下这些常规的驱动程序: (1)Display Driver (2)Keypad Driver

安卓操作系统简介

安卓操作系统简介 简言: Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb。 系统介绍: Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。 2010年末数据显示,仅正式推出两年的操作系统Android已经超越称霸十年的诺基亚(Nokia)Symbian OS系统,采用Android系统主要手机厂商包括宏达电子(HTC)、三星(SAMSUNG)、摩托罗拉(MOTOROLA)、LG、Sony Ericsson、魅族M9等,使之跃居全球最受欢迎的智能手机平台,Android系统不但应用于智能手机,也在平板电脑市场急速扩张。 系统架构: 应用程序: Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity 等同于J2ME的MIDlet,一个Activity 类(class)负责创建视窗(window),一个活动中的Activity就是在foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由ServiceConnection和AIDL连结,达到复数程序同时运行的效果。如果运行中的Activity 全部画面被其他Activity 取代时,该Activity 便被停止(stopped),甚至被系统清除(kill)。 View等同于J2ME的Displayable,程序人员可以通过View 类与“XML layout”档将UI放置在视窗上,Android 1.5的版本可以利用View 打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC 的Android Hero手机即含有大量的widget。至于ViewGroup 是各种layout 的基础抽象类(abstract class),ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity 中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。View 与事件(event)息息相关,两者之间通过Listener 结合在一起,每一个View都可以注册一个event listener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于J2ME的BitMap。 中介软件 操作系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机(Virtual Machine)。Bionic是Android 改良libc的版本。Android 同时包含了Webkit,所谓的Webkit 就是Apple Safari 浏览器背后的引擎。Surface flinger 是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自

android系统详细介绍

android Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linu x平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前最好的是Android2.0的摩托罗拉Droid 目录[显示] [编辑本段] 简介 Android是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟(Open Handset Alliance)开发。它采用了软件堆层(software st ack,又名为软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。Android在未公开之前常被传闻为Google电话或gPhone。大多传闻认为Goog le开发的是自己的手机电话产品,而不是一套软件平台。到了2010年1月,Googl e开始发表自家品牌手机电话的NexusOne。目前最新版本为Android2.1。 对手机行业的影响 已经与HTC、NTT DoCoMo、KDDI、Motorola等世界移动领域34家公司于免费提供达成一致。今后对于移动通讯的影响势必会进一步体现出来。但是如此广泛公司的同盟是否能够有效运作以及持久,让我们拭目以待。 Android手机 2008年9月22日,美国运营商T-MobileUSA在纽约正式发布第一款Goog le手机——T-Mobile G1。该款手机为台湾宏达电代工制造,是世界上第一部使用Android操作系统的手机,支持WCDMA/HSPA网络,理论下载速率7.2Mbps,并支持Wi-Fi。 (左图为Androidlogo) [编辑本段]

Android本质上就是一个基于Linux内核的操作系统

Android本质上就是一个基于Linux内核的操作系统。与Ubuntu Linux、Fedora Linux 类似。只是Android在应用层专门为移动设备添加了一些特有的支持。既然Android是Linux内核的系统,那么基本的启动过程也应符合Linux的规则。如果研究过其他Linux 系统应该了解,一个完整的Linux系统首先会将一个Linux内核装载到内存,也就是编译Linux内核源代码生成的bzImage文件,对于为Android优化的Linux内核源代码会生成zImage文件。该文件就是Linux内核的二进制版本。由于zImage在内核空间运行,而我们平常使用的软件都是在应用空间运行(关于内核空间和应用空间的详细描述,可以参考《Android深度探索(卷1):HAL与驱动开发》一书的内容,在后续的各卷中将会对Android的整体体系进行全方位的剖析)。内核空间和应用空间是不能直接通过内存地址级别访问的,所以就需要建立某种通讯机制。 目前Linux有很多通讯机制可以在用户空间和内核空间之间交互,例如设备驱动文件(位于/dev目录中)、内存文件(/proc、/sys目录等)。了解Linux的同学都应该知道Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在用户空间,所以在Linux内核装载完,需要首先建立这些文件所在的目录。而完成这些工作的程序就是本文要介绍的init。Init是一个命令行程序。其主要工作之一就是建立这些与内核空间交互的文件所在的目录。当Linux内核加载完后,要做的第一件事就是调用init程序,也就是说,init是用户空间执行的第一个程序。 在分析init的核心代码之前,还需要初步了解init除了建立一些目录外,还做了如下的工作 1. 初始化属性 2. 处理配置文件的命令(主要是init.rc文件),包括处理各种Action。 3. 性能分析(使用bootchart工具)。 4. 无限循环执行command(启动其他的进程)。 尽管init完成的工作不算很多,不过代码还是非常复杂的。Init程序并不是由一个源代码文件组成的,而是由一组源代码文件的目标文件链接而成的。这些文件位于如下的目录。 /system/core/init 其中init.c是init的主文件,现在打开该文件,看看其中的内容。由于init是命令行程序,所以分析init.c首先应从main函数开始,现在好到main函数,代码如下: int main(int argc, char **argv) { int fd_count = 0; struct pollfd ufds[4]; char *tmpdev; char* debuggable; char tmp[32]; int property_set_fd_init = 0; int signal_fd_init = 0;

(完整word版)ios与android系统架构

系统包(运行架构) Android Ios Android系统的优先级响应层级是Application(应用层)--Framework(框架层)--Library (运行库及显示)--Kernal(内核层)架构,和显示相关的图形图像处理这一部分属于Library,可以看到到第三位才是它,当触摸屏幕之后Android系统首先会激活应用,框架然后才是屏幕最后是核心架构。 iOS对屏幕反应的优先级是最高的,它的响应顺序依次为Touch(触摸显示)--Media(媒体)--Service(服务)--Core(内核)架构,换句话说当用户只要触摸接触了屏幕之后,系统就会最优先去处理屏幕显示也就是Touch这个层级,然后才是媒体(Media),服务(Service)以及Core架构。 应用程序框架层

Linux内核层 Android是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程Android 内核分析 一、内核在操作系统中的地位 Android基于Linux操作系统由硬件、系统内核、系统服务和应用程序等四大部分组成。其中内核是核心的部分,其主要作用在于与计算机硬件进行交互实现对硬件的编程控制和接口操作调度访问硬件资源同时向应用程序提供一个高级的执行环境和对硬件的虚拟接口。主要功能包括中断服务程序、进程调度程序、进程地址空间的内存管理、进程间通信。内核与普通应用程序不同,其拥有所有硬件设备的访问权限以及启动时即划分的受保护的内存空间。 二、Android内核和标准的Linux内核一样,Android内核主要实现内存管理、进程调度、进程间通信等功能。 Android内核是在标准Linux内核的基础上修改而成。为了适应嵌入式硬件环境和移动应用程序的开发Android对标准Linux内核进行了一定的修改。经过与标准Linux内核源代码进行详细对比可以发现Android内核与标准Linux内核在文件系统、进程间通信机制、内存管理等方面存在不同。 文件系统不同于桌面系统与服务器,移动设备大多采用的不是硬盘而是采用Flash作为存储介质,因此Android内核中增加了标准Linux内核中没有采纳的YAFFS2文件系统。 YAFFS2按层次结构设计分为文件管理接口、内部实现层和NAND简化了其本身与系统的接口设计能更方便地集成到系统当中。 进程间通信机制Android增加了一种进程间的通信机制IPCBinder,Binder通过守护进程ServiceManager管理系统中的服务,负责进程间的数据交换。各进程通过Binder访问同一块共享内存以达到数据通信的机制。从应用层的角度看进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通过接口共享数据,而其他进程要访问数据也只需与程序框架接口进行交互方便了程序员开发需要交互数据的应用程序。 内存管理在内存管理模块Android内核采用了一种不用于标准Linux内核的低内存管理策略。在标准Linux内核当中使用一种叫做OOM(OutofMemory)的低内存管理策略,当内存不足时系统检查所有的进程并对进程进行限制评分获得最高分的进程将被关闭。Android新增加了一种内存共享的处理方式Ashmem。通过Ashmem进程间可以匿名自由共享具名的内存块这种共享方式在标准Linux当中不被支持。经过分析Android内核由标准Linux内核修改而来,因此继承了Linux内核的各种优点保留了标准Linux内核的主体架构。 同时Android按照移动设备的需求在文件系统、内存管理、进程间通信机制、电源管理等方面进行了修改添加相关的驱动程序和一些必要的新功能,但是与大多数精简的嵌入式Linux操作系统相比Android很大程度上保留了标准Linux的基本架构,因此Android系统应用范围更加广泛拓展性更强。

安卓系统文件夹结构及其文件解析(详细)

安卓系统文件夹及其文件解析 打开Android文件管理器,会发现里面数十个英文名称命名的文件夹罗列其中,很多功能我们可以从其名字上略有所知,内部大批量的文件却让我们有些一头雾水。这些文件是什么?有什么用?我们能不能删?这些都是我们脑中充满疑问的。现在将将Android手机内部文件夹的架构和各文件的功能描述介绍给大家,让大家自己手机的内部资源有个比较透彻的理解,同时也避免了用户误删造成的数据丢失和系统崩溃。 【文件夹功能简介】 \system\app 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。 \system\bin 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux 系统自带的组件(命令) \system\etc 从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。 \system\fonts 字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小。 \system\framework framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。 \system\lib lib目录中存放的主要是系统底层库,一些so文件,如平台运行时库。 \system\media \system\media\audio 铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音。 \system\sounds 默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。 \system\usr 用户文件夹,包含共享、键盘布局、时间区域文件等。 \system\app 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。 \system\app\AlarmClock.apk 闹钟

计算机与手机操作系统现状分析 —— 基于Android与iOS系统的比较

---------------------------------------------装--------------------------------- --------- 订 -----------------------------------------线---------------------------------------- 班级 10 金融工程1班 姓名 黄景豪 学号 10250502104 -

计算机与手机操作系统现状分析 ——基于Android与iOS系统的比较------------------------------------------------------------------------------------------------------------------------------------摘要:近年来,移动设备操作系统的竞争越演越热,本文通过研究目前市场中最为热门的Android系统和iOS系统的设计理念,用户界面,系统功能等来透析现有移动互联网操作系统的优缺点,来探索到未来移动互联网操作系统的影子和发展方向。同时以预测这两个系统在未来的市场表现并为国内相关企业提供一些创新的基本思路。 关键词:手机操作系统Android iOS 现状分析创新模式 1引言 2007年6月,苹果公司发布的使用iOS系统的iPhone智能手机,被证实真正的挖掘了智能手机所被人们忽略的潜能。由于iPhone的过于出色,将移动手机巨头摩托罗拉公司挤到破产边缘。而拥有Symbian系统,如日中天的诺基亚,在仅仅4年内,市值从2007年的1100亿欧元缩水到148亿欧元,也濒临破产危机。诺基亚新CEO斯蒂芬埃洛普表示:“现在的诺基亚真正成为了一个着火的平台。”iPhone的成功只是拉开了移动互联网时代的面纱,它带来的不仅仅是苹果公司10亿美元的销售额,还直接点燃了所有IT巨头对于被誉为是移动互联网未来的这块新蛋糕的争夺战。 同年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统,一款基于Linux的自由及开放源代码的操作系统。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。摩托罗拉通过分离旗下的移动手机部门,投靠Google着手生产Android系统智能手机挽回败局,重新在市场上占有一席之地。 在当下,硬件已经不是核心竞争力,软件,也就是我们所谓的操作系统成为了战争的主角。在接下来的章节中,本文将对这两款操作系统进行剖析。 2操作系统简介 操作系统(Operating System)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作

ios操作系统与安卓系统对比的优势教学文稿

i o s操作系统与安卓 系统对比的优势

ios操作系统与安卓系统对比的优势 Android抗衡iOS还是有些力不从心,比如在移动应用开发者的收入方面,平台的整合度,操作的流畅度等。尤其在企业级市场,几乎已被iOS全面占领,新兴的企业都表示更加青睐iOS而非所谓“开放”、基于Linux内核、拥有双核甚至四核……的Android设备。 企业级用户对稳定和实时性的需求恰恰就是Android的软肋,网络上一个段子很能表现Android的窘境:“Android用户三大爱好:刷机重启换电池”,还有人出来解释“为什么Android永远不会比iOS流畅”,并称Android是本着学、赶、超的思路诞生并发展起来,在黑莓时代Android设备最早是按照全键盘机型作为参考,后来iPhone的横空出世才导致Android瞬间改头换面,于是为后面的图形渲染等等埋下了隐患。 Android是第一个内置支持Java的操作系统,Android应用程序使用Java语言编写。Android开发水平的高低很大程度上取决于Java语言核心能力是否扎实。iOS苹果的iPhone和iPad应用开发都指定使用同一开发语言:Objective-C 语言。Objective-C是Cocoa的本地编程语言,Coaco框架和大多数应用程序都使用该语言编写而成。但是也可以使用Python、Ruby等其他编程语言开发应用程序,并且此种开发方式也可使用Cocoa框架。 系统特性: 1、与硬件整合度高:使用起来更加流畅;不支持Flash,但可以使用第三方程式Jailbreak观看。 2、通知中心:苹果在iOS5上改变了通知中心的形式。在新的通知中心中,提示不会再像以前那样弹出,而是像Android系统那样出现在屏幕上方。你可以下拉这个菜单,选择自己想查看的信息。不会再被弹出的信息打扰还是件很令人舒服的改变。

基于Android操作系统的中国象棋手机游戏

基于Android操作系统的中国象棋手机游戏

石家庄科技信息职业学院 毕业论文 题目:基于Android操作系统的中国象棋手机游戏 学号:090124012 姓名:王麒 专业班级:软件技术(游戏方向)09-24 班 指导教师:刘永伟 完成日期:2011-12-18

摘要:Chess是运行在Android平台上的一款支持双人联网对局、即时聊天、对弈记录的休闲棋牌类手机游戏。 系统采用面向对象的编程思想进行构思与分析设计;使用UML构建软件模型;使用MVC架构模式实现系统的整体架构及各模块之间的接口设计;在系统的实践过程中还采用了部分GoF的设计模式进行编码与开发。 本文详细系统地阐述了在Android平台上,面向对象的软件开发思想对Chess游戏系统的分析、设计及实现过程。在项目的实践过程中,主要用到了以下技术:手机布局主要使用了XML设计,程序及其子模块的生命周期管理用到了Activity流程控制,数据储存方面使用的是轻量级数据库SQLite、网络通讯部分使用的是XMPP即时通讯协议进行数据的传输、对弈的画面更新使用的是手机的2D 图形编程。本论文的前半部分将简要介绍系统相关的行业信息及基础的技术知识,后半部分将对本人在系统各模块中所使用的关键技术的实现进行了全面的介绍。 关键词:联网对弈;中国象棋;手机游戏;Android平台

ABSTRACT:CnChess is a Chinese Chess game that running on the Android platform.It support many of the features such as playing games through the network, real-time chat, and play chess records of casual mobile games. The CnChess game is object-oriented programming design and analysis of the idea of thinking; build software models using UML; use of MVC architecture patterns to achieve the overall system and the interface between the module designs; in practice the system also uses some of the GoF's design patterns to coding and development. This paper systematically expounded in the Android platform, the application of MVC pattern and hierarchical structure of object-oriented software development thoughts cnChess game system analysis, design and implementation process. Practice in the course of the project, mainly used in the following technologies: cell phones primarily use XML layout design, process and life cycle management sub-module uses the Activity process control, data storage areas using a lightweight database SQLite, netwrok communication Some use the XMPP instant messaging protocol for data transmission, public debate of the frame using a mobile phone 2D graphics programming. The first part of this paper will briefly introduce the system based on relevant industry information and technical knowledge, the latter part of each module in the system; I will be in the key technology used in the realization of a comprehensive introduction. Keywords: Network of games; Chinese chess; Mobile Games; Android platform

Android手机操作系统

Android是什么 一、概述 Android本义“机器人”,Google于2007年11.5日发布的开源手机OS(在华注册商标名为“安致”),该平台由操作系统、中间件(SQLite等)、用户界面和应用软件组成。Android不存在专有权障碍,目前版本是Android2.0。 Android采用软件堆层(software stack,又名软件叠层)架构,底层以Linux内核工作为基础,提供基本功能;其他应用软件则由各公司自行开发,以Java编程。2010年1月,Google发表自家品牌手机电话的Nexus One。 2008年9.22日,美国T-Mobile USA在纽约发布第一款Google手机T-Mobile G1(台湾宏达电代工制造),是世界上第一部使用Android操作系统的手机,支持WCDMA/HSPA网络,理论下载速率7.2Mbps,并支持Wi-Fi。 二、基本情况 Android早期由Google开发,后由开放手机联盟开发,这个联盟由包括中国移动、摩托罗拉、高通、宏达电(HTC)和T-Mobile在内的30多家领军企业组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。 三、团队成员 Google、HTC、PHILIPS、T-Mobile、高通、魅族、中国联通、华为、联想、摩托罗拉、三星、LG及中国移动在内的34家企业,都将基于该平台开发手机业务,应用之间的通用性和互联性将在最大程度上得到保持。这34家企业中并不包含诺基亚、苹果公司、AT&T、Verizon、微软及加拿大RIM(Blackberry)。 <手机制造商> :HTC、摩托罗拉、三星、LG、中国移动、日本KDDI、日本NTT DoCoMo、美国Sprint Nextel、意大利电信、T-Mobile。 <半导体公司> :Audience Corp(声音处理器)、Broadcom Corp(无线半导体提供商)、英特尔、Nvidia(图形处理器公司)、SiRF(GPS技术提供商)、Synaptics(手机用户界面技术)、德州仪器、高通、惠普HP。 <软件公司> :Aplix、Ascender、eBay的Skype、NMS Communications、Noser Engineering AG、Nuance Communications、SkyPop、PacketVideo、Sonix Network、TAT-The Astonishing Tribe、Wind River Systems。

相关主题
文本预览
相关文档 最新文档