移动应用开发
第一章 绪论
主要内容
手机操作系统
Android
起源与发展
Android
开发环境
Android
程序初探
1
手机操作系统
Android
iPhoneOS
Windows Mobile
Windows Phone 7
Symbian
黑莓
PalmOS
Linux
1
手机
操作系统
Android
由谷歌发布的开源手机系统
Android
的组成
Linux
操作系统、中间件和应用软件组成
第一个完全定制、免费、开放的手机平台
使用
Java
语言开发
较好的可移植性
手机、平板电脑、电视
……
1
手机操作系统
iOS
由苹果公司开发的操作系统
iOS
的系统构架
核心操作系统层、核心服务层、媒体层和可轻触层
多点触摸操作是
iOS
的用户界面基础
1
手机操作系统
Windows Mobile
由微软公司推出的移动设备操作系统
硬件配置高、耗电量大、电池续航时间短、硬件成本高
Windows Mobile
系列包括
:
Pocket PC
Smartphone
Portable Media Center
1
手机操作系统
Windows Phone 7
2010
年
10
月
发布移动设备操作系统
“方格子”用户界面
集成了
Xbox Live
游戏
、
社交网站和
Zune
音乐功能
与
Windows Mobile
不兼容
1
手机操作系统
黑莓系统
加拿大
RIM
公司推出的一种移动操作系统
特色是支持电子邮件推送功能
主要针对商务应用,具有很高的安全性和可靠性
1
手机操作系统
Symbian
由
塞班公司
开发和维护,后被诺基亚收购
实时多任务的
32
位操作系统
功耗低、内存占用少、应用界面框架灵活
不开放核心代码,但公开
API
文档
诺基亚最终决定放弃
Symbian
系统
1
手机操作系统
PalmOS
由
3Com
公司的
Palm
Computing
部门开发
32
位嵌入式操作系统
针对移动设备设计,所占的内存小
操作界面采用触控式
存在一些不足
不具有录音和
MP3
播放功能
1
手机操作系统
Linux
由计算机
Linux
操作系统演变而来
开放源代码,
降低手机的软件成本
第三方应用
丰富
有一些先天不足
入门难度高
熟悉其开发环境的工程师少
集成开发环境较差
2 Android
起源与发展
OHA
Android
发展
Android
体系结构
开放手机联盟
开放
手机联盟(
Open Handset Alliance
,
OHA
)
由谷歌公司于
2007
年发起的一个全球性的联盟组织
,
成立时包含
34
家联盟成员
,
现在已经增加到
82
家
联盟组织的目标
研发移动设备的新技术,用以大幅削减移动设备开发与推广成本
通过联盟各个合作方的努力,建立了移动通信领域新的合作环境,促进了创新移动设备的开发,创造了目前移动平台实现的用户体验
开放
手机联盟成员(初期
34
个成员
---
目前
82
个)
电信运营商
半导体芯片商
手机硬件制造商
软件厂商
商品化公司
开放手机联盟
电信
运营商:中国移动通信、
KDDI
(日本)、
NTT DoCoMo
(日本)、
Sprint Nextel
(美国)、
T-Mobile
(美国)、
Telecom
(意大利)、中国联通、
Softbank
(日本)、
Telefonica
(西班牙)和
Vodafone
(英国)
开放手机联盟
半导体
芯片商:
Audience
(美国)、
AKM
(日本)、
ARM
(英国)、
Atheros
Communications
(美国)、
Broadcom
(美国)、
Intel
(美国)、
Marvell
(美国)、
nVIDIA
(美国)、
Qualcomm
(美国)、
SiRF
(美国)、
Synaptics
(美国)、
ST-Ericsson
(意大利、法国和瑞典)和
Texas Instruments
(美国)
开放手机联盟
手机
硬件制造商:
Acer
(中国台湾)、华硕(中国台湾)、
Garmin
(中国台湾)、宏达电(中国台湾)、
LG
(韩国)、三星(韩国)、华为(中国)、摩托罗拉(美国)、索尼爱立信(日本和瑞典)和东芝(日本)
开放手机联盟
软件厂商:
Ascender Corp
(美国)、
eBay
(美国)、谷歌(美国)、
LivingImage
(日本)、
NuanceCommunications
(美国)、
Myraid
(瑞士)、
Omron
(日本)、
PacketVideo
(美国)、
SkyPop
(美国)、
Svox
(瑞士)和
SONiVOX
(美国)
开放手机联盟
商品化
公司:
Aplix
Corporation
(日本)、
Noser
Engineering
(瑞士)、
Borqs
(中国)、
TAT-The Astonishing
(瑞典)、
Teleca
AB
(瑞典)和
Wind River
(美国)
开放手机联盟
Android
发展
2007
年
11
月
5
日,开放手机联盟(
OHA
)成立
2007
年
11
月
12
日,谷歌发布
Android
SDK
预览版 ,这是第一个对外公布的
Android
SDK
,为发布正式版收集用户反馈
2008
年
4
月
17
日,
谷歌举办总共
1000
万美金的
Android
开发者竞赛,奖励最有创意的
Android
程序开发者
cab4me
(出租车呼叫)、
BioWallet
(生物特征识别)和
CompareEverywhere
(实时商品查询)
Android
发展
2008
年
8
月
28
日,谷歌开通
Android
Market
,供
Android
手机下载需要使用的应用程序
2008
年
9
月
23
日,发布
Android
SDK
版,这是第一个稳定的
SDK
版本
2008
年
10
月
21
日,谷歌公布
Android
平台的源代码
Android
发展
Android
用甜点作为系统版本的代号,该命名方法开始于
Andoird
版本,作为每个版本代表的甜点的尺寸越变越大,然后按照
26
个字母数序:纸杯蛋糕、甜甜圈、松饼、冻酸奶、姜饼、蜂巢、冰淇淋三明治、果冻豆
…
。
Android
(蜂巢)之前的版本主要针对移动手机,
Android
蜂巢版本系列(即
、
和
版本)主要针对平板电脑及上网本,而
Android
之后的版本将同时支持移动手机、平板电脑及上网本等终端。
2008
年
10
月
22
日,第一款
Android
手机
T-Mobile G1
在美国上市,由中国台湾的宏达电制造
内置
528MHz
的
Qualcomm MSM 7201A
处理器
有
192MB RAM
和
256MB ROM
的内存空间,提供侧面滑动的全键盘
2009
年
2
月,发布
Android
SDK
版
修正
版本存在的缺陷,如设备休眠状态的稳定性问题、邮件冻结问题、
POP3
链接失败问题和
IMAP
协议的密码引用问题等
Android
发展
2009
年
2
月
17
日,第二款
Android
手机
T-Mobile
G2
正式发售,仍由中国台湾的宏达电制造
2009
年
4
月
15
日,发布
Android
SDK
版
此版本提升了性能表现,提高了摄像头的启动速度和拍摄速度,
提高了
GPS
位置的获取速度
Android
发展
Cupcake
(纸杯蛋糕)
2009
年
10
月
28
日,发布
Android
(
Eclair
)
新特性
包括
如数字变焦、多点触摸和多个账户邮箱
2010
年
1
月
6
日,谷歌发布
Google Nexus One
使用
SnapDragon
1GHz
处理器
英寸
AMOLED
电容屏,
由中国台湾的宏达电代工生产
Android
发展
Éclair
(松饼)
2010
年
5
月
21
日,发布
Android
版(
Froyo
)
此版本在企业集成、设备管理
API
、性能、网络共享、浏览器和市场等领域都提供了很多新特性。
借助于新的
Dalvik
JIT
编译器,
CPU
密集型应用的速度要比
Android
快
2
~
5
倍,并加入对
Adobe Flash
视频和图片的完美支持
使用了
Chrome V8
引擎,
JavaScript
代码的处理速度要比
Android
快
2
~
3
倍
将应用程序安装在
microSD
卡上,应用程序可以在内部存储器和外部存储器上迁移
Android
发展
Froyo
(冻酸奶)
2010
年
12
月
7
日,发布
Android
(
Gingerbread
)
此版本主要增强了对游戏的支持、多媒体影音和通讯功能。
在游戏方面,增加了新的垃圾回收和优化处理事件,以提高对游戏的支持能力,原生代码可直接存取输入和感应器事件、
EGL/OpenGL ES
、
OpenSL
ES
,并增加了新的管理窗口和生命周期的框架。
在多媒体影音方面,支持
VP8
和
WebM
视频格式,提供
AAC
和
AMR
宽频编码,提供了新的音频效果器,比如混响、均衡、虚拟耳机和低频提升。
在通讯方面,支持前置摄像头、
SIP/VoIP
和
NFC
(近场通讯)功能。
Android
发展
Gingerbread
(姜饼)
2010
年
12
月
7
日,谷歌发布了第二款自主品牌的
Android
手机
Google Nexus S
Cortex A8
处理器,默认频率为
1GHz
512MB
的
RAM
和
16GB
的内置闪存,但不支持存储卡扩展
英寸
WVGA(480×800)
分辨率电容触摸屏幕。
是第一款具备
NFC
功能的
Android
手机
Android
发展
2011
年
1
月
6
日,摩托罗拉发布了第一款
Android
的平板电脑
Motorola
Xoom
。
硬件上采用双核
1GHz NVIDIA
Tegra
2
处理器
寸
1280x800
分辨率的触摸屏,内置有
32GB
存储,
配有前置与后置摄像头,支持高清视频录制和播放功能
Android
发展
2011
年
2
月
3
日,
Android
版本(
Honeycomb
)正式发布。
专为平板电脑设计的
Android
系统, 在界面上更加注重用户体验和良好互动性
Android
原生支持文件
/
图片传输协议,允许用户通过
USB
接口连接外不设备同步数据,或通过
USB
或蓝牙连接实体键盘进行更快速的文字输入
改进了
WiFi
连接,搜索信号速度更快
Android
发展
蜂巢
2011
年
5
月
10
日,
Android
版本正式发布。
作为
Android
的升级版,
Android
界面上做了一些美化与调整
增加了对
USB
设备的支持,如
USB
鼠标、键盘和游戏控制器等。
widget
加入了可自定改变大小的功能。
Android
发展
2011
年
10
月
19
日,
Android
版本(冰淇淋三明治)正式发布。
同时支持智能手机、平板电脑、电视等设备
人脸识别功能,用户可以使用自拍相片设置屏幕锁
基于
NFC
的
Android Beam
功能,可以让两部手机在接近到
4
厘米后交换信息,可交换的内容包括网站、联系人、导航、
YouTube
视频等,甚至是电子市场的下载链接
Android
发展
12
.
Android
代号:
Jelly Bean
(果冻豆)。
发布时间:发布于
2012
年
6
月
28
日。
13
.
Android
Jelly Bean
(果冻豆)。
发布时间:发布于
2012
年
10
月
30
日。
14
.
Android
Jelly Bean
(果冻豆)。
发布时间:发布于
2013
年
7
月
25
日。
Android
体系结构
体系分为四层:
1
、
Linux
内核
2
、中间件层
3
、程序框架层
4
、应用程序层
Android
体系结构
Linux
内核
Linux
内核
硬件和其他软件堆层之间的一个抽象隔离层
提供安全机制、内存管理、进程管理、网络协议堆栈、和驱动程序等
Android
体系结构
中间件层
由函数库和
Android
运行时构成
函数库,主要提供一组基于
C/C++
的函数库
Surface Manager
,支持显示子系统的访问,提供应用程序与
2D
、
3D
图像层的平滑连接
Media Framework
,实现音视频的播放和录制功能
SQLite
,轻量级的关系数据库引擎
OpenGL ES
,基于
3D
图像加速
FreeType
,位图与矢量字体渲染
WebKit
,
Web
浏览器引擎
SG
L,2D
图像引擎
SSL
,数据加密与安全传输的函数库
Libc
,标准
C
运行库,
Linux
系统中底层应用程序开发接口
Android
体系结构
中间件层
Android
运行时
核心库,提供
Android
系统的特有函数功能和
Java
语 言函数功能
Dalvik
虚拟机,是经过优化的多实例虚拟机,基于寄存器架构设计,实现基于
Linux
内核的线程管理和底层内存管理,
采用专用的
Dalvik
可执行格式(
.
dex
),该格式适合内存和处理器速度受限的系统
Dalvik
虚拟机是经过优化的多实例虚拟机,基于寄存器架构设计,实现了基于
Linux
内核的线程管理和底层内存管理。
Dalvik
虚拟机
Android
体系结构
应用程序框架
提供
Android
平台基本的管理功能和组件重用机制
Activity Manager
,管理应用程序的生命周期
Windows Manager
,启动应用程序的窗体
Content Provider
,共享私有数据,实现跨进程的数据访问
Package Manager
,管理安装在
Android
系统内的应用程序
Android
体系结构
应用程序框架
Teleghony
Manager
,管理与拨打和接听电话的相关功能
Resource Manager
,允许应用程序使用非代码资源
Location Manager
,管理与地图相关的服务功能
Notification Manager
,允许应用程序在状态栏中显示提示信息
Android
体系结构
应用程序
提供一系列的核心应用程序
包括电子邮件客户端、浏览器、通讯录和日历等
3 Android
开发环境
JDK
Java
项目运行
编译调试
工具
Eclipse
Java
编程
IDE
SDK
Android
项目运行
编译调试工具
ADT
Eclipse
与
SDK
融合插件
Android SDK
Android SDK
的目录中存在
7
个文件夹,这
7
个文件夹表示的意义分别如下:
add-ons
:
Android
开发需要的第三方文件。
build-tools
:编译选项和相关工具。
extras
:附件文档。
platforms
:一系列
Android
平台版本。
platform-tools
:开发工具,在平台更新时可能会更新。
system-images
:系统镜像。
tools
:独立于
Android
平台的开发工具,这里的程序可能随时更新。
4 Android
程序初探
工程创建过程
工程目录结构
工程创建过程
建立工程
建立
AVD
启动
AVD
调试运行工程
创建工程
1
2
3
创建工程
创建工程
图标形状
创建
AVD
模拟手机设备
也可以利用实机,需要安装驱动
设置虚拟机的名字
选择屏幕分辨率
平台的版本
使用后置摄像头
设置手机内存大小
设置虚拟机的堆内存大小
设置
SD
卡的大小
启动运行环境
Android
程序结构
建立
HelloAndroid
程序
在建立
HelloAndroid
程序的过程中,
ADT
会自动建立一些目录和文件
这些目录和文件有其固定的作用,有的允许修改,有的不能修改。
Android
程序结构
说明
在“
Package Explore”
中,
ADT
以工程
名称
HelloAndroid
作为
根目录,将所有自动生成的和非自动生成的文件都保存在这个根目录下
子目录、库和工程文件
根目录下包含
5
个子目录
src
、
gen
、
assets
、
bin
和
res
1
个库文件
3
个工程文件
、
和
。
Android
程序结构
src
目录
src
目录是源代码目录,所有允许用户修改的
java
文件和用户自己添加的
java
文件都保存在这个目录中
工程建立初期
HelloAndroid
工程建立初期,
ADT
根据用户在工程向导中的“
Create Activity”
选项,自动建立
文件
Android
程序结构
gen
目录
gen
目录用来保存
ADT
自动生成的
java
文件
例如
或
AIDL
文件。这个目录中的文件不建议用户进行任何修改,如果用户删除该目录中的文件,
ADT
会自动再次生成被删除的文件。
Android
程序结构
assets
目录
assets
目录用来存放原始格式的文件
例如音频文件、视频文件等二进制格式文件。
此目录中的资源不能够被
文件索引,因此只能以字节流的形式进行读取。缺省为空目录。
Android
程序结构
bin
目录
bin
目录保存了编译过程中的所产生的文件,以及最终生产的
apk
文件。
res
目录
res
目录是资源目录,
Android
程序所有的图像、颜色、风格、主题、界面布局和字符串等资源都保存在其下的几个子目录中。
其中,
drawable-hdpi
、
drawable-mdpi
和
drawable-ldpi
目录用来保存同一个程序中针对不同屏幕尺寸需要显示的不同大小的图像文件
Android
程序结构
res
目录
layout
目录用来保存与用户界面相关的布局文件
values
目录保存颜色、风格、主题和字符串等资源。
在
HelloAndroid
工程中,
ADT
在每个
drawable
目录中自动引入了一个不尺寸的
文件,
Android
系统会根据目标设备的屏幕分辨率,为
HelloAndroid
程序加载不同尺寸的图标文件;在
layout
目录生成了
文件
在
values
目录生成了
文件,将应用程序名称“
HelloAndroid
”
和界面显示的“
Hello World,
HelloAndroidActivity
!”
保存在这个文件中。
Android
程序结构
文件
文件是
Android
程序所能引用的函数库文件,
Android
系统所支持
API
都包含在这个文件中,
文件
文件是供
ProGuard
工具进行代码优化和代码混淆使用的配置文件。
文件
文件记录了
Android
工程的相关设置,例如编译目标和
apk
设置等,该文件不能手工修改
Android
程序结构
p
文件
如果需要更改其中的设置,必须通过右键单击工程名称,选择“
Properties”
进行修改过。
从
文件的代码中可以发现,大部分都是内容注释,仅有第
12
行是有效代码,说明了
Android
程序的编译目标
文件的代码如下:
Android
程序结构
是
XML
格式的
Android
程序声明文件
包含了
Android
系统运行
Android
程序前所必须掌握的重要信息,这些信息包括应用程序名称、图标、包名称、模块组成、授权和
SDK
最低版本等
Android
程序结构
文件的代码如下:
Android
程序结构
文件
manifest
元素仅能包含一个
application
元素,
application
元素中能够声明
Android
程序中最重要的四个组成部分
包括
Activity
、
Service
、
BroadcastReceiver
和
ContentProvider
,所定义的属性将影响所有组成部分
Android
程序结构
activity
元素
activity
元素
是对
Activity
子类的声明,不在
文件中声明的
Activity
将不能够在用户界面中显示。
intent-filter
intent-filter
中声明了两个子元素
action
和
category
。
文件
文件是
ADT
自动生成的文件
包含对
drawable
、
layout
和
values
目录内的资源的引用指针,
Android
程序能够直接通过
R
类引用目录中的资源。
Android
程序结构
HelloAndroid
工程生成的
文件的代码如下:
Android
程序结构
引用资源
资源引用有两种情况:一种是在代码中引用资源;另一种是在资源中引用资源
代码中引用资源,需要使用资源的
ID
,可以通过
[
_name
]
或
[
_name
]
获取资源
ID
resource_type
代表资源类型,也就是
R
类中的内部类名称
resource_name
代表资源名称,对应资源的文件名或在
XML
文件中定义的资源名称属性
资源中引用资源,引用格式:@
[package:]
type:name
@表示对资源的引用
package
是包名称,如果在相同的包,
package
则可以省略
Android
程序结构
文件
文件是界面布局文件,利用
XML
语言描述的用户界面,界面布局的相关内容将在第
5
章用户界面设计中进行详细介绍。
文件的代码如下:
Android
程序结构
文件
代码的第
7
行说明在界面中使用
TextView
控件,
TextView
控件主要用来显示字符串文本。
代码第
10
行说明
TextView
控件需要显示的字符串,非常明显,
@string/hello
是对资源的引用
Android
程序结构
文件的代码
通过
文件的第
3
行代码分析,在
TextView
控件中显示的字符串应是“
Hello World,
HelloAndroidActivity
!”
。
如果读者修改
文件的第
3
行代码的内容,重新编译、运行后,模拟器中显示的结果也应该随之更改。
Android
程序结构
是
Android
工程向导根据
Activity
名称创建的
java
文件
这个文件完全可以手工修改。
为了在
Android
系统上显示图形界面,需要使用代码继承
Activity
类
并在
onCreate()
函数中声明需要显示的内容
Android
程序结构
文件的代码如下:
代码的第
3
行和第
4
行,通过
从
Android SDK
中引入了
Activity
和
Bundle
两个重要的包,用以子类继承和信息传递;
Android
程序结构
文件
第
6
行声明
HelloAndroid
类继承
Activity
类;
第
8
行表明需要重写
onCreate
()
函数;
第
9
行的
onCreate
()
会在
Activity
首次启动时会被调用,为了便于理解,可以认为
onCreate
()
是
HelloAndroid
程序的主入口函数;
第
10
行调用父类的
onCreate
()
函数,并将
savedInstanceState
传递给父类,
savedInstanceState
是
Activity
的状态信息;第
11
行声明了需要显示的用户界面,此界面是用
XML
语言描述的界面布局,保存在
scr
/layout/
资源文件中。