项目1 移动开发概览
项目要点
● Android环境介绍。
● Eclipse移动集成开发环境的配置。
● Eclipse移动集成开发环境的使用。
● 建立和管理Eclipse移动开发工程。
本项目主要介绍Android平台的基本架构和开发环境的配置,并通过编写第一个应用程序HelloWorld,熟悉Eclipse开发、调试环境的使用。
项目简介
本项目主要介绍Android的发展历史,搭建Android在Eclipse下的开发环境,通过第一个应用程序HelloWorld介绍Android项目的基本运行原理,并在Eclipse环境下进行项目开发和调试。
相关知识
1.Android概述
1)Android的概念
当今已经进入移动互联网阶段,这是50多年来的第5个发展周期。一个技术发展周期一般会持续十年,即“移动互联网”发展周期已经到来。
据摩根士丹利调查:移动互联网的发展速度快于桌面互联网,并且其规模将大得超乎想象,它代表着五大趋势的融合(4G+社交+视频+网络电话+日新月异的移动装置),在发展速度方面,通过移动装置接入互联网的用户已经超过通过桌面个人计算机接入互联网的用户。到2020年,通过各种移动设备连入互联网的设备将达到100亿台。
如图1.1所示,开放手机联盟(Open Handset Alliance)是Google公司于2007年11月5日宣布组建的一个全球性的联盟组织。联盟将会支持Google发布的Android手机操作系统或者应用软件,共同开发名为Android的开放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商等。目前,联盟成员数量已经达到65家。
Android平台具有以下特点。
①Android平台的源代码完全开放,便于开发人员更清楚地把握实现细节,便于提高开发人员的技术水平,有利于开发出更具差异性的应用。
图1.1 开放手机联盟
②Android平台采用了对有限内存、电池和CPU优化过的虚拟机Dalvik,有效提升了Android的运行速度。
③Android平台具有良好的盈利模式(3/7开),产业链条的各方(运营商、制造商、独立软件生产商)都可以获得不错的利益。将移动终端的评价标准从硬件向软件转变,极大地激发了软件开发者的热情。
④Android的源代码遵循Apache v2软件许可,而不是通常的GPL v2许可,有利于商业开发。
⑤Android平台具有强大的Linux社区的支持。
Android曾经是一家创立于旧金山的公司的名字,该公司于2005年8月被Google收购,并从此踏上了飞速发展的道路。它已经发展成为一个平台、一个生态体系。现在,Android在移动领域得到广泛的应用。相比于Symbian的日落西山,以及苹果的封闭、Windows Phone的前途未卜,Android无疑代表了当前行业发展的主流趋势:开放平台取代了封闭平台,让参与者均能通过自己的努力而获益。从2008年9月公布1.0版本以来,经过近10年的跨越式发展,现在Android已经发展到了8版本。该版本重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的方式。
随着采用Android系统的谷歌手机、平板电脑等产品逐渐扩大市场占有率,Android平台人才的缺口日益显现。据业内统计,目前国内的4G研发人才缺口有三四百万,其中Android研发人才缺口至少30万。现在不仅手机、平板电脑的企业对Android有大量的人才缺口,而且创维、TCL、康佳等彩电企业已经开发了基于Android系统的智能电视,Android已成为3C数码电子产品的大潮流。
2)为什么选用Android
技术流派的发展,一般就像波浪,分为浪峰和浪底,浪峰的时候技术成熟,但是程序员的价值无法得到体现,因为会的人多;浪底的时候,技术新,供参考的资料少,学习门槛高,但是程序员的价值能够得到体现。现在Android市场占有量和发展趋势一直向上,人才需求旺盛,而且自主创业点比较多。
(1)各智能手机平台市场占有率
IDC调查了各种主流平台市场的占有率,如图1.2所示,截至2014年,可以看出,作为手机终端的霸主Symbian的占有率不断下降;Android在未来几年的涨幅最大,占有率不断上升;iOS因为主要针对苹果系统,并且其开发环境是封闭的,一旦其创新性出现断层,必然导致市场占有率的下降。
(2)主流智能系统的比较
①Symbian——霸主地位已经旁落。Symbian是Nokia手机上的操作系统,在受到各种操作系统的冲击后,倒下了,由于其上面的开发语言为Visual C++,但是又不同于PC上的C++,导致开发门槛高,而且其转换到智能手机上的步伐偏慢,导致市场占有率不断下降。
图1.2 智能手机市场占有率
②Android——Google公司推出,近年势头迅猛。Android最明智的地方在于两点:联合各大厂商,开放源代码;采用Java作为应用开发语言,使得Java程序员可以无缝转移到该开发领域,所以虽然其诞生时间不长,但是平台上的应用程序,已经超过了iOS上的应用程序。
③iOS——苹果公司,定位高端客户。iOS一直针对的是高端客户,但是其需要不断创新,才能保持其高端定位,现在各种智能终端从可使用性上已经和iOS无太大差别,并且其开发语言为一种特有的语言:ObjectC,是在C语言基础上加上了面向对象的特性,整个平台是封闭的。
④Windows Phone——微软+Nokia,全新系统。Windows Phone是Windows Mobile的后续版本,其最大诟病在于与Windows Mobile是完全不同的两个东西,没有向下兼容性。
⑤Meego——Nokia+Intel共同研发的一种系统。Meego是一种优秀的手机操作系统,非常流畅,但是Nokia并没有打算继续支持其后续版本,所以基本没有前景。
3)Android的系统架构
图1.3所示是Android系统架构图,从上而下,分别为应用层、应用框架层、类库层、Android运行时和Linux内核层。
图1.3 Android系统架构图
(1)Linux Kernel层
Android的核心系统服务依赖于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层。
(2)Android Runtime层
Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。
每个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时,虚拟机是基于寄存器的,所有的类都经由Java编译器编译,然后通过SDK中的dx工具转化成.dex格式由虚拟机执行。
Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。
(3)Libraries层
Android包含一些C/C++库,这些库能被Android系统中的不同组件使用。它们通过Android应用程序框架为开发者提供服务。以下是一些核心库:
①系统C库:一个从BSD继承来的标准C系统函数库(libc),它是专门为基于embedded Linux的设备定制的。
②媒体库:基于PacketVideo OpenCORE。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。
③Surface Manager:对显示子系统进行管理,并且为多个应用程序提供2D和3D图层的无缝融合。
④LibWebCore:一个Web浏览器引擎,支持Android浏览器和一个可嵌入的Web视图。
⑤SGL:底层的2D图形引擎。
⑥3D libraries:基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。
⑦FreeType:位图(bitmap)和矢量(vector)字体显示。
⑧SQLite:一个对于所有应用程序可用、功能强劲的轻型关系型数据库引擎。
(4)Application FrameWork层
开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用,任何一个应用程序都可以发布它的功能块,任何其他应用程序都可以使用其所发布的功能块(不过需遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便地替换程序组件。
隐藏在每个应用后面的是一系列的服务和系统,其中包括;
①丰富而又可扩展的视图(Views),可以用来构建应用程序,包括列表(lists)、网格(grids)、文本框(text boxes)、按钮(buttons)、甚至可嵌入的Web浏览器。
②内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
③资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串、图形和布局文件(layout files)。
④通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。
⑤活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。
(5)Application层
Android会同一系列核心应用程序包一起发布,该应用程序包包括E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所有的应用程序都是使用Java语言编写的。
4)Android项目管理
(1)查看项目
在模拟器桌面,单击Launcher按钮,打开应用程序管理界面,单击其中的Android Application图标,即可启动项目应用程序。
(2)删除项目
①如图1.4所示,采用应用程序管理器删除项目。
②如图1.5所示,采用DDMS删除项目。
图1.4 应用程序管理器删除项目
图1.5 DDMS删除项目
(3)如图1.6所示,在LogCat窗口中可以查看项目运行的日志信息。
图1.6 LogCat窗口
2.应用程序五大组件
Android应用程序主要包括五大组件,即Activity、Intent、BroadCastReceiver、Service、Content Provider。
1)Activity
Activity相当于手机屏幕的一个页面,上面可以放各种UI组件。一个应用包含多个Activity,Android使用堆栈存放多个Activity对象,并自动进行管理。Activity存在生命周期。
2)Intent
Intent是一个将要执行的操作的抽象描述(Google)。主要用于在不同Activity之间跳转,并且传递数据。主要动作类型包括Main、PICK、VIEW、EDIT等,对应的数据以URI表示。IntentFilter用于描述Activity能够操作哪些Intent对象。
3)BroadCastReceiver
BroadCastReceiver主要用于对外部事件进行响应。通过NotificationManager通知用户事件发生了。通过在AndroidManifest.xml中定义,或者通过context.RegisterReceiver()注册。各种应用还可以通过Context.sendBroadcast()把自己的IntentBroadcast广播给其他应用。
4)Service
Service是指后台运行的应用程序,如音乐播放器的后台播放。
5)Content Provider
Content Provider用于在不同应用之间交换数据,一个应用通过实现Content Provider的抽象接口,从而把自己的数据暴露给其他应用调用,而其他应用程序无须关心数据存储的具体细节。