目 录
第1章 从零开始认识Android 1
1.1 智能手机和系统... 1
1.1.1 智能手机的特点... 1
1.1.2 常用的手机系统... 2
1.2 Android简介... 3
1.2.1 Android的诞生... 3
1.2.2 Android的发展... 3
1.2.3 Android的特点和优势... 4
1.3 Android的系统架构... 6
1.3.1 系统架构概述... 6
1.3.2 应用程序... 6
1.3.3 应用程序框架... 7
1.3.4 核心库... 7
1.3.5 Android运行时... 8
1.3.6 Linux内核... 9
1.4 Android的四大组件... 9
1.4.1 Activity组件... 9
1.4.2 Service组件... 10
1.4.3 BroadcastReceiver组件... 10
1.4.4 ContentProvider组件... 10
1.5 Android 4.4. 11
1.5.1 Android4.4的新增功能... 11
1.5.2 Android4.4的改进功能... 12
1.5.3 Android4.4的发展方向... 12
1.6 思考与练习... 13
第2章 Android开发环境与开发
工具. 15
2.1 配置Android开发环境... 15
2.1.1 安装JDK工具包... 15
2.1.2 配置环境变量... 16
2.1.3 安装ADT插件... 18
2.1.4 实验指导——手动安装ADT
插件和汉化Eclipse工具... 20
2.2 安装AndroidSDK工具包... 21
2.3 使用Android模拟器... 23
2.3.1 创建模拟器... 23
2.3.2 启动模拟器... 25
2.3.3 控制模拟器... 26
2.3.4 使用模拟器控制台... 27
2.4 Android工具... 28
2.4.1 查看Android版本的ID
信息... 28
2.4.2 创建AVD设备... 29
2.4.3 删除AVD设备... 30
2.5 Emulator工具... 31
2.6 实验指导——管理SD卡... 34
2.7 Keytool工具和Jarsigner工具... 35
2.8 实验指导——使用ADT签名程序... 36
2.9 ADB工具... 37
2.9.1 查看ADB版本... 37
2.9.2 查看设备信息... 38
2.9.3 管理软件... 38
2.9.4 移动文件... 40
2.9.5 执行Shell命令... 41
2.9.6 查看Bug报告... 42
2.9.7 转发端口... 43
2.9.8 启动和关闭ADB服务... 43
2.10 AAPT工具... 43
2.11 DDMS工具... 44
2.12 思考与练习... 46
第3章 Android应用程序剖析. 47
3.1 创建Android应用程序... 47
3.2 程序目录解析... 49
3.2.1 appcompat_v7包... 49
3.2.2 src目录... 50
3.2.3 gen目录... 52
3.2.4 res目录... 53
3.2.5 其他目录... 56
3.2.6 AndroidManifest.xml文件... 56
3.2.7 project.properties文件... 58
3.3 应用程序权限说明... 58
3.3.1 系统的常用权限... 59
3.3.2 声明和调用权限... 60
3.4 设计图形界面... 62
3.4.1 打开界面文件... 62
3.4.2 设计图形界面... 63
3.4 运行应用程序... 65
3.5 调试应用程序... 66
3.5.1 设置断点... 66
3.5.2 调试程序... 67
3.5.3 输出日志信息... 68
3.6 实验指导——倒计时计数功能的
实现... 69
3.7 思考与练习... 71
第4章 用户界面设计. 73
4.1 界面编程与视图组件... 73
4.1.1 视图组件与容器组件... 73
4.1.2 使用XML布局界面... 76
4.1.3 使用代码布局界面... 79
4.1.4 使用混合方式... 80
4.1.5 开发自定义视图... 82
4.2 Android界面布局类... 83
4.3 线性布局... 84
4.4 表格布局... 87
4.5 帧布局... 89
4.6 相对布局... 91
4.7 绝对布局... 94
4.8 网格布局... 96
4.9 思考与练习... 102
第5章 Android基础组件详解. 104
5.1 文本类组件... 104
5.1.1 文本框... 104
5.1.2 编辑框... 107
5.2 按钮类组件... 108
5.2.1 普通按钮... 108
5.2.2 图片按钮... 110
5.2.3 单选按钮... 111
5.2.4 复选框... 114
5.3 图像视图... 116
5.4 列表类组件... 119
5.4.1 列表框... 119
5.4.2 列表视图... 122
5.4.3 列表视图高级应用... 125
5.5 日期与时间组件... 126
5.5.1 日期选择器... 127
5.5.2 时间选择器... 127
5.5.3 计时器... 128
5.6 实验指导——时间和日期处理... 129
5.7 思考与练习... 131
第6章 应用程序与Activity 133
6.1 Activity简介... 133
6.1.1 Activity概述... 133
6.1.2 Activity的生命周期... 135
6.1.3 Activity的属性... 136
6.2 Activity的创建和启动... 137
6.2.1 创建Activity. 137
6.2.2 配置Activity. 139
6.2.3 启动和关闭Activity. 140
6.3 多个Activity的使用... 140
6.3.1 Activity的切换... 141
6.3.2 Activity数据传递... 142
6.4 使用Fragment 144
6.4.1 Fragment简介... 144
6.4.2 创建Fragment 144
6.4.3 在Activity中添加
Fragment 146
6.4.4 操作Fragment 147
6.5 实验指导——单选题应用程序... 149
6.6 思考与练习... 151
第7章 Intent和BroadcastReceiver
的应用. 152
7.1 Intent对象简介... 152
7.2 Intent对象组成元素... 153
7.2.1 组件名称... 153
7.2.2 动作... 155
7.2.3 种类... 160
7.2.4 数据... 162
7.2.5 额外... 164
7.2.6 标记... 164
7.3 实验指导——添加联系人... 165
7.4 Intent过滤器... 168
7.5 BroadcastReceiver组件... 171
7.5.1 BroadcastReceiver简介... 171
7.5.2 发送广播... 173
7.5.3 有序广播... 175
7.5.4 接收系统广播... 178
7.6 实验指导——拦截系统短信提示... 180
7.7 思考与练习... 181
第8章 Android高级界面设计. 183
8.1 窗口小部件... 183
8.1.1 进度条... 183
8.1.2 拖动条... 185
8.1.3 星级评分条... 187
8.2 图像类控件... 188
8.2.1 图像切换器... 188
8.2.2 画廊视图... 190
8.2.3 滚动视图... 190
8.2.4 网格视图... 191
8.3 其他控件... 194
8.3.1 自动完成编辑框... 194
8.3.2 选项卡... 196
8.3.3 多页视图... 198
8.4 实验指导——拖动条切换图像... 200
8.5 思考与练习... 202
第9章 访问系统资源. 204
9.1 系统资源概述... 204
9.1.1 资源类型... 204
9.1.2 使用资源... 206
9.2 字符串资源... 207
9.2.1 定义字符串资源... 207
9.2.2 使用字符串资源... 209
9.3 数组资源... 211
9.3.1 定义数组资源... 211
9.3.2 使用数组资源... 212
9.4 颜色资源... 213
9.4.1 定义颜色资源... 213
9.4.2 使用颜色资源... 214
9.5 尺寸资源... 215
9.5.1 定义尺寸资源... 215
9.5.2 使用尺寸资源... 216
9.6 类型和主题资源... 217
9.6.1 类型资源... 217
9.6.2 主题资源... 218
9.7 Drawable资源... 220
9.7.1 了解Drawable资源... 220
9.7.2 定义和使用Drawable资源... 221
9.8 菜单资源... 223
9.8.1 定义菜单资源... 224
9.8.2 使用菜单资源... 225
9.9 原始XML资源... 228
9.10 实验指导——选择上下文菜单项
并更改字体颜色... 229
9.11 思考与练习... 231
第10章 Android多媒体应用. 233
10.1 基本绘图... 233
10.1.1 绘图类... 233
10.1.2 绘制几何图形... 236
10.1.3 绘制路径... 240
10.1.4 绘制文本... 241
10.2 图像操作... 242
10.2.1 绘制图像... 243
10.2.2 旋转图像... 243
10.2.3 缩放图像... 244
10.2.4 平移图像... 245
10.2.5 倾斜图像... 245
10.3 实验指导——通过定时器扭曲
图像... 246
10.4 动画特效... 249
10.4.1 逐帧动画... 249
10.4.2 补间动画... 251
10.5 视频和音频... 254
10.5.1 使用MediaPlayer播放
音频... 254
10.5.2 使用VideoView播放视频... 258
10.5.3 使用SurfaceView播放
视频... 260
10.6 思考与练习... 262
第11章 Android事件处理机制. 264
11.1 Android事件处理概述... 264
11.2 基于监听的事件... 265
11.2.1 监听的处理流程... 265
11.2.2 事件监听器... 268
11.2.3 内部类和外部类作为事件
监听器类... 270
11.2.4 匿名内部类作为事件
监听器类... 272
11.2.5 Activity作为事件监听
器类... 273
11.2.6 绑定到组件事件属性... 273
11.3 基于回调的事件... 274
11.3.1 回调机制与监听机制... 274
11.3.2 基于回调的事件传播流程... 276
11.3.3 基于回调的触摸事件处理... 278
11.4 Handler消息传递机制... 280
11.4.1 Handler类简介... 280
11.4.2 Handler的工作原理... 282
11.5 手势的创建与识别... 285
11.5.1 手势的创建... 286
11.5.2 手势的导出... 287
11.5.3 手势的识别... 287
11.6 思考与练习... 289
第12章 Android数据存储. 291
12.1 SharedPreferences对象数据的
存储... 291
12.1.1 了解SharedPreferences. 291
12.1.2 使用SharedPreferences. 292
12.1.3 数据存储位置和格式... 295
12.2 File数据存储... 296
12.2.1 写入数据... 296
12.2.2 读取数据... 299
12.2.3 保存数据到SDCard. 300
12.3 SQLite数据库... 302
12.3.1 了解SQLite. 302
12.3.2 使用SQLite. 304
12.4 内容提供者ContentProvider 310
12.4.1 了解ContentProvider 310
12.4.2 自定义ContentProvider 312
12.5 实验指导——预定义
ContentProvider读取联系人... 319
12.6 思考与练习... 322
第13章 调用Android系统服务. 324
13.1 了解Service. 324
13.1.1 Service的分类... 324
13.1.2 Service的生命周期... 325
13.1.3 Service的常用方法... 326
13.1.4 声明Service. 326
13.2 实验指导——启动和停止
Started Service. 327
13.3 系统服务... 331
13.3.1 获取系统服务... 331
13.3.2 使用WindowManager 332
13.3.3 使用AlarmManager 333
13.4 实验指导——TelephonyManager
实现电话管理器... 337
13.5 思考与练习... 339
第14章 Android网络编程. 341
14.1 网络编程基础... 341
14.2 HTTP通信... 342
14.2.1 使用HttpURLConnection. 342
14.2.2 使用HttpClient 345
14.3 Socket网络编程... 345
14.4 Web网络编程... 348
14.4.1 使用WebView浏览网页... 348
14.4.2 WebView与JavaScript 351
14.5 实验指导——登记系统... 352
14.6 思考与练习... 353
第15章 贪吃蛇游戏. 355
15.1 功能简介... 355
15.2 项目结构... 355
15.3 实现思路分析... 356
15.3.1 游戏界面模块实现... 356
15.3.2 游戏控制模块实现... 357
15.3.3 TileView类的设计... 358
15.3.4 SnakeView类的设计... 358
15.4 详细设计... 358
15.4.1 Snake类的详细设计... 358
15.4.2 TileView类的详细设计... 360
15.4.3 SnakeView类的详细设计... 361
15.4.4 界面设计... 366
参考答案. 370
参考文献. 374
第2章 Android开发环境与开发工具
本章主要介绍如何搭建Android的开发环境,Android模拟器的使用以及Android SDK中常用的开发工具。
虽然在使用集成开发环境时,不需要这些工具,但是掌握这些工具的使用方法会对以后的开发起到良好的辅助作用,有助于开发技能的提高。
学习要点
- 掌握JDK的安装和配置。
- 掌握ADT的安装。
- 掌握Android SDK的更新方法。
- 熟悉Android模拟器的使用。
- 熟悉Android、MKsdcard和Emulator工具的使用。
- 了解对Android应用程序进行签名的过程。
- 掌握ADB工具的使用。
- 熟悉DDMS控制台环境。
2.1 配置Android开发环境
第1章曾介绍过Android用Java作为开发语言,因此Java开发环境也是Android开发环境的基础。下面以Windows平台为例介绍Android开发环境的配置过程,依次包括JDK工具包、Eclipse工具、ADT插件和Android SDK工具包。
2.1.1 安装JDK工具包
Eclipse和Android的运行都要依赖于JDK,因此JDK(JavaDevelopment Kits)是第一个需要安装的开发工具包。
【范例1】
JDK的下载网址为http://www.oracle.com/technetwork/java/index.html。下面以Windows XP系为例进行介绍,其具体安装过程如下。
(1) 使用上面的网址进入Oracle官方网站的Java栏目,单击Java Platform(JDK)图标打开新的网页。单击AcceptLicense Agreement单选按钮同意协议,然后单击相应的超链接将文件下载到本地,这里下载的文件是jdk-7u10-windows-i586.exe。
(2) 双击jdk-7u10-windows-i586.exe文件,开始安装JDK 7。首先进入安装对话框,如图2-1所示。
(3) 单击“下一步”按钮进入自定义安装对话框,如图2-2所示。这里会显示开发工具、源代码和公共JRE三个选项,默认全部被选中。
(4) JDK的默认安装路径是C:\Program File\Java,单击“更改”按钮可以更改安装路径,更改完成后单击“下一步”按钮可以继续JDK的安装。直到出现如图2-3所示的对话框,则说明安装成功,单击“关闭”按钮完成安装。
图2-1 JDK安装向导对话框 图2-2 JDK自定义安装对话框
(5) 安装完成后会在C:\Program File\Java\目录下会产生一个名为jdk1.7.0_10的文件夹,文件夹中的内容如图2-4所示。
图2-3 JDK安装完成对话框 图2-4 JDK安装目录
从图2-4中可以看出,JDK的目录下包含很多文件夹和文件,其中重要的目录如下。
l bin目录:提供JDK工具程序,包括javac、javadoc、appletviewer等可执行程序。
l demo目录:为Java使用者提供的一些编写好的范例程序。
l include目录:存放用于本地方法的文件。
l jre目录:存放Java运行环境文件。
l lib目录:存放Java的类库文件。
l src.zip:Java提供的API类的源代码压缩文件,包含API中某些功能的具体实现。
2.1.2 配置环境变量
在Java 7以前的旧版本中,需要配置Classpath和Path两个环境变量。其中Path用于指定JDK工具程序所在的位置;Classpath是Java程序运行所需的环境变量,用于指定运行的Java程序所需的类的加载路径。而在JDK7中只需要Path环境变量即可。配置JDKT中的Path的方法有两种,分别如下。
【范例2】
第一种方法是用命令行设置Path变量。具体方法是打开命令行窗口,输入如下命令。
set path=%path%;C:\Program Files\Java\jdk1.7.0_10\bin
在上述代码中,C:\Program Files\Java\jdk1.7.0_10\bin是JDK的安装目录,读者可以根据自己的安装情况另行设置。设置好Path之后,可在任何目录下执行Java命令,如图2-5所示。
图2-5 使用命令行设置Path
【范例3】
第二种方法是使用图形界面设置Path变量。首先右击“我的电脑”选择“属性”命令,在弹出的对话框中选择“高级”选项卡,如图2-6所示。接着单击下方的“环境变量”按钮,弹出“环境变量”对话框,如图2-7所示。
图2-6 “系统属性”对话框 图2-7 “环境变量”对话框
单击“系统变量”下方的“新建”按钮,弹出“编辑系统变量”对话框,在“变量值”文本框中输入“.;C:\Program Files\Java\jdk1.7.0_10\bin”即可,如图2-8所示。
图2-8 编辑系统变量
2.1.3 安装ADT插件
Eclipse是最受欢迎的Java开发工具,同时也是一个开源平台。Eclipse的插件很多,通过它们可以扩展Eclipse的功能。例如其扩展功能可用于JavaEE语言、C语言和C 语言开发,Android开发等。本节要介绍的ADT(Android DevelopmentTools)其实就是Eclipse中的“Android开发插件”。
目前ADT插件有两种安装方法。第一种是先在http://www.eclipse.org网站下载最新版本的Eclipse工具,下载完成后直接解压即可使用,然后打开Eclipse工具,通过远程来安装ADT插件,当然也可以在本地安装。
第二种是采用Google为开发人员准备的集成ADT插件的Eclipse安装包。安装包下载后直接解压即可使用,无须再安装和配置ADT插件。下面介绍这种方式的安装过程。
【范例4】
在浏览器地址栏中输入“http://developer.android.com/sdk/index.html”,按Enter键,在打开的页面中单击VIEW ALL DOWNLOADS AND SIZES链接,展开下载列表,如图2-9所示。
图2-9 下载页面
在下载页面同时显示了该安装包中包含的组件,例如Eclipse工具、ADT插件、Android SDK工具和Android Platform工具等等。
技巧: 如果无法正常访问上面的网址,建议读者设置代理服务器后再试试。
从下载列表中选择相应平台的安装包,这里选择的是Windows 32bit平台。单击其后的超链接打开下载安装协议页面,选中底部的复选框。最后单击底部的Download adt bundle widnows x86-20140702.zip按钮,开始下载,如图2-10所示。
图2-10 开始下载
在弹出的下载对话框中单击“保存”按钮下载到本地硬盘。解压下载的文件会看到一个eclipse目录、一个sdk目录和一个SDKManager程序,如图2-11所示。
图2-11 解压后的目录内容
进入Eclipse目录,双击eclipse.exe即可启动Android应用程序开发工具——ADT。启动后可将该图标的快捷方式发送至桌面方便以后使用。启用之后在菜单中选择Help|About ADT命令可以查看当前ADT的版本和说明信息,如图2-12所示。
图2-12 About Eclipse窗口
提示: 为了在命令行窗口调用Android SDK提供的各种工具,建议将Android SDK下的tools目录和platform-tools目录添加到系统的Path环境变量中。
2.1.4 实验指导——手动安装ADT插件和汉化Eclipse工具
本次实验指导介绍手动安装ADT插件和汉化Eclipse工具的方法。具体步骤如下。
(1) 从http://www.eclipse.org下载最新版的Eclipse程序。
(2) 解压下载的压缩包,双击其中的eclipse.exe文件运行Eclipse程序
(3) 在Eclipse中选择Help|Install New Software命令,打开安装新插件窗口。
(4) 在窗口中输入“https://dl-ssl.google.com/android/eclipse”,然后从插件列表中展开Developer Tools,选中Android Development Tools复选框来安装ADT插件,如图2-13所示。
(5) 单击Next按钮,开始安装ADT插件。安装完成之后单击Finish按钮关闭窗口。
图2-13 安装ADT插件窗口
(6) Eclipse汉化插件的安装方法也是打开Install窗口,然后输入“http://download.
eclipse.org/technology/babel/update-site/R0.12.0/juno”。
(7) 从插件列表中展开BabelLanguage Packs for eclipse节点,并选中包含Chinese(Simplified)字符的复选框,如图2-14所示。
(8) 单击Next按钮,开始安装汉化插件。安装完成之后单击Finish按钮关闭窗口。如图2-15所示为汉化后的Eclipse程序主窗口。
图2-14 安装汉化插件窗口
图2-15 汉化后的Eclipse窗口
2.2 安装AndroidSDK工具包
Android SDK(SoftwareDevelopment Kit,软件开发包)包含开发、测试和调试Android应用程序需要的所有东西。其中主要部分如下。
1. Android API
SDK的核心是Android API库,它为开发人员提供了对Android栈进行访问的方法。Google也是使用相同的库来开发原生的Android应用程序。
2. 开发工具
为了让Android源代码变成可执行的Android应用程序,SDK提供了多个开发工具供用户编译和调试应用程序时使用。本章后面将详细讲述这些开发工具,在此暂不叙述。
3. Android虚拟设备管理器和模拟器
Android模拟器是一个完全交互式的移动设备模拟器,并有多个皮肤可供选择。模拟器运行在模拟设备硬件配置的Android虚拟设备中。通过使用模拟器,可以了解应用程序在实际的Android设备上的外观和运行情况。所有Android应用程序都运行在Dalvik VM中,所以软件模拟器是一个非常好的开发环境。
4. 完整的文档
SDK中包含大量代码级的参考信息,详细地说明了每个包和类中都包含哪些内容,以及如何使用它们。除了代码文档之外,Android的参考文档和开发指南还解释了如何着手进行开发,尤其详细地解释了Android开发背后的基本原理。此外还强调了最佳开发实践,并深入阐述了关于框架的主题。
5. 示例代码
Android SDK包含一些示例代码集,它们解释了使用Android的某些可能性,以及一些用来强调如何使用每个API功能的简单程序。
【范例5】
安装Android SDK的方法是在如图2-11所示的目录中,运行SDK Manager程序。程序将自动检测当前安装的版本情况,以及是否有更新的SDK版本可供下载。完成检测后进入SDK管理器窗口,如图2-16所示。
图2-16 SDK管理器窗口
提示: 在ADT中也可以选择Window|Android SDK Manager命令打开SDK管理器。
图2-16中罗列了所有Android的SDK版本、Android开发的工具以及扩展包。选中相应版本前面的复选框,或展开节点选择具体的某一项,单击窗口右下角的Install按钮,打开Choose Packages to Install窗口,如图2-17所示。
图2-17 Choose Packages toInstall窗口
在这里可以阅读每个要安装软件包的许可协议,选中Accept License单选按钮,即可批量同意所有协议。然后单击Install按钮,开始安装指定的SDK版本,本书中使用的是Android4.4.2 SDK,即API 19。所有安装包更新完毕之后,单击Done按钮关闭窗口。
在安装的过程中需要从Google服务器上下载AndroidSDK文件,若限于带宽和节点问题无法更新,可打开C:\windows\System32\drivers\etc\hosts文件,在文件最后添加以下内容:
203.208.46.146 www.google.com
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com
2.3 使用Android模拟器
经过上面的步骤,Android开发所需的Java环境、开发工具和SDK都已准备就绪。接下来将介绍如何在本地通过虚拟器AndroidVirtual Device(AVD)模拟Android系统。有了Android模拟器,开发人员不必使用真实物理设备就可以开发、测试Android应用程序。
2.3.1 创建模拟器
除了不能拨打真实电话之外,Android模拟器可以模拟真实设备的所有硬件和软件特性。模拟器提供了多种导航和控制键,开发人员通过单击鼠标或者键盘可以为应用程序生成事件。它还提供了一个屏幕来显示开发的应用程序以及其他正在运行的Android应用。
为了简化模拟和测试应用程序,模拟器使用Android虚拟设备(AVD)配置。AVD允许用户设置模拟手机的特定硬件属性(例如RAM的大小),并且允许用户创建多个配置,以便在不同的Android平台和硬件组合下进行测试。一旦应用程序在模拟器上运行,它可以使用Android平台的服务来启动其他应用、访问网络、播放声音和视频、存储和检索数据、通知用户以及渲染图形渐变和主题。
Android虚拟设备是模拟器的一种配置。开发人员通过定义需要的硬件和软件选项,可使用Android模拟器模拟真实的设备。
一个Android虚拟设备由以下几部分组成。
l 硬件配置:定义虚拟设备的硬件特性。例如,开发人员可以定义该设备是否包含摄像头、是否使用物理键盘和拨号键盘、内存大小等。
l 映射的系统镜像:开发人员可以定义虚拟设备运行的Android平台版本。
l 其他选项:开发人员可以通过指定需要使用的模拟器皮肤,来控制屏幕尺寸、外观等。此外,还可以指定Android虚拟设备使用的SD卡。
l 专用存储区域:用于存储当前设备的用户数据(安装的应用程序、设置等)和模拟SD卡。
【范例6】
创建一个模拟器的步骤如下。
(1) 从ADT启动Eclipse,执行Window|AndroidVirtual Device Manager命令打开模拟器管理窗口。
(2) 在图2-18所示的Android Virtual Devices选项卡下显示了可用的所有模拟器。当前界面为空是因为还没有创建模拟器。
(3) 单击Create按钮,在弹出的对话框中设置模拟器的名称、设备类型、模拟器采用的SDK版本、键盘类型、设备皮肤、是否使用摄像头、内存大小及SD卡的大小等,如图2-19所示。
图2-18 模拟器管理窗口 图2-19 新建模拟器对话框
(4) 设置完成后单击OK按钮,关闭该对话框。此时新建的模拟器名称将出现在图2-18所示的窗口列表中。
切换到图2-18所示的DeviceDefinitions选项卡,可以看到默认提供的Android设备类型,如图2-20所示。单击Create Device按钮,可在图2-21所示的对话框中新建一个Android设备。
图2-20 可用Android设备列表 图2-21 新建Android设备对话框
2.3.2 启动模拟器
要启动Android模拟器,最简单的方式是使用AVD管理工具,也可以使用Emulator工具(本章第2.5节有介绍)。本节将使用AVD管理工具,启动在上一节中创建的名为avd4.4的模拟器,具体操作方法如下。
【范例7】
启动模拟器的操作如下。
(1) 打开AVD管理器,从列表中选择名称为avd4.4的模拟器,然后单击Start按钮,打开启动选项对话框,如图2-22所示。
(2) 单击Launch按钮确认运行,之后会弹出如图2-23所示的模拟器加载进度对话框。
图2-22 启动模拟器对话框 图2-23 加载模拟器对话框
(3) 待模拟器加载完成之后会弹出一个显示有模拟器名称的窗口。稍待片刻,如果看到如图2-24所示的欢迎界面,则说明Android系统启动成功。
图2-24 模拟器欢迎界面
(4) 根据屏幕提示进行解锁,即可进入Android模拟器的操作界面,其右侧为一些物理按键。
提示: 如果需要停止模拟器,只需将模拟器窗口关闭即可。
2.3.3 控制模拟器
当模拟器运行时,用户可以像使用真实的移动设备那样使用模拟移动设备。所不同的是,模拟器的使用需要用鼠标来“触摸”触摸屏,用键盘来“按下”按键。
模拟器按键与键盘按键的对应关系如表2-1所示。
表2-1 模拟器按键与键盘按键映射
模拟器按键 | 键盘按键 |
Home | Home键 |
Menu | Page Up键或F2键 |
Start | Page Down键或Shift F2键 |
Back | Esc键 |
电话拨号 | F3键 |
电话挂断 | F4键 |
查询 | F5键 |
锁屏幕 | F7键 |
续表
模拟器按键 | 键盘按键 |
音量放大 | 键(台式机数字键盘)或Ctrl F5键(笔记本) |
音量缩小 | -键(台式机数字键盘)或Ctrl F6键(笔记本) |
全屏幕切换 | Alt Enter键 |
轨道球模式 | F6键 |
横竖屏切换 | 7键(台式机数字键盘)或Ctrl F11键(笔记本) 9键(台式机数字键盘)或Ctrl F12键(笔记本) |
在运行游戏时,可将Android模拟器切换到横屏模式,其显示效果如图2-25所示。
图2-25 横屏显示的模拟器
2.3.4 使用模拟器控制台
每个运行中的模拟器实例都含有一个控制台,通过控制台可以查询和控制模拟器设备的运行环境。连接到模拟器实例控制台的命令如下:
telnet localhost <port>
例如,第一个模拟器实例的控制台如果使用的端口是5554,那么用户连接到模拟器5554上的命令就要写为
telnet localhost 5554
连接上控制台后,用户可以输入“help [command]”来查看命令列表和某一命令的帮助文档。离开控制台时使用quit和exit命令即可。
下面介绍一些常用的控制台命令。
1.端口重定向命令
使用以下命令可以在模拟器运行期间重看、添加或删除重定向。
(1) redir<list>
说明:redir list列出了当前的重定向,其最小值为150,最大值为550。
(2) rediradd <protocol> : <host-port> : <guest-port>
说明:此命令用于添加新的端口重定向。 <protocol>必须是TCP或UDP,<host-port>是主机上打开的端口号,<guest-port>是向模拟器/设备发送数据的端口号。
(3) redirdel<protocol> : <host-port>
说明:此命令用于删除端口重定向,<protocol>和<host-port>的含义同上。
2.网络状况查询命令
使用以下命令可以检测模拟器运行的网络状态。
network status
执行后的输出结果类似如下:
Current network status:
download speed: 0 bits/s (0.0 KB/s)
upload speed: 0 bits/s (0.0 KB/s)
minimum latency: 0 ms
maximum latency: 0 ms
3.电话功能模拟命令
与电话相关的是gsm命令,该命令有以下3种格式。
(1) gsmcall <phonenumber>
说明:该命令用于模拟来自电话号码为<phonenumber>的呼叫。
(2) gsmvoice <state>
说明:该命令用于修改GPRS语音连接的状态为<state>。State的可选值有:unregistered为无可用网络;home为处于本地网,无漫游;roaming为处于漫游网;searching为查找网络;denied为仅能用紧急呼叫;off同unregistered;on同home。
(3) gsmdata <state>
说明:该命令用于修改GPRS数据连接的状态为<state>,可选值与Voice相同,此处不再介绍。
2.4 Android工具
在Android SDK中提供了一个名为Android的工具,该工具可用来查看Android的版本信息,以及创建、删除和查看AVD设备。
2.4.1 查看Android版本的ID信息
为了对Android程序进行全面的测试,在开发时用户通常会安装多个Android版本。每个Android版本都有一个唯一的ID标识。
【范例8】
要查看所有Android版本的ID信息,可使用如下命令:
android list targets
执行后将看到每个Android版本的ID信息、API版本、名称、类型和适用屏幕等,如图2-26所示。
图2-26 查看Android版本的ID信息
2.4.2 创建AVD设备
AVD表示一种Android设备的配置信息,例如一个AVD可以表示一个运行2.0版本SDK,且使用512MB作为SD卡的Android设备。AVD的使用理念是,首先创建将要支持的AVD,然后在开发和测试应用程序时,将模拟器指向其中一个AVD。
默认情况下,所有的AVD都存储在HOME\.android\AVD目录中。要创建一个AVD设备可以使用android命令的create avd选项,其语法格式如下:
android create avd <option>
其中,option参数有如下几个选项。
l -t:新AVD设备的ID,可通过android list targets查看,必选项。
l -c:指向一个共享SD卡的路径或者指定一个新的SD卡。
l -p:指定AVD设备的存储路径。
l -n:指定AVD设备的名称,必选项。
l -f:此选项表示覆盖已存在的同名AVD。
l -s:指定AVD设备使用的皮肤。
【范例9】
创建一个名为testAvd的AVD设备,要求SD卡容量为1024MB,并将其保存在G:\AVD目录下。其实现语句如下:
android create avd -n testAvd -t 1 -c 1024M -p G:\AVD\
语句中-t后面的1表示使用的是列表中编号为1的Android版本。执行该语句后会看到输出的信息,如图2-27所示。
图2-27 创建AVD设备
2.4.3 删除AVD设备
删除AVD设备的语法如下:
android delete avd -n <avd_name>
其中avd_name表示要删除的AVD设备的名称。
【范例10】
在删除之前可以先运行如下命令,查看当前所有的AVD设备信息,包含名称、存储路径、SD卡容量以及使用的皮肤等。
android list avds
如图2-28所示为运行结果,从中可以看出当前所包含的AVD设备有avd 4.4、myAvd、testAvd。
图2-28 查看所有AVD设备
【范例11】
假设要删除名为testAvd的AVD设备,可用以下语句:
android delete avd -n testAvd
执行该语句后再次使用android list avds命令,即可看到testAvd没有出现在列表中,如图2-29所示。
图2-29 删除AVD设备
2.5 Emulator工具
Emulator是一款命令行的模拟器管理工具,它可以控制模拟器实例的所有参数,例如是否允许使用视/音频、接收数据、使用调试和屏幕信息等。
Emulator的语法格式如下:
emulator [option] [-qemu args]
其中,option表示选项,args是选项的具体参数。
Emulator为Android模拟器工具提供了很多启动选项,可以在启动模拟器时指定,控制其外观和行为。下面从六个方面介绍Emulator工具的命令格式。
1.数据命令选项
数据命令选项主要有四个,下面分别介绍。
(1) emulator-data <file>
说明:使用<file>当作用户数据的磁盘镜像,如果没有-data,模拟器会在~/.android
(Linux/Mac)或c:\Documentsand Settings\<user>\Local Settings\Android(Windows)中查找文件名为userdata.img的文件。如果使用了-data<file>但<file>不存在,模拟器会创建一个文件。
(2) emulator-ramdisk <file>
说明:使用<file>作为RAM镜像,默认值为<system>/ramdisk.img。
(3) emulator-sdcard<file>
说明:使用<file>作为SD卡镜像,默认值为<system>/sdcard.img。
(4) emulator-wipe-data
说明:启动前清除用户磁盘镜像中的所有数据。
2.调试命令选项
调试命令选项主要有五个,下面分别介绍。
(1) emulator-console
说明:允许当前中断使用控制台。
(2) emulator-debug-kernel
说明:将内核输出发送到控制台。
(3) emulator-logcat <logtags>
说明:允许根据给定的标签为输出分类。如果定义了环境变量ANDROID_LOG_TAGS,并且不为空,那么它的值将被作为logcat的默认值。
(4) emulator-trace <name>
说明:允许代码剖析(按F9键开始)。
(5) emulator-verbose
说明:允许详细信息输出。
3.媒体命令选项
媒体命令选项主要有四个,下面分别介绍。
(1) emulator-mic <device or file>
说明:使用设备或者WAV文件作为音频输出。
(2) emulator-noaudio
说明:禁用Android的音频支持,默认禁用。
(3) emulator-radio <device>
说明:将无线调制解调器接口重定向到主机特征设备。
(4) emulator-useaudio
说明:启用Android音频支持,默认不启用。
4.网络命令选项
网络命令选项主要有两个,分别是-netdelay和-netspeed。
(1) emulator-netdelay <delay>
说明:设置网络延迟模拟的延迟时间为<delay>,默认值是none。具体参数说明如下。
l gprs:min 150, max550。
l edge:min 80, max400。
l umts:min35, max200。
l none:无延迟。
l <num>:模拟一个准确的延迟(毫秒)。
l <min>:<max>:模拟一个指定的延迟范围(毫秒)。
(2) emulator-netspeed <speed>
说明:设置网速模拟的加速值为<speed>,默认值为full。具体参数说明如下。
l gsm:up : 14.4,down 14.4。
l hscsd:up : 14.4,down : 43.2。
l gprs:up : 40.0,down : 80.0。
l edge:up :118.4,down : 236.8。
l umts:up : 128.0,down : 1920.0。
l hsdpa:up : 348.0,down : 14400.0。
l full:无限。
l <num>:设置一个上行和下行公用的准确速度。
l <up> : <down>:分别为上行和下行设置准确的速度。
5.系统命令选项
系统命令选项主要有五个,下面分别介绍。
(1) emulator-image <file>
说明:使用<file>作为系统镜像。
(2) emulator-kernel <file>
说明:使用<file>作为模拟器内核。
(3) emulator-qemu
说明:传递qemu参数。
(4) emulator-qemu -h
说明:显示qemu帮助信息。
(5) emulator-system <dir>
说明:在<dir>目录下查找系统、RAM和用户数据镜像。
6.界面命令选项
界面命令选项主要有六个,下面分别介绍。
(1) emulator-flashkeys
说明:在设备皮肤上闪烁按下的键。
(2) emulator-noskin
说明:不使用任何模拟器皮肤。
(3) emulator-onion <image>
说明:在屏幕上使用覆盖图,不支持JPEG格式图片,仅支持PNG格式。
(4) emulator-onion-alpha <percent>
说明:指定onion皮肤的半透明值,默认值为50,单位为%。
(5) emulator-skin <skinID>
说明:指定皮肤启动模拟器,SDK提供了以下四个可选皮肤。
l QVGA-L(320*240,风景)默认。
l QVGA-P(240*320,肖像)。
l HVGA-L(480*320,风景)。
l HVGA-P(320*480,肖像)。
(6) emulator-skindir <dir>
说明:在<dir>目录下查找皮肤。
2.6 实验指导——管理SD卡
在Android模拟器实例上测试程序时经常需要使用SD卡。为此AndroidSDK提供了SD卡创建工具——Mksdcard,它位于Tools目录中。
Mksdcard工具的语法格式如下:
mksdcard [-l label] <size> <file>
语法中各个参数的含义如下:
l -l:指定SD卡的卷标,可选参数。
l size:指定SD卡的容量大小,默认单位是bytes,也可以使用K或者M作为单位。
l file:指定SD卡镜像文件的路径。
【范例12】
创建一个卷标为myCard,大小为100MB的SD卡,将文件保存为D:\data\myCard.img。其语句如下:
mksdcard -l myCard 100MB d:\data\myCard.img
该语句执行成功后没有输出结果。此时打开D:\data会看到myCard.img镜像文件,如图2-30所示。
如果要管理myCard里面的内容,可通过以下步骤实现。
(1) 使用AVD Manager或者Emulator工具加载myCard的镜像文件myCard.img。Emulator工具的加载命令如下:
emulator -sdcard D:\data\myCard.img
(2) 使用ADB push上传文件或者目录,也可以使用ADT的File Explorer工具管理。
图2-30 创建SD卡镜像文件
2.7 Keytool工具和Jarsigner工具
要使编写的Android应用程序能在真实的Android设备上运行,必须对Android应用程序的APK文件进行签名。APK是Android Package的缩写,它可以直接在Android系统上运行,类似Windows系统下的EXE文件。
Android SDK提供了两个命令行工具对APK文件进行签名:keytool.exe和jarsigner.exe。其中Keytool用于生成一个Android程序使用的密钥文件(Private Key);Jarsigner则根据该密钥文件对Android程序进行打包并设置签名。
Keytool工具的语法如下:
keytool -genkey -v -keystore androidguy-release.keystore-alias androidguy -keyalg RSA -validity 3000
其中,各个参数的说明如下。
l androidguy-realse.keystore:表示要生成的密钥文件名,可以是任意合法的文件名。
l androidguy:表示密钥的别名,在签名时会用到。
l RSA:表示密钥使用的算法。
l 3000:表示签名的有效时间,以“天”为单位。
进入命令行按照上述格式执行Keytool命令时,会要求用户输入一系列与密钥有关的信息,如图2-31所示。
在输入完密钥信息后,按回车键会自动创建指定的密钥文件,并设置签名信息。运行成功后会出现图2-32所示界面,提示已经创建密钥文件到当前目录中。
假设要对C:\MyApp.apk文件进行签名,则使用Jarsigner命令的语法格式如下:
jarsigner -verbose -keystoreandroidguy-release.keystore C:\MyApp.apk androidguy
图2-31 输入密钥信息 图2-32 生成密钥文件
上述命令将指定的密钥文件androidguy-release.keystore对Android程序的APK文件MyApp.apk进行签名,执行后还需要输入密钥的密码,执行成功后的输出如图2-33所示。经过签名后的APK文件占用的内存会比原始文件大。
图2-33 对APK进行签名
2.8 实验指导——使用ADT签名程序
在使用命令对APK文件进行签名时,通常需要熟记各个命令参数,比较麻烦。为此ADT工具提供了一个图形化向导进行签名。向导的打开方法是:在ADT中右击项目名称,在弹出的菜单中选择Android Tools|Export Signed Application Package命令,具体操作步骤如下。
(1) 在打开的窗口中输入或选择要签名的项目名称,如图2-34所示。
(2) 单击“下一步”按钮,在打开的Keystore selection界面中选择Create new keystore选项创建一个新的密钥文件,并指定密钥文件的名称和输入密码,如图2-35所示。
(3) 单击“下一步”按钮,在进入的界面中输入密钥和签名信息,如图2-36所示。
(4) 单击“下一步”按钮,指定生成后APK文件的名称和位置,如图2-37所示。
(5) 单击“完成”按钮完成设置。打开目标位置,会看到除了生成的APK文件之外,还包括一个密钥文件。该密钥文件在给以后的程序签名时仍然可以继续使用。
图2-34 选择项目 图2-35 指定密钥文件和密码
图2-36 指定密钥和签名信息 图2-37 指定要生成的APK文件
2.9 ADB工具
ADB(Android Debug Bridge)实际上是一个“客户端—服务器端”程序,默认情况下它会监听TCP 5554端口,让客户端与服务器端通信。其中,客户端就是用来操作的计算机,服务器端是目标设备,例如Android设备、实体手机或虚拟机。
ADB是Android SDK中最常用的调试工具之一,下面详细介绍该工具的具体应用情况。
2.9.1 查看ADB版本
ADB工具位于Android SDK的platform-tools目录下,它的主要功能如下。
(1) 运行设备的shell命令行。
(2) 管理模拟或设备的端口映射。
(3) 在计算机与设备之间上传和下载文件。
(4) 将本地APK软件安装到模拟器或设备上,使应用或者系统升级。
【范例13】
假设要查看ADB的版本,则可运行以下命令:
adb version
执行后的结果如图2-38所示,从中可以看到当前版本为1.0.31。
图2-38 查看ADB版本
2.9.2 查看设备信息
ADB启动时首先会在服务器开启5554~5585端口,等待客户端Android设备或者模拟器的接入。
【范例14】
要查看当前所有设备的信息可以使用以下命令:
adb devices
该命令返回的结果为Android设备或模拟器的序列号及其状态,运行效果如图2-39所示。
图2-39 查看设备信息
从输出结果中可以看出,当前ADB监听了两个端口的设备,它们的序列号分别是CoolPad8190和emulator-5554。其中,前者是一台真实的Android设备,后者是模拟器实例(5554表示ADB为该实例分配的端口号)。返回结果的第二列表示当前设备的状态,它有如下两个值。
l offline:设备没有连接到ADB或者实例没有响应。
l device:设备已经连接到ADB,并处于在线状态。
注意: device状态并不表示当前Android设备可用。因为当Android设备处于启动阶段时,若连接成功也会返回该状态。
2.9.3 管理软件
在使用ADB连接到Android设备之后便可以进行各种操作了。最常见的操作是在Android设备中安装新的软件,或者卸载已有的软件。在这里需要注意的是,Android设备中的软件都以.apk为扩展名。
1.安装软件
ADB安装软件的语法格式如下:
adb install <apk 文件路径>
命令执行后会将指定的apk文件安装到设备上。如果在install后面添加了-r选项,则表示重新(覆盖)安装此软件。
【范例15】
假设要安装d:\apk\popogame.apk软件包,安装命令如下。
adb install d:\apk\popogame.apk
命令执行后如果在窗口中出现Success字样,则说明安装成功,如图2-40所示。如图2-41所示为软件安装后,打开的运行效果。
图2-40 安装软件成功窗口 图2-41 Popogame软件运行效果
假设该软件出现问题无法正常打开,则可以用如下命令进行修复安装。
adb install -r d:\apk\popogame.apk
2.卸载软件
如果不需要该软件了,还可以使用ADB命令卸载,语法格式如下:
adb uninstall <软件名>
上述命令执行后将卸载指定的软件。卸载时需要指定完整的软件包名称,而不是安装包的名称,但软件包不需要写扩展名。如果在uninstall后面添加-k选项,则表示卸载软件时保留原配置和缓存文件。
【范例16】
假设安装完popogame.apk包后的应用程序包有误,其名称是com.android.popogame。若此时需要卸载该应用程序,则其卸载命令如下:
adb uninstall com.android.popogame
如果使用如下命令,则在删除该应用程序包时还可以保留原配置和缓存文件。
adb uninstall -k com.android.popogame
提示: 使用ADB工具进入Shell命令状态可以卸载软件。
【范例17】
如果当前ADB有多个Android设备或者模拟器实例,那么就需要使用-s选项指定目标设备的序列号。
设备序列号可通过adb devices命令获取。例如,要在emulator-5554实例上安装软件,则其命令如下:
adb -s emulator-5554 install -r d:\apk\popogame.apk
若要在emulator-5554实例上卸载软件,则其命令如下:
adb -s emulator-5554 uninstall com.android.popogame
2.9.4 移动文件
既然ADB工具在本机与Android设备之间建立了连接,那么就可以使用该工具在两者之间传输文件。例如,上传一个本地软件包到Android设备,或者从Android设备下载一个配置文件。
1.上传文件
使用push命令可以把本地硬盘上的文件或者目录上传(复制)到远程的目标设备(模拟器实例)。其语法格式如下:
adb push <本地路径> <远程路径>
【范例18】
假设将d:\apk\popogame.apk复制到Android设备的data目录中。其命令如下:
adb push d:\apk\popogame.apk /data/
执行结果如图2-42所示。
注意: 本地硬盘上的路径符号是\,而设备/模拟器上的路径符号则是/,两个路径符号所使用的斜杠的方向不同。
2.下载文件
使用pull命令可以将远程文件下载(复制)到本地硬盘上,其语法格式如下:
adb pull <远程路径> <本地路径>
【范例:19】
假设将Android设备中data目录下的popogame.apk文件复制到C盘根目录,命令如下。
adb pull /data/ popogame.apk c:\
执行结果如图2-43所示。
图2-42 上传文件 图2-43 下载文件
提示: 在ADT的DDMS透视图中可以很方便地使用File Explorer来管理文件。
2.9.5 执行Shell命令
由于Android是基于Linux内核的操作系统,因此在Android上可以执行Shell命令。具体方法是执行如下命令进入Shell命令状态:
adb shell
上述命令执行后,如果窗口显示一个#符号,则说明当前是Shell控制台,可以执行各种Shell命令。例如执行ls命令查看所有的系统文件,执行结果如图2-44所示。
图2-44 执行ls命令窗口
注意: 如果没有Android系统的root权限,Shell控制台的提示符将是一个$符号,而不是#符号。此时若想退出Shell控制台,则输入“exit”命令即可。
【范例20】
在Shell控制台可以查看Android系统和设备的全部参数信息,如硬件信息、ROM版本信息以及系统信息等。具体方法是在Shell提示符下执行getprop命令,执行结果如图2-45所示。
【范例21】
如果只想执行一条Shell命令,则可以使用如下语法格式:
adb shell <shell_command>
例如,执行adb shell dmesg语句可以查看Android内核的调试信息,执行结果如图2-46所示。
图2-45 执行getprop命令后的效果图
图2-46 查看调试信息窗口
执行pm命令可以在Shell中删除软件,例如删除com.android.popogame的命令如下:
adb shell pm uninstall com.android.popogame
2.9.6 查看Bug报告
在命令提示符中输入“adb bugreport”可以显示当前Android系统的运行状态,例如内存状态、CPU状态、内核输出信息、调试信息以及错误信息等。由于该命令返回的输出结果有很多,图2-47中仅显示了部分信息。
图2-47 查看bug报告