2.4 Android操作系统
2.4.1 Android操作系统概述
Android一词的本义指“机器人”,是Google公司于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称。该平台由操作系统、中间件、用户界面和应用软件组成。2012年7月,美国科技博客网站Business Insider评选出21世纪10款最重要的电子产品,Android操作系统和iPhone等榜上有名。
2.4.2 Android操作系统的体系结构
Android的系统架构和其操作系统一样,采用分层结构,分为4层,从高到低分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层。
1.应用程序层
Android会同一系列核心应用程序包一起发布。该应用程序包包括客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所有的应用程序都是用Java语言编写的。
2.应用程序框架层
开发人员可以完全访问核心应用程序使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布其功能块,并且任何其他应用程序都可以使用其发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制使用户可以方便地替换程序组件。
隐藏在每个应用后面的是一系列服务和系统,其中包括丰富而又可扩展的视图(Views),用于构建应用程序,包括列表(lists)、网格(grids)、文本框(text boxes)、按钮(buttons),甚至可嵌入的Web浏览器。
内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享自己的数据。
资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串、图形和布局文件(layout files)。
通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。
活动管理器(Activity Manager)用来管理应用程序生命周期,并提供常用的导航回退功能。
更多的细节和怎样编写应用程序,请参考第8章的内容。
3.系统运行库层
Android包含C/C++库。这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。下面介绍一些核心库。
(1)系统C库:一个从BSD继承来的标准C系统函数库(libc),专门为基于embedded Linux的设备而定制。
(2)媒体库:基于Packet Video Open CORE。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG及PNG。
(3)Surface Manager:管理显示子系统,并且为多个应用程序提供2D和3D图层的无缝融合。
(4)Lib Web Core:一个最新的Web浏览器引擎,支持Android浏览器和一个可嵌入的Web视图。
4.Linux核心层
Android运行于Linux kernel之上,但不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等,都被移除了。Android以bionic取代Glibc,以Skia取代Cairo,以opencore取代FFmpeg等。Android为了达到商业应用,必须移除被GNU GPL授权证约束的部分,例如Android将驱动程序移到user space,使得Linux driver与Linux kernel彻底分开。bionic/libc/kernel/并非标准的kernel header files。Android的kernel header是利用工具由Linux kernel header产生的,这样做是为了保留常数、数据结构与宏。
Android的Linux kernel控制包括安全(Security)、存储器管理(Memory Management)、程序管理(Process Management)、网络堆栈(Network Stack)、驱动程序模型(Driver Model)等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。
2.4.3 Android操作系统的功能特性
1.开放性
在优势方面,Android平台首先就是有开放性,开发的平台允许任何移动终端厂商加入Android联盟。显著的开放性使其拥有更多的开发者。随着用户和应用日益丰富,一个崭新的平台将很快成熟。
开放性对于Android的发展而言,有利于积累人气。这里的人气,包括用户和厂商。对于用户来讲,最大的受益正是丰富的软件资源。开放的平台会带来更大的竞争,如此一来,将用更低的价位购得心仪的手机。
2.挣脱运营商的束缚
在过去很长的一段时间,特别是在欧美地区,手机应用受到运营商制约,使用什么功能、接入什么网络,几乎都受到运营商的控制。从iPhone上市以来,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G或3G移动网络逐步过渡和提升,手机随意接入网络不是运营商口中的笑谈,通过手机IM软件可以方便地实现即时聊天。
互联网巨头Google公司推动的Android终端天生就有网络特色,让用户离互联网更近。
3.丰富的硬件选择
这一点与Android平台的开放性相关。由于Android的开放性,众多厂商推出各具特色的产品。功能上的差异和特色,不会影响数据同步,甚至软件的兼容,如同从诺基亚Symbian风格手机一下改用苹果iPhone,还可将Symbian中优秀的软件带到iPhone上使用,“联系人”等资料可以方便地转移。
4.不受任何限制的开发商
Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻挠。可想而知,会有多少新颖、别致的软件诞生。但也有其两面性,如何控制血腥、暴力、色情方面的程序和游戏,是留给Android的难题之一。
5.无缝结合的Google应用
在互联网的Google已经有十多年的历史,从搜索巨人到全面的互联网渗透,Google服务,如地图、邮件、搜索等成为连接用户和互联网的重要纽带。Android平台手机将无缝地结合这些优秀的Google服务。
2.4.4 Android操作系统支持的多媒体功能
多媒体框架在整个Android系统所处的位置如图2-2所示。
图2-2 多媒体框架图
从图中可以看出,Media Framework处于Libraries层。这一层的Library不是用Java实现,一般由C/C++实现,它们通过Java的JNI方式调用。
1.多媒体架构
基于第三方Packet Video公司的Open CORE platform实现多媒体架构,支持所有通用的音频、视频、静态图像格式。
CODEC(编解码器)使用OpenMAX 1L interface接口进行扩展,可以方便地支持hardware/software codec plug-ins(硬件/软件编解码器插件),支持的格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等,其特点如下所述。
Open Core多媒体框架有一套通用、可扩展的接口针对第三方的多媒体遍解码器、输入/输出设备等。
多媒体文件的播放、下载,包括3GPP、MPEG-4、AAC和MP3 containers。流媒体文件的下载、实时播放,包括3GPP、HTTP和RTSP/RTP。动态视频和静态图像的编码、解码,例如MPEG-4, H.263和AVC(H.264)、JPEG。语音编码格式AMR-NB和AMR-WB。音乐编码格式MP3、AAC、AAC+。视频和图像格式3GPP、MPEG-4和JPEG。视频会议,基于H324-M标准。图2-3中用线圈出的是Media Framework。
图2-3 Media Framework
2.Open Core介绍
Open Core是Android多媒体框架的核心,所有Android平台的音/视频采集、播放操作都是通过它实现的。它也被称为PV(Packet Video)。Packet Video是一家专门提供多媒体解决方案的公司。
通过Open Core,程序员可以方便、快速地开发出想要的多媒体应用程序,例如音/视频的采集、回放,视频会议,实时的流媒体播放等应用。
3.代码结构
Open Core的代码在Android代码的External/Opencore目录中。该目录是OpenCore的根目录,其中包含的子目录如下所述。
(1)android:这里面是一个上层的库,它实现了一个为Android使用的音/视频采集、播放的接口,以及DRM数字版权管理的接口。
(2)baselibs:包含数据结构和线程安全等内容的底层库。
(3)codecs_v2:音/视频的编/解码器,基于OpenMAX实现。
(4)engines:核心部分,多媒体引擎的实现。
(5)extern_libs_v2:包含khronos的OpenMAX的头文件。
(6)fileformats:文件格式的解析(parser)工具。
(7)nodes:提供一些PVMF的NODE,主要是编/解码和文件解析方面的。
(8)oscl:操作系统兼容库。
(9)pvmi:输入/输出控制的抽象接口。
(10)protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容。
(11)pvcommon:pvcommon库文件的Android.mk文件,没有源文件。
(12)pvplayer:pvplayer库文件的Android.mk文件,没有源文件。
(13)pvauthor:pvauthor库文件的Android.mk文件,没有源文件。
(14)tools_v2:编译工具以及一些可注册的模块。
4.Open Core上层代码结构
在实际开发中,人们不会过多地研究Open Core的实现。Android提供了上层Media API给开发人员使用。实际调用过程如图2-4所示。
图2-4 Media API
2.4.5 Android操作系统支持的增值业务
理论上,采用Android操作系统的移动终端,基本上全部支持目前各大移动运营商开设的各种增值业务。
移动增值业务是移动运营商在移动基本业务(话音业务)的基础上,针对不同的用户群和市场需求开通的供用户选择使用的业务。移动增值业务是市场细分的结果,它充分挖掘了移动网络的潜力,满足用户的多种需求,因此在市场上取得了巨大成功。如预付费业务(神州行、如意通)、短消息增值业务(移动梦网、联通在信),都拥有众多用户,成为运营商的主要品牌。移动增值业务成为移动运营商价值链最重要的组成部分,市场前景广阔,需求极大。据预测,中国移动增值业务市场将以每年超过30%的速度增长。
移动商务是指通过移动通信网络传输数据,同时利用移动增值业务移动终端参与各种商务经营活动的一种新型电子商务模式。企业移动商务服务不仅包括移动银行、手机支付、移动营销、移动新型查询等,还包括为企业量身定做、能大幅提高企业运作效率和营销能力的移动应用解决方案。
移动通信发展到今天,最能体现其勃勃生机的地方在于它丰富多彩的数据业务和增值业务。因为它适应了信息时代人们对移动业务的要求,给生活带来了极大便利,这是发展的契机。移动位置业务正是在这一发展机遇下,作为移动通信网提供的一种增值业务,悄然兴起。它通过一定的技术,得到用户的位置信息(经纬度或当地街道的位置等),提供给该用户本人或通信系统本身(用于计费),或者提供给其他请求得到该用户位置的机构或个人。由于该业务在紧急救援、汽车导航、智能交通、团队管理等方面突出的作用,被越来越多的人接受,发展非常快。
美国联邦通信委员会(FCC)早在1996年就规定美国的移动通信公司必须在2001年前为每位拥有手机的用户提供位置业务,使这些用户用手机拨打911紧急救援电话时,救援中心能快速得到该用户的位置,开展救援活动。FCC还对所要提供的位置精度作出了规定。由于位置业务的深远影响,GSM标准化组织ETSI委托美国的T1P1为GSM制定Phase2+LCS(位置业务)标准,并已纳入ETSI标准。与此同时,AMPS、CDMA、寻呼系统等移动通信系统都积极开发位置业务,许多厂商开发出定位设备,向用户提供精度越来越高的位置业务。
随着社会发展,人们的活动范围越来越大,而且越来越不确定。这种移动性和不确定性给移动通信带来市场和挑战的同时,为移动位置业务的开展和扩大提供了必要的条件,带来了无限商机。另一方面,移动台的位置信息对于通信本身来说,也是非常重要的信息。得到移动台位置,也是通信网自身发展的需要。无论是用户的需要,还是运营商或网络供应商的需要,都为位置业务的发展注入了活力,使位置业务市场一片生机。鉴于此,Android的应用前景是非常广阔的。
(1)紧急救援:用户在不知道自己位置的情况下,只要其手机支持移动位置业务,就可以在拨打救援中心的电话,如中国的110、美国的911、日本的411,移动通信网络在将该紧急呼叫发送到救援中心的同时,启动支持移动位置业务的网元,得到用户的具体位置,并将该位置信息和用户的语音信息一起传送给救援中心;救援中心接到呼叫后,根据位置信息,快速、高效地开展救援活动,提高救援的成功率。
(2)导航和定位:移动通信网提供的位置业务能满足多山和多隧道地区的列车进行导航和跟踪,以及城市商业区多建筑物的定位,只要为每一辆或每一列需要导航和跟踪的汽车或列车安装一个移动车载台,在商业区提供较好的基站覆盖,在隧道里安装专门的基站,就可以解决覆盖问题。通信网为这些车载台提供位置信息,并将这些信息通过通信网本身传输给负责交通管理的调度中心,就可快速地在车和调度中心之间建立协调的运行管理和导航。
(3)工作制度:移动位置业务还广泛应用在各行各业的工作调度和团队管理中。例如地质勘探队的野外作业、铁路维修人员的日常维修活动、旅游团管理等,都可以借助移动通信网提供的位置业务,一方面用手机正常通话;另一方面享受其定位服务,远距离作业时,可以轻松地与队员取得联系,得到自己和队员的位置,不致迷失方向。
(4)移动黄页查询:互联网的黄页查询是国外发展比较迅速的网络培植业务,用户可以在互联网查询自己所在区域范围内的相关信息,包括附近有哪些饭店、商场,以及天气情况、附近各公司的电话号码和所在位置,等等。移动互联网技术与移动位置业务相结合,可以轻而易举地实现移动黄页查询。移动网络首先定位出用户所处的位置,然后在互联网提供的信息中节选出用户所在地的相关信息,供用户查询。固定黄页查询能够得到的信息,移动黄页查询都可以得到。这种业务充实了移动互联网的业务内涵,让人们更真实地感受到移动互联网带来的全新生活。
(5)与位置有关的计费:计费一直是电信运营商和用户非常关心的问题。要实现公正、有效的计费,不是件容易的事情。运营商和用户之间总是不容易理顺这一关系。计费问题的产生,本身是由于用户占用了网络资源,运营商需要就这一部分资源向用户收取一定的费用。能否正确地界定用户所占网络资源的位置特征,是处于话务比较繁忙的商业区,还是处于相对比较空闲的郊区;是处于高速公路上,正快速地移动;还是在家中。这些特征不同,对于网络来说,为这一次通话提供的服务量就不同。在高速公路上,由于移动台要频繁越区,网络需要频繁切换,涉及的网络节点比较多。因此,运营商根据不同特征,对用户的通话计费。目前的计费方式只有两种:与时间有关的计费和与距离有关的计费。前者根据通信的时间段不同,计费价格不同;后者根据通信距离长短计费。它们基本反映了用户以前两种方式占用无线资源的情况。对于第三种方式,运营商在计费方面还没有考虑。原因在于运营商不知道用户的确切位置,无法判断其所处位置的特征。随着位置业务的发展,与位置有关的计费将发展起来。目前,美国有一些公司,如朗讯、康柏、Motorola为用户提供与位置有关的计费。美国32%的无线用户也愿意参与位置有关的计费。在家里通话和在车上通话付同样的费用,对于用户来说是不公平的。在车上通话的费用应该高。这种计费方式充分体现了用户为得到移动性服务应该付出的费用,同时为那些在家里用手机通话的用户实现了公平计费。这种计费方式可以吸引那些移动性不是很大的用户,无形之中增加了移动通信网用户。
(6)增强网络性能:通信网的移动性管理一直是网络的难点问题,主要原因就是移动位置的不确定性。如果网络本身知道移动中的精确位置,移动性管理就相对简单了。另一方面,有助于对移动台进行有效的信道分配,使无线资源的利用程度更高。另外,如果能够实时地得到移动台的位置信息,可以实现资源的动态、智能分配,增强网络性能,提高网络服务质量。
(7)灵活多样的技术形式:移动位置业务的迅速发展与其具有灵活多样的技术形式有很大关系。这些技术互相结合,相互补充,对位置业务的发展发挥了作用。采用简单、方便的技术,原有通信网和用户手机无须任何调整和改变,只需升级软件。它们的存在使移动位置业务迈开了至关重要的第一步。其他较复杂的技术虽然需要调整网络和移动台,但能提供更高的定位精度。这为移动位置业务的发展提供了技术支持,使其具有更广阔的市场前景。
2.4.6 Android操作系统的安全性
Android系统自身具备开放源码的特征,所以其安全性能成为信息安全领域研究的重要课题,对现实工作有较大的借鉴作用,下面从系统和数据两个方面简单分析Android系统的安全性能。
1.Android安全性能现状
Android的安全性能主要体现在两个方面:Android的系统安全和数据安全。Android系统安全是指智能终端本身的安全,是对操作系统的保护,防止未授权的访问及对授权用户服务的拒绝,或对未授权用户服务的允许,包括行为检测、记录等措施。Android的数据安全指确保存储数据完整性、合法性两个方面,要求做到系统正确地传输数据,授权程序顺利地读取数据。
1)Android系统安全的保障
Android采用的是经过定制的Linux 2.6内核,其系统安全继承了Linux的设计思想。在Linux内核的基础上,Android提供诸如安全、内存管理、进程管理、网络管理、驱动模型等多种核心服务,内核部分实际上是一个介于硬件层和系统中其他软件组之间的一个抽象层次。所以说,Android的系统层面是Linux,中间是Dalvik的Java虚拟机,表面层运行Android类库。在实际操作中,每个Android应用都运行在自己的进程上,每个进程都独享Dalvik虚拟机为它分配的专有实例,并且支持多个虚拟机在同一个系统上高效运行。Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)。该格式经过优化,降低内存耗用到最低。Java编译器将Java源文件转为class文件,class文件又被内置的dx工具转化为dex格式文件。这种文件在Dalvik虚拟机上注册并运行。Android系统的应用软件都是运行在Dalvik之上的Java软件,而Dalvik运行在Linux中,在一些底层功能,比如线程和低内存管理方面,Dalvik虚拟机依赖Linux内核。
Android的数据安全机制涉及两个概念:UID(用户标识)和权限。UID是指安装在Android中的每个程序都会被分配一个属于自己的Linux用户ID,并且为它创建一个沙箱,防止影响其他程序(或者受其他程序影响)。用户ID在程序安装时被分配,并且在系统中永久保持。权限是指为Android允许用户或者程序限定可以执行的操作,包括打开数据文件、发送信息和调用Android组件等。权限是Android为保障安全而设定的安全标识,也是程序实现某些特殊操作(比如申请系统Service)的基础。
2)Android数据安全的保障
数据安全主要依赖软件签名机制来保障。Android和应用程序都需要签名,发布时首先通过development/tools/make_key生成公钥和私钥,具体由Android中提供的工具./out/host/linux-x86/framework/signapk.jar来签名。签名的主要作用在于使对于程序的修改仅限于同一来源,系统中主要有两种检测方式。如果是安装程序升级,检查新、旧程序的签名证书是否一致。如果不一致,安装失败。若申请权限的protected level为signature或者signatureorsystem,检查权限申请者和权限声明者的证书是否一致。
Android对权限的申请、审核以及确认相当严格。正是这样的安全权限机制,保障了数据的安全性。
2.Android安全性能分析
针对上述Android安全性能现状,从下面几个方面进行研究、分析。
(1)Android内核存在大量漏洞。由于Android系统平台自身开源性的特征,它已经成为黑客的重点攻击目标。黑客针对现有漏洞,开发出漏洞利用工具,窃取用户隐私、恶意扣费等行为的工具和木马类型的恶意软件占多数。运行此类程序,病毒会自动联网,在系统后台启动恶意进程,窃取手机中的隐私内容,直接威胁用户安全。
(2)Android缺乏功能强大的病毒防护或者防火墙。公众的手机防病毒意识还不强,Android系统作为基于Linux的智能手机平台,其病毒防护或防火墙功能较弱。目前基于Android平台的病毒变种呈集群式爆发。从发现“给你米”“安卓吸费王”病毒到现在,其变种多达63个,波及用户数超过90万。Android平台病毒的某些特征逐渐凸显,病毒作者植入的软件越来越有名,例如被查杀的“红透透(HongTouTou)病毒”就伪装在知名手机游戏软件“机器人塔防”中,盗取用户私人信息,已造成较大破坏。
(3)Android应用软件缺乏安全审核及监管保护。Android用户远离恶意应用程序是一种基于“功能”的安全模式。每个Android应用程序必须告知手机的操作系统它需要的功能。安装时,操作系统列出应用程序需要运行的功能。用户应判断这是否与其声称的相符。基于功能的系统具有由操作系统强制执行的优势。应用程序根本不可能说一套做一套,也不依赖于人工筛选的警觉。这样做的问题在于无法确保应用程序的行为与其被给予的信任相称。
功能限制并不能保护用户免受攻击,因为流氓软件要求的权限与合法应用程序是一样的:接收用户名和密码,并通过互联网与远程服务器沟通这些信息的权限。基于功能系统的另一个问题在于,它需要用户仔细考虑安全问题。许多用户难以准确评估想要下载运行的软件风险——即便怀疑可能是恶意软件。Android手机系统自身的验证机制相对薄弱,如其只能保证检测下载程序的稳定性、数据完整性,无法验证Android手机软件的来源,以及判定安装后程序可能存在的行为,将无法保证安全性。
(4)Android软件开发工具包(SDK)存在较多安全隐患。Android SDK自测试阶段就不断暴露出例如远程控制漏洞、整数溢出和浏览器在处理GIF、BMP和PNG图像时的数据溢出等各种类型的漏洞。攻击者利用这些漏洞执行恶意代码,进而完全控制装有Android软件的手机。如果补丁未及时更新,极易造成较大危害。