【网学网提醒】:网学会员为需要朋友们搜集整理了android解析相关资料,希望对各位网友有所帮助!
[Android]一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件
Android是以Linux为核心的手机操作平台,使用Java作为主要编程语言,但可以通过NDK支持C/C++,也可使用SL4A来支持其他各种脚本语言(python、lua、tcl、php等等),Qt(qtforandroid)、Mono(monoforandroid)等一些著名编程框架也开始支持Android编程,另外,在网页编程语言方面,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。Android一词最早出现于法国作家利尔亚当(AugusteVilliersdel'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'èvefuture)中。他将外表像人的机器起名为Android。Android操作系统最初由AndyRubin开发,最初主要支持手机。2005年由Google收购注资,并拉联合家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。
Android开发的行业特点
发展空间:随着中国3G市场逐步扩大,中国移动互联网时代已经来临,智能手机作为移动互联的最佳终端,其市场份额与日俱增。来自谷歌的Android智能手机操作系统凭借免费开源成为终端平台的霸主,得到了亿万消费者的认可和青睐,每天有超过16万台的Android设备出货。随着Android平台的扩张,引发了Android人才荒。全世界所有大中小型手机制造商几乎都在招聘Android工程师。因此不论是在这个领域就业还是将来在这个领域创业,都是非常明智的选择。
人才稀缺:据数据统计显示,全球的Android开发工程师都呈非常稀缺的态势,就2010年移动开发人才需求达20万,未来人才需求缺口将达百万。从人才需求类型来看,目前对Android人才需求一类是偏向硬件驱动的Android人才需求,一类是偏向软件应用的Android人才需求。从目前的招聘需求来看,后者的需求最大,包括手机游戏、手机终端应用软件和其他手机应用软件的开发。但符合条件的Android工程师屈指可数,每一个Android开发工程师都是多家企业争相抢夺的对象。目前的IT领域没有任何一个岗位能够有如此高的热度。我们相信,在未来几年内,Android开发工程师也将成为3G-4G行业炙手可热的岗位之一。
薪酬水平:由于人才的稀缺,目前Android开发工程师的薪酬比其他任何领域的开发工程师的薪酬都要高出一大截。起步薪酬就能拿到四千以上,工作一两年就能达到年薪十万,资深的Android研发工程师年薪更接近20-40万。但即便如此,这些高薪岗位依然一将难求。
Android平台优势:
1、Google开发
的基于Linux平台的开源手机操作系统;
2、优秀的开放性、漂亮友好的图形界面、优秀的多媒体功能支持、高效的2D及3D图形渲染能力;
3、丰富的开发环境包括设备模拟器、调试工具、内存及性能分析图表,和Eclipse集成开发环境插件;
4、手机、PDA、MID、笔记本、GPS等众多平台的支持,真正的跨平台王者。
其中Activity等同于J2ME的MIDlet,一个Activity类(Class)负责创建视窗(Windows),一个活动中的Activity就是在foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由ServiceConnection和AIDL连结,达到复数
程序同时运行的效果。如果运行中的Activity全部画面被其他Activity取代时,该Activity便被停止(Stopped),甚至被系统清除(Kill)。
View等同于J2ME的Displayable,
程序人员可以通过View类与“XMLlayout”档将UI放置在视窗上,Android1.5的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的AndroidHero手机即含有大量的widget。至于ViewGroup是各种layout的基础抽象类(abstractclass),ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。View与事件(event)息息相关,两者之间通过Listener结合在一起,每一个View都可以注册一个eventlistener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架
注册View.OnClickListener。另外还有Image等同于J2ME的BitMap。
中介软件
操作系统与应用
程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(VirtualMachine)。Bionic是Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是AppleSafari浏览器背后的引擎。Surfaceflinger是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的BionicLibc。
Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX。
Android使用skia为核心图形引擎,搭配OpenGL/ES。skia与LinuxCairo功能相当,但相较于LinuxCairo,skia功能还只是雏形的。2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,目前Skia也是GoogleChrome的图形引擎。
Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类(Column)取得共用数据库。
Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirt
ualMachine)。Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。
Dalvik虚拟机可以有多个实例(instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行
程序时可达到优化。Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。
硬件抽像层
Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成kernelindependent的概念,也让Androidframework的开发能在不考量驱动
程序实现的前提下进行发展。
HALstub是一种代理人(proxy)的概念,stub是以*.so档的形式存在。Stub向HAL“提供”操作函数(operations),并由Androidruntime向HAL取得stub的operations,再callback这些操作函数。HAL里包含了许多的stub(代理人)。Runtime只要说明“类型”,即moduleID,就可以取得操作函数。
编程语言
Android是运行于Linuxkernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNUGPL授权证所约束的部份,例如Android将驱动
程序移到userspace,使得Linuxdriver与Linuxkernel彻底分开。bionic/libc/kernel/并非标准的kernelheaderfiles。Android的kernelheader是利用工具由Linuxkernelheader所产生的,这样做是为了保留常数、数据结构与宏。
目前Android的Linuxkernel控制包括安全(Security),存储器管理(MemoryManagement),程序管理(ProcessManagement),网络堆栈(NetworkStack),驱动
程序模型(DriverModel)等。
下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。
安全权限机制
Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部分也分别使用各自独立的识别方式。Linux就是这样将应用与应用,应用与系统隔离开。
系统更多的安全功能通过权限机制提供。权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。
Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人
或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
安装应用时,在检查
程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。从用户角度看,一款Android应用通常会要求如下的权限:
拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人信息、读取日程信息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄
图片等。
一款应用应该根据自身提供的功能,要求合理的权限。用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。如一款应用是不带广告的单机版,也没有任何附加内容需要
下载,那么它要求访问网络的权限就比较可疑。