Android开发基础知识
1 什么是Android?
Android(读音:英:['ændrɔɪd],美:[ˈænˌdrɔɪd]),常见的非官方中文名称为安卓,是一个基于Linux内核的开放源代码移动操作系统,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑与其他便携式设备。
Android最初由安迪·鲁宾等人开发制作,最初开发这个系统的目的是创建一个数码相机的先进操作系统;但是后来发现市场需求不够大,加上智能手机市场快速成长,于是Android成为一款面向智能手机的操作系统。于2005年7月11日被美国科技企业Google收购。 2007年11月,Google与84家硬件制造商、软件开发商及电信营运商成立开放手持设备联盟来共同研发改良Android,随后,Google以Apache免费开放源代码许可证的授权方式,发布了Android的源代码,开放源代码加速了Android普及,让生产商推出搭载Android的智能手机,Android后来更逐渐拓展到平板电脑及其他领域上。
2010年末数据显示,仅正式推出两年的Android操作系统在市场占有率上已经超越称霸逾十年的诺基亚Symbian系统,成为全球第一大智能手机操作系统。在2014年Google I/O开发者大会上Google宣布过去30天里有10亿台活跃的安卓设备,相较于2013年6月则是5.38亿。2017年3月,Android全球网络流量和设备超越Microsoft Windows,正式成为全球第一大操作系统。
Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'Ève future)中。他将外表像人的机器人取名为Android。 Android是一个全身绿色的机器人,颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象征。有时候,它会以纯文字的标志展示。Android的标志是由Ascender公司设计的,其中的文字使用了Ascender公司专门制作的称之为“Google Droid”的字体。
2 Android系统的硬件
Android操作系统大多搭载在使用了ARM架构的硬件设备上。但是同样也有支持X86架构的Android操作系统,比如Google的Google TV就是使用一个特别定制的X86架构版本的Android操作系统。 华硕曾推出一系列使用x86 cpu的android手机,但兼容性较差、小问题较多;而华硕的android手机中,采用arm指令集者就比较稳定。 同样,苹果公司的iOS设备,比如iPhone、iPod Touch以及iPad产品(iOS 4以前,需越狱) 都可以安装Android操作系统,并且可以通过双系统引导工具OpeniBoot或者iDroid来运行Android操作系统。微软的Windows Mobile、Windows Phone产品也一样可以。另外Android亦已成功移植到搭载WebOS系统HP TouchPad以及搭载Meego系统的Nokia N9等设备。
3 Android系统架构
应用程序和应用程序框架: Android系统是基于Linux内核开发,使用Java作编程语言,使界面到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个Activity类别负责创建视窗,一个活动中的Activity就是在foreground(前景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和AIDL连结,达到复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。 View等同于J2ME的Displayable,程序人员可以透过View类别与“XML layout”档将UI放置在视窗上,并可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout。至于ViewGroup是各种layout的基础抽象类别,ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中获取View,Android的View类的显示很大程度上是从XML中读取的。View与事件息息相关,两者之间透过Listener结合在一起,每一个View都可以注册event listener,例如:当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于J2ME的BitMap。
运行库: 操作系统与应用程序的沟通桥梁,分为两层:函数层和虚拟机器。 Bionic是Android改良libc的版本。Android包含了Chrome浏览器引擎。Surface flinger是就2D或3D的内容显示到萤幕上。Android使用工具链为Google自制的Bionic Libc。 Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。 Android使用Skia为核心图形引擎,搭配OpenGL/ES。Skia与Linux Cairo功能相当,但相较于Linux Cairo,Skia功能还只是阳春型的。2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,目前Skia也是Google Chrome的图形引擎。 Android的多媒体资料库采用SQLite资料库系统。资料库又分为共用资料库及私用资料库。用户可透过ContentProvider类别获取共用资料库。
Android的中间层多以Java实现,4.4版之前使用特殊的Dalvik虚拟机器。Dalvik虚拟机器是一种“暂存器型态”的Java虚拟机器,变数皆存放于暂存器中,虚拟机器的指令相对减少。5.0版起改用Android Runtime(ART)。 Dalvik虚拟机器可以有多个实例,每个Android应用程序都用一个自属的Dalvik虚拟机器来执行,让系统在执行程序时可达到最优化。Dalvik虚拟机器并非执行Java字节码,而是执行一种称为.dex格式的档案。
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 driver)这种东西。所有的驱动还是在内核空间中,并以HAL隔开版权问题。bionic/libc/kernel/ 并非标准的内核头文件(kernel header files)。
Android的内核头文件是利用工具由Linux内核的头文件所产生的,这样做是为了保留常数、资料结构与宏。 Android的核心基于Linux,除了核心之外,则是中介层、数据库元和用C/C++编写的API以及应用程序框架。Android的应用程序通常以Java数据库元为基础编写,运行程序时,应用程序的代码会被即时转变为Dalvik dex-code(Dalvik Executable),然后Android操作系统通过使用即时编译的Dalvik虚拟机来将其运行。 目前Android的Linux kernel控制包括安全、内存管理、进程管理、网络堆叠、驱动程序模型等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。
4 Android系统功能
显示布局:Android操作系统支持更大的分辨率,VGA,2D显示,3D显示都给予OpenGL ES 3.0标准规格(4.3版本开始支持OpenGL ES 3.0),并且支持传统的智能手机。
数据存储:Android操作系统内置SQLite小型关联式资料库管理系统来负责存储数据。
网络:Android操作系统支持所有的网络制式,包括GSM/EDGE、IDEN、CDMA、TD-SCDMA 、EV-DO、UMTS、Bluetooth、Wi-Fi、LTE、NFC和WiMAX。
信息:作为原设计给智能手机使用的操作系统,Android操作系统原生支持短信和邮件,并且支持所有的云信息和服务器信息。
语言:Android操作系统支持多语言。
浏览器:Android操作系统中内置的网页浏览器基于WebKit核心,并且采用了Chrome V8引擎。在Android 4.0内置的浏览器测试中,HTML5和Acid3故障处理中均获得了满分,并且于2.2版至4.0版之前能原生支持Flash,4.4版本后去除对Flash的支持。
支持Java:虽然Android操作系统中的应用程序大部分都是由Java编写的,但是Android却是以转换为Dalvik executables的文件在Dalvik虚拟机上运行的。由于Android中并不自带Java虚拟机,因此无法直接运行Java程序。不过Android平台上提供了多个Java虚拟机供用户下载使用,安装了Java虚拟机的Android系统可以运行Java_ME的程序。5.0版(Lolipop)开始以Android Runtime(ART)取代Dalvik虚拟机。
媒体支持:Android操作系统本身支持以下格式的音频/视频/图片媒体:WebM、H.263, H.264(in 3GP or MP4 container)、MPEG-4 SP、AMR, AMR-WB(in 3GP container)、AAC, HE-AAC(in MP4 or 3GP container)、MP3、MIDI、Ogg Vorbis、FLAC、WAV、JPEG、PNG、GIF、BMP。如果用户需要播放更多格式的媒体,可以安装其他第三方应用程序。
流媒体支持:Android操作系统支持RTP/RTSP(3GPP PSS, ISMA)的流媒体以及(HTML5 <video>)的流媒体,同时还支持Adobe的Flash,在安装了RealPlayer之后,还支持苹果公司的流媒体。
硬件支持:Android操作系统支持识别并且使用视频/照片摄像镜头,多点电容/电阻触屏,GPS,加速计,陀螺仪,气压计,磁力仪(高斯计),键盘,鼠标,USB Disk,专用的游戏控制器,体感控制器,游戏手把,蓝牙设备,无线设备,感应和压力感测器,温度计,加速2D位位块传输(硬件方向,缩放,像素格式转换)和3D图形加速。
多点触控:Android支持本地的多点触控,在最初的HTC Hero智能手机上即有这个功能。该功能是内核级别(为了避免对苹果公司的触屏技术造成侵权)。
蓝牙:Android支持A2DP,AVRCP,发送文件(OPP),访问电话簿(PBAP),语音拨号和方送智能手机之间的联系。同时支持键盘,鼠标和摇杆(HID)。
多任务处理:Android操作系统支持本地的多任务处理。
语音功能:除了支持普通的电话通话之外,Android操作系统从最初的版本开始就支持使用语音操作来使用Google进行网页搜索等功能。而从Android 2.2开始,语音功能还可以用来输入文字、语音导航等功能。
无线共享功能:Android操作系统支持用户使用本机充当“无线路由器”,并且将本机的网络共享给其他智能手机,其他机器只需要通过WiFi查找到共享的无线热点,就可以上网。而在Android 2.2之前的操作系统则需要通过第三方应用或者其他定制版系统来实现这个功能。
截图功能:从Android 4.0开始,Android操作系统便支持截图功能,该功能允许用户直接抓取智能手机显示屏上的任何画面,用户还可以通过编辑功能对截图进行处理,还可以通过蓝牙/E-mail/共享等方式发送给其他用户或者上传到网络上,也可以拷贝到电脑中。