准备篇—刘备,从编草鞋到编代码 第1回 哦,何为Android?

这是一个阳光明媚的下午,刘备刘玄德坐在家中一边哼着小曲一边编着草鞋。就在草鞋编得兴高采烈、飘飘欲仙之时,他忽然对人生产生了一丝疑惑,我乃堂堂中山靖王之后,想当年我祖上技术何等辉煌!传说我祖刘胜同学审代码一目十行,再小的臭虫也难逃其法眼,写代码更好似行云流水,一日之内,写满代码的竹简摞起来竟有小山般高。唉!再看看我,竟天天以编草鞋度日……不行!再也不能自甘堕落下去,我要写代码!于是刘备扔下编了半辈子的草鞋,毅然决然地走上了技术开发之路。

刘备走到村里,左思右想,不知从何做起,只好原地转圈圈。踌躇之际,打远处走来一黑脸汉子,喝道:“你这厮,好端端的为何原地打转,看得俺好生眼晕。”

“壮士不知,我乃中山靖王之后,空有一身抱负却无处施展,哎”

“原来是一代大牛靖王之后,失敬,失敬。”

“我就是随便这么一说,想不到老祖宗这么好使……”

“俺叫张飞,字翼德,俺也是空有一身力气无处发泄,正有转型做技术宅的想法,却苦于转型无门啊!既然你我二人如此有缘,不如到我庄上一聚,先大吃一顿,再共商大计!”

“如此甚好!”

于是刘、张二人向张飞家进发,走着走着,迎面出现一红脸汉子,脚踏人字拖,身着大裤衩,一派大牛作风。刘备见状连忙上前搭讪,“老兄,看你这架势?骨灰级程序员?”

关羽答道,“正是!在下关羽。曾搞过一些开发,但最近在人生的道路上有些迷失了方向。”

刘备说,“我叫刘备,这位是张飞,我们二人正有意在软件研发上大展拳脚,你看我等三人竟如此有缘,不如结拜为兄弟,日后互相照应,共同进步!”

关羽说,“哇,你一见面就要跟我结拜,剧情发展也太快了吧。也罢,我就是喜欢直接爽快的!”

于是三人撮土为香,歃血为盟,结拜为兄弟,刘备为大哥,关羽老二,张飞小三。

酒足饭饱后,关羽说,“大哥,最近我听说Android火的很啊,咱们不如一起搞搞Android开发,成就一番霸业如何?”

“哦,何为Android?”

“待我慢慢道来……”

1.1. Android基本知识

Android是由Google以及开放手持设备联盟(Open Handset Alliance)推出的一款智能手机操作系统,它与windowsphone、ios三分智能操作系统天下。而随着智能手机的迅速普及,Android系统的不断完善,得到了越来越多的用户、开发者以及生产商的喜爱。到2010年末,Android系统的市场占有率已经超过称霸逾十年的塞班(Symbian)系统,成为全球第一大智能手机操作系统。2012年2月,Android系统的全球市场份额已达到59%。其中,Android在中国市场所占的份额为68.4%。

究竟是什么原因让Android如此火爆呢?这还得从Android的历史开始说起。

1.1.1.Android的历史

1886年,在法国科幻小说《未来夏娃》中,利尔亚当向我们展现了一个奇特的想象空间,而那个似人的机器Android也深深地印刻在读者的脑海中。而如今,那个绿色的小机器人Android也走进了很多人的日常生活中。

图1.1  Android Logo

关羽:大哥!不要跟我说你连《未来夏娃》都没看过!恩,好吧,其实我也没看过……这本书中描写一位充满创造力的发明家在生命垂危之际,发明了一个完美的女人,但是她毕竟只是机器人,就导致了一场类似《浮士德》的悲剧。《未来夏娃》中将外表像人的女机器起名人为Android。

2003年,有“Android之父”之称的安迪?鲁宾(Andy Rubin)创建了Android科技公司,开始着手开发Android操作系统。2005年,Google收购了Android科技公司,安迪继续在Google领导着开发团队。2007年,Google联合许多生产厂商成立了开放手持设备联盟(OpenHandset Alliance),联盟最初的成员包括Broadcom公司、HTC、Intel、LG、Marvell等公司。2008年,ARM、华为、索尼等公司也加入到联盟当中,如今联盟的厂商已达84家。开放手持设备联盟建立的目的是为了创建一个更加开放自由的移动电话环境。Android操作系统也由开放手持设备联盟来负责改良。

在Android正式发布之前,有两个内部测试版本,分别是Android Beta(代号为铁臂阿童木Astro)和Android 1.0(代号为发条机器人Bender)。在这两个版本之后,Google为了避免商标问题,将Android系统的代号由机器人系列转变为现在用的甜点系列。甜点系列的代号命名方式开始于Android 1.5(代号为纸杯蛋糕Cupcake),并按照26个英文字母的顺序,每一个版本都有一个甜点来命名,而且后序版本的所代表的甜点尺寸会越来越大。

我们把Android各版本的代号,发布时间列表如下:


版本


代号


发布时间


Android 1.5


Cup Cake


2009年4月30日


Android 1.6


Donut


2009年9月15日


Android 2.1


éclair


2009年10月26日


Android 2.2


Froyo


2010年5月20日


Android 2.3


Ginger Bread


2010年12月7日


Android 3.x


Honey Comb


2011年2月2日


Android 4.0


Ice Cream Sandwitch


2011年10月19日


Android 4.1


Jelly Bean


2012年6月28日

图1-2  Android 各版本Logo

Android系统版本从1.5开始,差不多每半年都会有一次版本的升级。每次版本升级都会有大量的更新,这些更新提供了很多新的特性以及功能,除此之外,还存在很多厂家自己修改的非标准安卓系统。版本更新过快和非标准版Android也带来很多兼容性问题。

1.1.2.Android的未来

在移动互联网时代,Android以开放,免费,完整等特点迅速在全球范围内拥有了许许多多的粉丝,这些粉丝包括了Android手机用户,开发者以及生产商。目前,Android系统占据了全球智能手机近六成的市场份额,巨大的用户量也带来了巨大的商机。可以说,把握了Android就把握了移动互联网时代的脉搏。

从用户角度来看,现在人们已经开始使用Android手机打3G电话,浏览网页,看视频,玩游戏,听音乐,收发电子邮件,关注SNS社区,手机购物等等。这些功能的实现极大地扩展了用户使用手机的范围,使得用户越来越爱用Android手机。随着Android版本的不断更新,会有越来越多的更加贴心的功能加入到Android当中,同时,界面也越来越漂亮,流畅性也会越来越好,这会在将来吸引更多的用户来使用Android操作系统。

从开发者的角度来看,Android是一个以Linux为核心的开源移动操作系统,开源的特性使得开发者在开发过程中能够有最大限度的自由。这种特性使得基于Android系统的应用非常的丰富,而且Android平台不仅支持Java,C和C++等主流的编程语言,还支持Ruby、Python、Lua等脚本语言,这也是Android拥有庞大的开发者群体的一个重要原因。从Android发布之日起,国内外出现了许许多多由开发者创建的Android开源论坛和社区以及小开发团体。他们都致力于改进Android现有功能,提升用户体验以及培养新一代的开发者。

从生产商的角度来看,由于Android操作系统免费向开发者提供,使得生产商可以节约近三成的成本,因此得到了众多厂商的拥护和支持。各厂商纷纷推出自己的Android手机。比较出名的几个厂商包括HTC,Samsung,Motorola,LG等等,随着Android版本的不断更新和各厂商硬件性能的提升,会有更多的Android手机面世。

从技术角度来看,Android采用WebKit浏览器引擎,具有触摸屏,高级图形显示以及上网功能,随着版本的更新,Android的技术也在不断的更新,从最初的普通联系人到现在的数据同步,从最初的单点触控到现在的多点触控,从简单的Google Map到现在的导航系统,从基本的网页浏览到现在的HTML5,这些都说明了Android的技术在逐渐的成熟和完善。在将来的Android版本中,肯定会有更加丰富的技术出现。

随着移动互联网的发展,用户对智能手机终端和移动应用的需求会越来越强烈,而Android必将成为这个时代的弄潮儿!

1.1.3.推动Android普及的因素

Android平台五大优势使得Android红遍了手机操作系统的半壁江山。

l  开放性

开放性是Android系统区别于其他操作系统的最大的特征。开放的平台会吸引更多的开发者、终端制造厂商以及用户,会使得基于Android的应用开发商呈现百家争鸣的格局,会使得应用呈现百花齐放的状态。

关羽:大哥!让小关和你说说开放性的好处吧!开放性有利于积累消费者和厂商的人气哦。当然开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机,获得丰富的软件资源哦。大哥还犹豫什么,抓紧开发我们的Android产品吧!

l  挣脱运营商的束缚

在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。

l  丰富的硬件选择

由于Android的开放性,众多的厂商会推出拥有自己厂商特色,功能更加完善的Android手机。功能特色上的差异,却不会影响到数据同步以及软件的兼容性,使得用户可以放心的选购所喜欢的厂家生产的手机。

l  不受任何限制的开发商

Android平台提供给第三方开发商一个十分宽泛、自由的环境。开发商和甚至个人开发者能够免费下载获得Android开发工具sdk以及Android系统源码,使得开发者可以深入到系统级的开发,而不会像其他手机操作系统一样受到限制,同时,Android开源社区聚集了大量的Android开发爱好者,开发者能够在这里得到帮助。

l  无缝结合的Google应用

Google已经走过10年的历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。

最后,在这里不得不提Google以及其所领导的开放手持设备联盟为Android的推广所作出的努力。Google在Android刚开始的时候,为吸引开发者曾经举办Android开发者大赛,大赛持续了几年,吸引了众多的开发者,积累了开发人气,开放手持设备联盟也在其中做出了很大的贡献。

1.2.Android的架构及特性

Android是以Linux为内核的操作系统,经历了从最初的1.0版到目前最新的4.1版的发展,每个版本都有大量的新特性加入其中,但是Android整体架构并没有太大的变化。究竟Android的系统架构是怎样的?每一个Android版本又有怎样的不同?下面就让我们来学习一下Android的系统架构及各版本特性。

1.2.1.Android平台架构简介

Android平台拥有一套层次十分清晰的框架,如图1-3所示,我们可以看出Android拥有四个层次,到低到高分别是Linux内核层、库和Android运行环境层、应用框架层、应用层。下面对每个层次的组成部分做详细的介绍。

图1.3  Android系统架构图

l  Linux内核

Android是基于一个稳定的保持更新的Linux内核提供核心服务,目前大多使用Linux2.6版本。Linux内核作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务,使得Android平台的硬件细节对开发人员透明化。主要驱动如下:显示驱动(Display Driver)、Flash内存驱动(Flash Memory Driver)、照相机驱动(CameraDriver)、音频驱动(Audio Driver)、WIFI驱动、键盘驱动(Keyboard Driver)、蓝牙驱动(Bluetooth
Driver)、Binder IPC驱动、Power Manager(能源管理)。整个Linux核心的各软件组件,均是以C语言撰写成,整个底层均是由芯片或便携设备的系统硬件开发商所负责,即音频芯片商在销售音频芯片时,也当附上Android的音频驱动程序,而如HTC之类的便携设备开发商,也必须针对特有的硬件功能,而自行开发驱动程序。

l  库

在Android中包含一些C/C++的类库,这些类库用来支持Android系统中不同组件的功能。这些功能通过Android的应用程序框架(applicationframework)提供给开发者。下面对图1.3中的核心库做简单介绍:

n  Surface Manager:主要的功能是让开发者可以去存取或管理显示系统,实现无接缝的2D/3D多应用程序之间的整合。

n  3D libraries:主要是依OpenGLES1.0规范所定义的3D绘图引擎。

n  SGL:2D图形引擎库。

n  Media Framework:Android多媒体类库,该库支持回放和录制大量流行的音视频格式和静态图片。

n  Free Type:位图及矢量。

n  SSL:中文名为“安全套接层协议层”,它位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。

n  SQLite:是一套开放性的关联式资料库,能够为所有应用程序提供轻量级的关系数据库引擎。

n  WebKit:是一个先进的网页浏览器引擎。

n  libc:是一个BSD标准的C类库,针对Linux嵌入式装置进行过最佳化的调整。

l  Android运行环境

每一个Android应用程序都运行在一个Dalvik虚拟机实例上,其代码在虚拟机的解释下得以执行。Anroid可以同时高效地运行多个虚拟系统。Dalvik虚拟机非常适合在移动终端上使用,它不需要很快的CPU计算速度和大量的内存空间。每一个虚拟机就是一个独立的进程空间。Dalvik虚拟机并不直接执行编译后的java类文件,而是通过内置的基于寄存器的dx工具将其转换为.dex格式后在执行。dx 是一套工具,可以将 Java .class 转换成 .dex 格式。dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。一个dex文件通常会有多个.class。虚拟机的线程机制和底层内存管理机制都依赖于Linux内核的一些功能。

l  应用框架

应用程序框架这一层,是编写常用核心应用所使用的API框架。开发者可以在开发自己特色的应用程序中重复利用这些组件和服务。开发者通过很好的理解这套框架的工作机制,就可以开发出自己需要的应用程序。目前所有的应用程序都是由这些组件和服务构成,主要的组件包括有:丰富又可扩展的视图系统(View)、管理所有安装在Android系统内的包管理器(Package Manager)、提供非程序代码访问的资源管理器(Resource Manager)、提供应用程序在状态栏中显示应用程序自定义提示信息的通知管理器(Notification
Manager)、管理用户拨打与接听电话的相关功能的电话管理器(Telephony Manager)、管理所有应用程序的生命周期及提供常用的导航回退功能的活动管理器(Activity Manager)、使应用程序可以访问另一个应用程序的数据或者共享它们自己数据的内容提供者(Content Provider)、管理地图服务位置管理器(LocationManager)等。本书的后面我们将针对其中的一些组件进行详细的介绍。

l  应用

Android本身会带有一些常用的核心应用程序,这些应用程序是用Java语言编写的运行在虚拟机上的程序。这些应用程序一般包括e-mail客户端、短信程序、日历、地图、浏览器、联系人管理程序等。开发者也可以根据自己的需要在Android平台上开发自己的应用程序,通常以Java语言编写,包含各种资源文件。

关羽:大哥!你知道分层有什么好处吗?让美貌与智慧并重,英雄与侠义化身的我给你点提示吧。使用下层提供的接口为上层提供统一的服务,可以屏蔽下层的变化。当下层发生了变化时不会影响到上层,也就是说各层各司其职,各层提供固定的服务访问点SAP(Service Access Point)。用程序员的黑话说就是高内聚、低耦合。那可是好处多多。大哥!这下凭你的智慧,分层唬不住你了!

1.2.2.Android特性

Android智能手机操作系统正在以很快的速度发展,虽然Android推出的时间并不长,但是,其功能正在迅速增加。下面我们来盘点下Android各个版本的特性。


版本


特性


Android 1.1


闹钟、API 示例、浏览器、计算器、摄像头、联系人、开发工具包、拨号应用、电子邮件、地图 (包含街景)、信息服务、音乐、图片、设置


Android 1.5


录像、蓝牙A2DP、自动蓝牙连接、上传视频到 YouTube 以及 Picasa、复制/粘贴功能


Android 1.6


Android 应用市场集成、照相、摄像以及浏览, 多选/删除功能、手势搜索、语音搜索应用集成、极大提升了语音阅读功能、对非标准分辨率有了更好的支持


Android 2.0/2.1


提升硬件速度、更多屏幕以及分辨率选择、大幅度的用户界面改良、支持 Exchange活动墙纸、大幅改进虚拟键盘、新版蓝牙、新版Google 地图


Android 2.2


完整的 Flash 10.1 支持、最高 5 倍速度提升、最多支持 8个设备连接的移动热点功能、有着专用链接的改进版主屏幕、大量 Exchange 支持改进(包括远程数据抹除,自动发现服务,完整的日程表支持,全局联系人列表查找)、摄像头/视频改进(更好的屏幕控制按钮,录像时开启闪光灯进行照明的功能)、多键盘语言支持、Android 云信息、蓝牙语音拨号、支持720P视频录制


Android 3.0


针对平板大屏幕而做优化、发布应用扩展Android Market、多任务处理、拥有新的通知系统、硬件加速、3D功能、视频通话、拥有不同的桌面工具


Android 4.0


虚拟按键(增大屏幕面积同时控制手机整体大小)、桌面插件Widgets列表、可定制的桌面系统、可视语音邮件、日历支持缩放操作、Gmail离线搜索(两行预览,以及底部新快捷栏)、改进虚拟键盘纠错、从锁屏界面直接访问应用程序、新版浏览器、流量控制系统、人脸识别、刷脸解锁、内置照片编辑器、多任务列表、新的图库布局和组织方式、联系人应用整合社交网络信息、NFC软件数据交互


Android 4.1


快速流畅Project Butter用户界面、离线语音输入、增强通知中心、Google Now语音搜索、相机和图库、眨眼开锁、无障碍操作

1.3.玄德有话说

张飞:大哥啊,通过本回的了解,我有个巨大的困惑,还望大哥给我讲解讲解。

刘备:哈哈,三弟,速速把问题说来,让改变社会风气,风靡万千少女,刺激电影市场,提高年轻人内涵,玉树临风,风度翩翩的我给你解答!

张飞:大哥,Android这么好,我们咋开始学啊?又如何才能开展咱们的宏图大业呢?

刘备:这个、这个……凭你的智慧,我很难跟你解释!二弟,你来跟三弟说说。

关羽:三弟!想写好Android,那就需要内练一口气,外练筋骨皮。眼看不如动手,知其然知其所以然。

张飞:二哥你别竟说那没用的,老张我听不懂,能不能通俗点。

关羽:总结起来就是三点:首先,要多动手操作,把实践放在第一位;二是,多解决问题,每解决一个问题,就成长了一点;最后,要善于归纳总结。如此一来,假以时日,我们必能成为一代大牛!

刘备:二弟果然有一套!

关羽:一般一般,世界第三!

张飞:啥玩意儿,我还是没懂……

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 23:42:57

准备篇—刘备,从编草鞋到编代码 第1回 哦,何为Android?的相关文章

Android NDK开发篇(五):Java与原生代码通信(数据操作)

尽管说使用NDK能够提高Android程序的运行效率,可是调用起来还是略微有点麻烦.NDK能够直接使用Java的原生数据类型,而引用类型,由于Java的引用类型的实如今NDK被屏蔽了,所以在NDK使用Java的引用类型则要做对应的处理. 一.对引用数据类型的操作 尽管Java的引用类型的实如今NDK被屏蔽了,JNI还是提供了一组API,通过JNIEnv接口指针提供原生方法改动和使用Java的引用类型. 1.字符串操作 JNI把Java的字符串当作引用来处理,在NDK中使用Java的字符串,须要相

IOS开发UI篇--UITableView的自定义布局==纯代码布局

UITableView中除了利用系统的UItableViewCell不能完成需求进行布局时,还可以进行自定义布局: 自定义布局分为两类:(1)利用代码进行创建 (2)利用xib进行实现: 下面对利用代码进行创建分析: 应用场景:像微博,等列表数据展示(由于微博的每个单元格的数据大小不一致,所以得计算每个单元格的大小) 分析:前提是获取列表数据,然后建立每个单元格的模型(建立单元格模型应继承UITableViewCell)复写 - (id)initWithStyle:(UITableViewCel

【转载】一行代码加载网络图片到ImageView——Android Picasso

原文链接:一句代码加载网络图片到ImageView——Android Picasso 在这里介绍一个Android框架:Picasso. picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能.仅仅只需要一行代码就能完全实现图片的异步加载.代码如下: public class MainActivity extends Activity { private ImageView imageV

shell脚本实现git快速提交代码与快速回滚

shell脚本实现git快速提交代码与快速回滚 创建一个commit库: [[email protected] cml]# echo "check github" > index.html [[email protected] cml]# cat index.html check github [[email protected] cml]# git add index.html [[email protected] cml]# git commit -m "check

linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法

上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试.在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?我们知道在调试程序时经常遇到的问题就是野指针或者数组越界带来的问题,在应用程序中运行这种程序就会报segmentation fault的错误,而由于驱动程序的特殊性,出现此类情况后往往会直接造成系统宕机,并会抛出oops信息.那么我们如何来分析oops信息呢,甚至根据oop

iOS开发——实用篇&Swift与Object-C混编之框架

swift与OC混编之框架的创建和调用 首先创建一个project取个名字叫“MyMixed”,选择iOS-framework&library-cocoa touch framework 然后在里面创建一个SwiftView.swift文件,一个objc的OCView文件和MyOCView文件三个文件都继承UIView 首先在SwiftView里调用OCView 1 import UIKit 2 3 4 5 class SwiftView: UIView { 6 7 8 9 init(frame

反病毒攻防研究第005篇:添加节区实现代码的植入

一.前言 上一篇文章所讨论的利用缝隙实现代码的植入有一个很大的问题,就是我们想要植入的代码的长度不能够比缝隙大,否则需要把自身的代码截成几个部分,再分别插入不同的缝隙中.而这次所讨论的方法是增加一个节区,这个节区完全可以达到私人订制的效果,其大小完全由我们自己来决定,这样的话,即便是代码较长,也不用担心.而这种方式最大的缺陷就是不利于恶意代码自身的隐藏,因此在现实中可能并不常用.其实,我在这里讨论节区的添加,是为了以后更加深入的讨论打下基础,因为在加壳以及免杀技术中,经常会对PE文件添加节区.这

Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)

Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一下.依据javah自己主动生成的头文件.能够看出原生方法的声明和定义,比如: JNIEXPORT jstring JNICALL Java_com_shamoo_helljni_HelloJni_stringFromJNI(JNIEnv *, jobject); 虽然Java上的原生方法没有不论什么

第二十五篇、抽屉效果的核心代码

// pan 拽 手势处理 - (IBAction)panGesture:(UIPanGestureRecognizer *)sender { // 如果是刚按下的状态,则记住,mainView的起始x if (UIGestureRecognizerStateBegan == sender.state) { _startX = self.mainView.frame.origin.x; } // 平移拖动的距离 CGPoint delta = [sender translationInView: