第一章:hello,Android

专业android应用开发

1 第一章:HELLO,ANDROID

1.1 概述

这章主要的内容如下:

· 移动开发的背景

· Android是什么?

· 介绍Android SDK的特性

· Android运行平台的介绍

· 为什么进行手机和android的开发

· 介绍SDK和开发框架

  不管你是否是手机软件工程师、或者是桌面软件工程师、web开发工程师或者仅仅是一个编码新手,Android的出给大家带来了一个绝佳的机会去编写革命性的移动终端程序。

  
  不管名字是什么,Android不会帮助你创建一个冷漠的机器勇士,去不断的清洗人类的领土。相反,android是一个开源的软件栈,包括操作系统、中间件、核心的移动应用API等等,帮助我们控制样式、外观以及话筒。

  外形较小、时髦、功能的手机越来越强大,结合照相、音乐、视频、GPS、触屏,技术是日新月异。手机的功能已经不只是打电话了,他们的软件平台已经有了一定的空间了。

  时至今日,移动应用的开发都是在封闭的环境下,特有的系统特有的工具才能开发,并且官方的程序优先于第三方程序开发。这是对于开发者想在越来越多的移动终端上开发来说,是一个障碍。

  在Android平台上,本地应用和第三方应用的开发都是平等的,都是基于相同的API,运行在相同的环境上。这些API的特性有:硬件感应器、视频记录、位置定位、地图定位、关系型数据库、内部交流机制、以及2D/3D图形接口。

  在这边书中,你将学会如何运用这些API去开发应用。在这章节中,你将了解移动开发的一些指导原则,以及android的一些可用特性。

  Android拥有强大的API,完善的文档、生机勃勃的开发者社区,没有开发部署费用。作为一个持续增加的移动终端平台。对于开发者来说,不管你是否有开发经验,这是一个千载难逢的好机会。  

1.2 一点背景知识

  在以前手提电话只是一个能放到公文包中的移动电话。一般只能维持几个小时的待机时间。

  随着硬件的发展。手机变得越来越小,越来越高效,并且拥有了视频、照相、音乐、GPS等功能。现在是硬件的发展已经将软件的发展远远的甩在后边了。

  以前,开发者要使用CC++在一些平台上,结合平台的特性开发一些应用。平台的不同导致开发工作量剧增。近来,Symbian系统平台的出现缓解了这一现象,但是仍旧需要在Symbian系统上调用特定的API进行开发。还是的用C/C++。最近,JAVA的特性终于被运用到手机上了,出现了JAVA MIDlets。只要手机支持JVM,我们就可以一次编写,到处运行了。但是他们也有局限性,无法访问手机的底层。进而导致应用也有局限。

  展望未来,Android平台随着新一波的移动OS的出现,他与iphone等其他平台不同的是,他不需要运行在特定的硬件上。他运行在开源的linux内核系统上。他开发的第三方应用和系统的应用是平等的,你可以用自己开发的应用去替换系统内置应用都可以。因为他们是采用相同的API和相同的运行环境。

1.3 Android是什么,不是什么

Android不是一个J2ME的实现,不能在J2ME的虚拟机上运行。虽然用java代码编写,但是java编码无法直接在android平台上直接执行。是linux电话标准论坛的一部分,或者说是开源移动联盟的一部分。Android运行在linux内核上。但是他的目标简单,只是一个软件栈,而不是什么标准。相对于iphoneandroid开源并且被开发联盟所支持。android不需要特有的硬件,对于厂商来说完全开放。

1.4 Android:一个开源的移动开发平台

有人描述说Android是第一个为移动设备完全开放的平台,没有任何内置的绑定接口。

简单说来:

1、是一个完全开放的移动设备操作系统 

2、是一个开放的移动开发平台

3、那些运行着android操作系统的移动设备,所有的android应用都能在它上边运行

进一步说,Anroid是由以下部分组成的:

1、一个硬件设计说明,描述了系统对软件栈的支持

2、一个linux内核的操作系统,提供了底层接口,内存管理接口,进程控制接口以及设备优化接口

3、对于应用开发来说,拥有开源的库,包括SQLLitwebkitopenGL以及媒体管理

4、一个Dalvik虚拟机,用来编译执行应用程序

5、一个应用框架,对应用层提供了接口,包括窗口管理、位置管理,内容管理、电话管理以及重力感应

6、一个用户接口框架,用来启动主机以及加载应用

7、预先安装好的一些应用,作为软件站的一部分

8、一个软件开发工具集,用来创建应哟ing,包括工具、插件以及文档

最让人兴奋的就是它的开放特性,我们可以主机编写应用程序替代系统固有的程序,控制系统的相关组件,对于程序员来说,这是以前所不能想象的。

1.5 Android原生应用

Android phones正常来讲本身就带来了一系列的预先安装好的程序作为开源项目的一部分,包括并不限于一下:

1、邮件客户端

2、短信管理应用

3、私人信息管理组件,包括联系人管理以及日历程序

4、一个叫做web-kit的浏览器内核

5、音乐管理和图片夹

6、相机以及视频记录程序

7、计算器

8、一个桌面

9、时钟

 在很多情况下,Android设备也绑定了一些google的手机软件

1androidmarket用来下载软件

2google map用来定位街景以及导航

3gmail客户端

4google talk客户端

5youtube的播放器

存储的数据被这些设备使用,同时这些数据也会被第三方应用使用,同样,第三方应用也能处理来电以及新的短信息。

具体有哪些软件被安装上,还是基于这些硬件的制造商所发布的版本。开放的特性让这些开发商们可以定制自己的UI接口以及各种各样的应用形式。同时,我们自己开发的第三方应用也可以在这多种多样的平台上使用,因为他们都是基于相同的android平台,程序的执行都是相同的机制。

1.6 AndroidSDK特性

作为一个开发环境,Android平台最吸引人的就是他提供的那些API

作为一个核心平台,他给予你创建电话系统的一部分的特权。下边就是一些值得关注的特性

1、没licensing、发布以及开发费用以及开发许可的限制

2、可以访问硬件上的WI-FI

3、开放了GSM,EDGE3G网络,对于打电话或者做数据传输更加容易,允许你通过这些网络打电话或者接电话以及发送短信传送数据

4、位置定位,例如GPS,他的API更加容易理解

5、全方位的硬件控制,包括后台运行,录音以及照相和麦克风的调用

6、提供了硬件感应的API集合,包括重力感应以及全文索引

7、提供了供数据传输的蓝牙点对点接口

8IPC消息传递

9、数据共享存储

10、程序基于后台运行

11、窗口组件、文件夹组件、以及背景组件

12、整合应用搜索能力以及系统搜索能力

13、整合了HTML5这个开源的web浏览器

14、全方位支持地图控制应用作为他的接口之一

15、图形库,包括2D3D的图形库

16、提供了多媒体库,用来播放和录制各种各样的音频和视频,以及处理图片格式

17、提供了国际化方案

18、一个应用开发框架,鼓励人们重用应用组件,以及取代系统的原生组件

  对于硬件,包括照相机、GPS以及重力感应器的访问

 Android提供了API库帮助我们尽可能简单的调用这些硬件设备。以此保证只要是支持android软件栈的设备,我们就不需要关注各个设备的自我实现。接口统一后,我们能够创建各种应用。对于SDK的各种特性,例如GPS,照相机、录音机等等的API我们将在第11章到14章进行介绍。

  Google Map的本地接口,GeocodingLBS服务

  原生的地图接口作为我们API的一部分,我们可以和图形接口库结合使用,用程序来画出我们的位置。googleLBS技术是通过GPS或者移动电话基站,帮助我们确认设备的位置。这也意味着不管我们的设备供应商支持哪些软件,我们的LBS都是可以自己工作的。在第8章,我们将深入的探讨LBS应用。

  后台运行服务:

  Android支持应用和服务被设计成在后台运行。因为手机的屏幕有限,我们不能将所有的都摆在屏幕上。这种方式让我们可以建立后台运行组件,不需要用户直接操作。可以基于事件驱动,例如常规的升级动作,监控动作等等。我们将在第9章深入讨论后台运行服务的细节。

  SQLite数据库:帮助我们进行数据的存储以及提取

  快速有效的存储和提取数据对于一个设备来说是至关重要的,他的存储能力对于其他方面来说是一个限制。Android提供一个轻量级的关系型数据库,我们称作SQLite,你的应用程序可以充分的利用这个高效安全的存储引擎。

  默认来说每个应用的数据库都是隔离的沙盒,只对创建他的应用有效,但是内容提供商提供了一个管理共享这些数据的机制。我们将在第7张详细介绍

  数据共享以及内部应用交互:

  Android包含三个最主要的技术对于信息传输:提醒、intents和内容提供接口。

  提醒是一个比较常规的标准做法,我们通过调用API触发窗口弹出,设备的LED灯光闪烁,或者控制状态栏的图标。这个会在第九章详细阐述。

  Intents在应用之间提供了一个消息传递机制。使用Intents你可以传递一个设定动作(例如拨打电话、或者编辑联系人),在系统层次供其他应用去处理。IntentsAndroid系统的一个重要核心组件,在第5章会深入的探讨。

  最后,你可以使用内容供应接口去访问你的应用私有数据库。那些原生应用存储的数据被内容供应接口对外暴露。所以你可以创建自己的应用去读取或者管理这些数据。第七章的内容提供接口会有一个详细的描述,包括那些原生提供者,同时会说明如何创建和使用你自己的供应器。

  使用小部件、文件夹和墙纸去加强屏幕效果:

  使用这些小部件、文件夹、墙纸可以让我们创建一些动态的应用组件去提供给窗体。或者提供有用的定时的信息到屏幕上。

  如果你给用户提供一个路径在屏幕上去与你的应用直接交互,他们会立刻访问有意思的信息而不需要打开应用,你可以直接获得一个快捷方式到你的应用中。你可以在第10章去了解如何创建一个应用的屏幕组件。

  对2D/3D图形库的扩展媒体支持:

  越来越大的屏幕和分辨率已经让移动终端变成一个多媒体终端。Android提供了基于OpenGL2D/3D图形引擎。同时也提供了一些处理视频、音频文件的格式支持,例如 MPEG4,H.264MP3AAC,AMR,JPG,PNGGIF。我们将在第15章针对2D3D图形引擎进行介绍。会在第11章针对媒体文件管理进行介绍。

  内存调优和进程管理:

  Android的进程和内存管理是很少用的模块,想java.net一样,Android用它自己的运行时虚拟机去管理应用内存,不想其他框架,Android运行时环境也管理进程的生命周期。它为了保证应用的及时响应而自动停止或者杀掉一些低优先级的进程去释放资源。

  在这里,最高优先级的是用户的交互应用。为了保证你的应用被关闭后能有较好的响应,最好设计成能够自动在后台重启。在一个应用无法控制自己生命周期的环境中,这是一个很重要的设计。你可以在第3章对应用程序的生命周期有个更好的了解。

1.7 技术开放联盟OHA

这个手机开放联盟是一个有50个公司组成的联盟,包括硬件厂商、软件厂商、通信厂商等等,有一些指明的公司MotorolaHTC等等,用他们的话说,就是一切为了用户的感受,要提供一个透明的平台系统,并且没有授权等限制性条件。去加速手机系统以及软件的创新。

1.8 Android如何运行?

从第一个Android移动手机在美国200810月在美国面世到2009年末,有20多个Android兼容平台出现在26个国家,32个不同的通信网络上。相对于那些专门为特定硬件编写的移动操作系统而言,Android支持大量的硬件平台。没有lisence费用等特性,帮助Android平台更加流行。更多人期望开放的Android平台的应用能鼓励硬件制造商生产越来越多的基于Android系统的硬件。

1.9 为什么进行移动开发?

对于手机开发程序员来说,以前在手机上开发的应用,现在android可以做到,但是以前做起来相当痛苦。通过一个简单且强大的SDK,无licensing费用、出色的文档和一个生机勃勃的开发者社区。Android对于开发者来说绝对是一个好机会。

从商业角度来说:

1、作为一个android 开发者无需认证

2、提供了Android市场区发布你的应用

3、不需要许可证就能处理你的程序发布

4、让你能完全控制用户的手机

什么已经并且会持续推动Android

1、对开发者更加容易

2、他的开放性

3、简单强大的API接口

什么是他有,而其他平台所没有的

1Google Map applications :这个已经相当流行了

2、程序服务可以后台运行:使用了基于事件的模型,真是偷偷的工作

3、数据共享以及进程交互机制:使用了Intents和内容供应接口

4、所有应用平等:反复强调的,就是那些原生自带程序也是可以被替代掉的

5、屏幕组件、快捷方式、墙纸等应用:这玩意能提升交互性,好处多多

改变了移动开发的格局

很多手机是买的时候啥样,以后就是啥样。作为对比,Android鼓励消费者做出改变。并且给开发者一个控制用户行为的机会。并且写出的程序不是运行在某个沙盒之上,直接就是系统程序。他的开放性,开源的框架体系,开发工具集的优势,系统资源的完全访问能力,推动我们继续前进。

1.10 开发框架介绍

在介绍工作完成后,是时候看看你如何来为android开发应用了。Android的应用是用java写的,但是是用特定的JVM虚拟

Dalvik编译执行的,不是用传统的JAVA VM处理。

在这章之后将会给你介绍这个框架,以技术角度解释Android的软件栈,看看SDK中包含什么,介绍下Android的库,并且

看看Dalvik虚拟机。

每个Android应用都会在Dalvik 实例上单独的执行,在Android运行环境中如果有资源回收需要,他们会随时被停止或者

杀掉。

DalvikAndroid运行时位于linux的内核之上,他们主要处理硬件交互,包括驱动以及内存管理,同时提供一系列的API 

供所有的底层服务、特性和硬件访问。

Android的潘多拉魔盒中有什么?

AndroidSDK中包括了所有你开发需要的东西。包括测试和调试应用。如下:

1Android API:核心的SDK API库,提供给开发者访问stack的权利。这些和google的原生程序调用的API是一样的。

2、开发工具:因此你可以将源码放到应用执行过程中进行跟踪,SDK包括几个开发工具让你去编译和调试你的应用。你可

以在第二章进行深入的学习。

3、虚拟设备管理器和模拟器:Android模拟器是一个完全互动的Android设备模拟器,可以切换外观。模拟器运行在一个

模拟了硬件设备的的Android虚拟设备上。使用模拟器你可以看到应用在真正的设备上是如何呈现的。所有的Android应用

都会在Dalvik VM上运行,所以软件模拟器只是一个环境。实际上,作为一个中立的硬件,他只是更好的提供了平台独立

性的测试环境而不是一个硬件实现。

4、完善的文档:SDK包括了一些代码级别的引用信息,详细的表述了每个packageclass以及如何去用他们。除了代码文

档之外,Android的引用文档还解释了如何去启动以及隐藏在Android开发后面的那些基础知识。

5、例子代码:SDK包含一些选出来的例子应用代码,展示了Android的各方面能力,同时通过简单的代码展示了如何去用

专有API特性。

6、在线支持:Android有一个快速增长的社区。googlegroups论坛在

http://developer.android.com/resources/community- groups.html。同时很多人更加喜欢在stackoverflow上提问: 

http://www.stackoverflow.com/questions/tagged/android

 对于那些喜欢用Eclipse IDE的人来说,Android 发布了一个特别的插件,它包括Android模拟器和debug工具。ADT插件

的特性在第二章的时候会详细说明。

  理解Android的软件栈

  Android的软件栈是由图一中描述的元素组成的。简单来说,linux内核和C/C++库通过应用框架对外提供服务,管理运

行时以及应用。

  1linux 内核:核心服务(包括硬件驱动、进程、内存管理、安全、网络以及电力管理)是linux 2.6的内核。它在硬

件和软件栈之间提供了一个抽象层

  2libraries库:在linux内核上运行。Android包含了很多的C/C++的核心库,例如libcSSL,也包括SQLite对本地库

的支持以及SSLWebKit还有网络完全等等。

  3Android运行时:是什么让android phone不是一个linux的实现,这就是Android的运行时。它包括核心的库以及

Dalvik的虚拟机,运行时引擎支撑了应用和那些类库,是应用框架的基础。

   (1)、核心库:核心库提供了大部分的基础功能

   (2)、Dalvik 虚拟机:他是一个经过优化的注册虚拟机,他能很高效的运行很多的实例,他依赖于linux内核线程和

底层的内存管理实现。

图一:


   (3)、应用框架:提供类去创建应用,同时也为底层硬件提供抽象访问和管理接口,去管理应用资源

   (4)、应用层:所有应用,包括原生的和第三方的,都被建立在应用层,使用的是相通的API库,应用层在Android

运行时启动,从应用框架中调用可用的classes和服务

   Dalvik虚拟机:

  Android核心元素之一就是Dalvik虚拟机。他不是用传统的java虚拟机,例如JAVA ME虚拟机,他使用了自己定制的VM

此保证多个实例在单一设备上有效的运行。

  Dalvik VM利用设备底层的linux内核去处理底层的功能,包括安全,线程以及内存处理等等,他同时也能去写C/C++

用在底层应用。不过你一般不需要这么做。

  如果C/C++速度和效率是你应用所必须的,那么Android提供了一个NDK接口。他是用来帮助你用libclibm去创建C++

的。同时也可以访问OpenGL

  所有的Android硬件和系统服务的访问被Dalvik这个中间层管理着。通过VM去部署应用执行,开发人员永远不需要考虑

特定的硬件实现。

  Dalvik VM执行他所能执行的文件,文件被很好的格式化,并且后缀是.dex。下个章节,我们可以通过java语言去创建

编译Dalvik能执行的文件。

  Android的应用架构

  Android的架构鼓励组件重用的原则,帮助你发布和与其他应用共享 活动、服务、数据,并以辅以一定的访问安全策略

  相同的机制会让你制造出一个可以替代的联系人管理或者拨打电话组件能让其他开发者创建新的UI呈现,以及扩展相关

功能。

  下边的应哟ing服务是架构的核心功能,提供的框架你可以在你自己的软件中用到。

  1、活动管理:控制活动的生命周期

  2、视图:用来构造你的活动的用户交互接口

  3、提醒管理:提供了一个连续机制来提醒用户

  4、内容提供:让程序共享数据

  5、资源管理:支持非代码资源的管理

  Android Libraries

  Android提供了大量的APIS供我们开发应用,而不是将他们罗列在这里。我建议你到官网去获取一个完整的package列表

Android 将来是想推广到更大的硬件平台上,所以一定小心某些API是不是基于特定硬件的。

1.11 总结

  这章解释了尽管硬件发展迅猛,但是软件已经落后了。对于移动终端来说,糟糕的开发工具,晦涩难懂的API,严重的封闭性,让移动应用软件落后于硬件。

  Android给开发者提供了一个创造革命性软件的机会,而且没有条条框框的限制。

  向你展示立刻一个完整的Android软件堆栈图,不但是包含应用层和开发工具包,还包括Dalvik虚拟机,一个定制的运行时、核心包和一个linux内核,他们都是开源的。

  同时你仍旧可以学到:

  1、这些设备如何对开发者提供一个更好的访问接口和特性

  2、一些Android的特性。包括map支持,硬件访问、后台服务、信息交互、共享数据和2D/3D的图形库

  3Android应用都是平等的。允许开发者替换原生应用

  4SDK包括开发工具、APIs,和容易理解的文档

 下章将帮助你去下载SDK安装环境,在eclipse中设置开发环境。

 你同时也会了解到在创建你的第一个android应用之前,如何利用工具插件去开发测试和调试,

 在学习完建立android应用后,你会被介绍去创建不同应用,并且你会开始去完善你移动应用程序的设计理念。 



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值