出版日期:2011年11月
ISBN:9787115266026
[十位:7115266026]
页数:907
定价:¥128.00
店铺售价:¥35.80
(为您节省:¥92.20)
店铺库存:1
本
正在处理购买信息,请稍候……
我要买:
本
* 如何购买
联系店主:
18230226648
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2024-12-25 20:58:37]
陈**
桂林市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2024-12-17 20:03:32]
宫*
铁岭市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2024-12-16 17:05:51]
管**
南通市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2024-12-16 10:17:55]
陈**
天津市
-
100分
满分
确认收货后30天未评价,系统默认好评!
[2024-12-13 22:56:15]
范**
金华市
《精通Android 3》内容提要:
《精通Android 3》在上一版的基础上进行了全面改进,增加了Android内部构件的相关知识,介绍了线程、进程、长期运行的服务、广播接收程序和闹钟管理器。本版还介绍了更多UI控件,并用150多页的篇幅专门介绍了Android3.0版,包括碎片、碎片对话框、ActionBar和拖放。此外,《精通Android 3》对服务和传感器的相关章节做了大幅改进,还对介绍OpenGL的章节做了修订,涵盖了OpenGLES2.0。.《精通Android 3》囊括了Android开发人员所需的一切知识,既可为Android开发人员夯实基础,又能提高Android开发人员的技能。
《精通Android 3》图书目录:
第1章 Android计算平台简介1
1.1 面向新PC的全新平台1
1.2 Android的历史3
1.3 DalvikVM剖析4
1.4 理解Android软件栈5
1.5 使用AndroidSDK开发*终用户应用程序6
1.5.1 Android模拟器6
1.5.2 AndroidUI7
1.5.3 Android基础组件7
1.5.4 **UI概念8
1.5.5 AndroidService组件10
1.5.6 Android媒体和电话组件10
1.5.7 AndroidJava包11
1.6 利用Android源代码13
1.7 本书的示例项目14
1.8 小结15
第2章 设置开发环境16
2.1 设置环境16
2.1.1 下载JDK616
2.1.2 下载Eclipse3.6 17
2.1.3 下载AndroidSDK18
2.1.4 命令行窗口19
2.1.5 安装ADT19
2.2 了解基本组件21
2.2.1 View21
2.2.2 Activity21
2.2.3 Intent22
2.2.4 ContentProvider22
2.2.5 Service22
2.2.6 AndroidManifest.xml22
2.2.7 AVD22
2.3 Hello World!23
2.4 AVD27
2.5 剖析Android应用程序的结构28
2.6 分析Notepad应用程序30
2.6.1 加载和运行Notepad应用程序30
2.6.2 分解应用程序31
2.7 了解应用程序生命周期37
2.8 调试应用程序40
2.8.1 启动模拟器41
2.8.2 StrictMode42
2.8.3 参考资料46
2.9 小结46
第3章 使用Android资源47
3.1 资源47
3.1.1 字符串资源47
3.1.2 布局资源49
3.1.3 资源引用语法51
3.1.4 定义资源ID供以后使用52
3.1.5 已编译和未编译的Android资源52
3.2 Android关键资源53
3.3 使用任意XML资源文件61
3.4 使用原始资源62
3.5 使用资产63
3.6 了解资源目录结构63
3.7 资源和配置更改64
3.8 参考资料URL67
3.9 小结67
第4章 ContentProvider68
4.1 探索Android内置的ContentProvider69
4.2 Content Provider的架构73
4.3 实现ContentProvider84
4.4 练习图书提供程序94
4.4.1 添加图书94
4.4.2 删除图书94
4.4.3 获取图书数量95
4.4.4 显示图书列表95
4.5 资源96
4.6 小结96
第5章 Intent97
5.1 Android Intent基础知识97
5.2 Android中可用的Intent98
5.3 Intent的组成100
5.3.1 Intent和数据URI100
5.3.2 一般操作101
5.3.3 使用extra信息102
5.3.4 使用组件直接调用活动103
5.3.5 Intent类别104
5.3.6 将Intent解析为组件的规则106
5.4 练习使用ACTION_PICK108
5.5 练习使用GET_CONTENT操作110
5.6 挂起的Intent111
5.7 资源112
5.8 小结113
第6章 构建用户界面和使用控件114
6.1 Android中的UI开发114
6.1.1 完全利用代码来构建UI115
6.1.2 完全使用XML构建UI117
6.1.3 使用XML结合代码构建UI118
6.2 Android中的常见控件120
6.2.1 文本控件120
6.2.2 按钮控件123
6.2.3 Image View控件131
6.2.4 日期和时间控件132
6.2.5 Map View控件134
6.3 适配器134
6.3.1 SimpleCursorAdapter135
6.3.2 了解ArrayAdapter136
6.4 结合使用适配器和AdapterView138
6.4.1 基本的列表控件:ListView138
6.4.2 Grid View控件145
6.4.3 Spinner控件146
6.4.4 Gallery控件148
6.4.5 创建自定义适配器148
6.4.6 Android中的其他控件153
6.5 样式和主题154
6.5.1 使用样式154
6.5.2 使用主题156
6.6 布局管理器157
6.6.1 Linear Layout布局管理器157
6.6.2 Table Layout布局管理器160
6.6.3 Relative Layout布局管理器163
6.6.4 Frame Layout布局管理器165
6.6.5 为各种设备配置自定义布局167
6.7 使用Hierarchy Viewer调试和优化布局168
6.8 参考资料171
6.9 小结171
第7章 使用菜单172
7.1 Android菜单172
7.1.1 创建菜单173
7.1.2 使用菜单组174
7.2 响应菜单项175
7.3 创建测试工具来测试菜单176
7.4 使用其他菜单类型182
7.4.1 展开的菜单182
7.4.2 使用图标菜单182
7.4.3 使用子菜单183
7.4.4 配置系统菜单183
7.4.5 使用上下文菜单184
7.4.6 使用交替菜单186
7.4.7 使用菜单响应数据变化189
7.5 通过XML文件加载菜单189
7.5.1 XML菜单资源文件的结构189
7.5.2 填充XML菜单资源文件190
7.5.3 响应基于XML的菜单项190
7.5.4 其他XML菜单标记简介191
7.6 资源192
7.7 小结192
第8章 使用对话框193
8.1 使用Android中的对话框193
8.1.1 设计提醒对话框193
8.1.2 设计提示对话框195
8.1.3 Android对话框的特性199
8.1.4 重新设计提示对话框200
8.2 使用托管对话框200
8.2.1 理解托管对话框协议201
8.2.2 将非托管对话框重新转换为托管对话框201
8.2.3 简化托管对话框协议202
8.3 使用Toast209
8.4 资源210
8.5 小结210
第9章 管理和组织**项211
9.1 探索**项框架211
9.1.1 List Preference211
9.1.2 Check BoxPreference219
9.1.3 EditText Preference220
9.1.4 Ringtone Preference222
9.2 组织**项223
9.3 以编程方式操作**项226
9.4 使用**项保存状态226
9.5 参考资料227
9.6 小结228
第10章 探索**性和权限229
10.1 理解Android**性模型229
10.1.1 **性概念概述229
10.1.2 为部署签名应用程序230
10.2 执行运行时**性检查234
10.2.1 进程边界上的**性235
10.2.2 声明和使用权限235
10.2.3 理解和使用自定义权限237
10.2.4 理解和使用URI权限241
10.3 参考资料243
10.4 小结243
第11章 构建和使用服务244
11.1 使用HTTP服务244
11.1.1 将Http Client用于HTTPGET请求244
11.1.2 将Http Client用于HTTPPOST请求(多部分POST请求示例)246
11.1.3 SOAP、JSON和XML分析程序248
11.1.4 处理异常249
11.1.5 解决多线程问题251
11.1.6 有趣的超时253
11.1.7 使用HttpURLConnection254
11.1.8 使用AndroidHttpClient254
11.1.9 使用后台线程(Async Task)255
11.1.1 0使用Async Task处理配置更改260
11.1.1 1使用Download Manager获取文件265
11.2 使用Android服务270
11.2.1 Android中的服务270
11.2.2 本地服务271
11.2.3 AIDL服务277
11.2.4 在AIDL中定义服务接口278
11.2.5 实现AIDL接口280
11.2.6 从客户端应用程序调用服务282
11.2.7 向服务传递复杂的类型285
11.3 使用服务的真实示例294
11.3.1 Google翻译API294
11.3.2 使用Google翻译API295
11.4 参考资料303
11.5 小结303
第12章 包304
12.1 包和进程304
12.1.1 包规范的细节304
12.1.2 将包名称转换为进程名称304
12.1.3 列出安装的包305
12.1.4 通过包浏览器删除包305
12.2 包签名过程回顾306
12.2.1 理解数字签名:场景1306
12.2.2 理解数字签名:场景2306
12.2.3 一种理解数字签名的模式307
12.2.4 数字签名执行方式307
12.2.5 签名过程的影响307
12.3 在包之间共享数据308
12.3.1 共享用户ID的性质308
12.3.2 共享数据的代码模式309
12.4 库项目309
12.4.1 库项目的概念310
12.4.2 库项目的性质310
12.4.3 创建库项目312
12.4.4 创建使用库的Android项目314
12.5 参考资料320
12.6 小结320
第13章 处理程序321
13.1 Android组件和线程321
13.1.1 活动在主线程上运行322
13.1.2 广播接收程序在主线程上运行322
13.1.3 服务在主线程上运行322
13.1.4 Content Provider在主线程上运行322
13.1.5 单一主线程的影响323
13.1.6 线程池、Content Provider、外部服务组件323
13.1.7 线程实用程序:发现线程323
13.2 处理程序324
13.2.1 持有主线程的影响325
13.2.2 使用处理程序延迟主线程上的工作325
13.2.3 延迟工作的处理程序源代码示例327
13.2.4 构造合适的Message对象327
13.2.5 将Message对象发送给队列328
13.2.6 响应handle Message回调328
13.3 使用工作线程328
13.3.1 从菜单调用工作线程329
13.3.2 在工作线程与主线程之间通信330
13.3.3 线程行为概述332
13.4 处理程序示例驱动程序类332
13.4.1 驱动程序活动文件333
13.4.2 布局文件336
13.4.3 菜单文件336
13.4.4 描述文件336
13.5 组件和进程寿命337
13.5.1 活动生命周期337
13.5.2 服务生命周期338
13.5.3 接收程序生命周期338
13.5.4 提供程序生命周期339
13.6 代码编译说明339
13.6.1 从ZIP文件创建项目339
13.6.2 从代码清单创建项目340
13.7 参考资料340
13.8 小结341
第14章 广播接收程序和长期运行的服务342
14.1 广播接收程序342
14.1.1 发送广播342
14.1.2 编写简单的接收程序:示例代码343
14.1.3 在描述文件中注册接收程序344
14.1.4 发送测试广播344
14.1.5 容纳多个接收程序348
14.1.6 进程外接收程序项目349
14.2 从接收程序使用通知350
14.2.1 通过通知管理器监控通知350
14.2.2 发送通知352
14.3 长期运行的接收程序和服务354
14.3.1 长期运行的广播接收程序协议355
14.3.2 Intent Service356
14.3.3 Intent Service源代码356
14.4 为广播接收程序扩展IntentService358
14.4.1 长期运行的广播服务抽象358
14.4.2 长期运行的接收程序360
14.4.3 使用Lighted Green Room抽象唤醒锁362
14.5 长期运行的服务的实现367
14.5.1 非粘滞性服务的细节368
14.5.2 粘滞性服务的细节368
14.5.3 非粘滞性的变体:重传送(redeliver)Intent368
14.5.4 在on Start Command中指定服务标志369
14.5.5 挑选合适的粘滞性369
14.5.6 从两个位置控制唤醒锁369
14.5.7 长期运行的服务的实现369
14.5.8 测试长期运行的服务371
14.6 代码编译说明372
14.6.1 从ZIP文件创建项目372
14.6.2 通过代码清单创建项目372
14.7 参考资料374
14.8 小结374
第15章 闹钟管理器375
15.1 闹钟管理器基本知识:设置一个简单的闹钟375
15.1.1 获取闹钟管理器375
15.1.2 设置闹钟时间375
15.1.3 设置闹钟接收程序376
15.1.4 创建适合闹钟的Pending Intent377
15.1.5 设置闹钟377
15.1.6 测试项目378
15.2 探索其他闹钟管理器场景384
15.2.1 设置重复闹钟384
15.2.2 取消闹钟386
15.2.3 使用多个闹钟388
15.2.4 Intent在设置闹钟时的首要职责391
15.2.5 闹钟的持久化394
15.3 闹钟管理器事实394
15.4 参考资料394
15.5 小结395
第16章 2D动画揭秘396
16.1 逐帧动画396
16.1.1 计划逐帧动画396
16.1.2 创建活动398
16.1.3 将动画添加到活动399
16.2 布局动画401
16.2.1 基本的补间动画类型402
16.2.2 计划布局动画测试工具402
16.2.3 创建活动和List View403
16.2.4 将List View制作成动画405
16.2.5 使用插值器408
16.3 视图动画409
16.3.1 理解视图动画409
16.3.2 添加动画412
16.3.3 使用Camera实现2D图像的深度效果415
16.3.4 探索Animation Listener类416
16.3.5 关于变换矩阵的一些说明416
16.4 资源417
16.5 小结418
第17章 地图和基于位置的服务419
17.1 地图包419
17.1.1 从Google获取map-api密钥419
17.1.2 Map View和Map Activity421
17.1.3 使用覆盖图添加标记426
17.2 位置包431
17.2.1 使用Android进行地理编码431
17.2.2 使用后台线程进行地理编码434
17.2.3 Location Manager服务437
17.2.4 使用My Location Overlay显示位置443
17.2.5 使用接近提醒447
17.3 参考资料451
17.4 小结451
第18章 电话API452
18.1 使用SMS452
18.1.1 发送SMS消息452
18.1.2 监视传入的SMS消息455
18.1.3 使用SMS文件夹457
18.1.4 发送电子邮件459
18.2 使用电话管理器459
18.3 SIP462
18.4 参考资料464
18.5 小结464
第19章 媒体框架465
19.1 使用媒体API465
19.2 播放媒体468
19.2.1 播放音频内容469
19.2.2 播放视频内容478
19.3 录制媒体481
19.3.1 使用Media Recorder录制音频481
19.3.2 使用Audio Record录制音频485
19.3.3 视频录制489
19.3.4 Media Store类497
19.3.5 使用Intnet录制音频498
19.3.6 将媒体内容添加到媒体存储501
19.3.7 为整个SD卡触发MediaScanner503
19.3.8 参考资料503
19.4 小结503
第20章 使用OpenGL进行3D图形编程504
20.1 了解OpenGL的历史和背景505
20.1.1 OpenGLES505
20.1.2 Open GLES与JavaME506
20.1.3 M3G:另一种JavaME3D图形标准506
20.2 OpenGL的基本原理507
20.2.1 使用Open GLES进行基本绘制507
20.2.2 OpenGL照相机和坐标512
20.3 在Android中使用OpenGLES515
20.3.1 使用GL Surface View和相关类515
20.3.2 实现Renderer515
20.3.3 通过Activity使用GLSurfaceView518
20.3.4 更改照相机设置523
20.3.5 使用索引添加另一个三角形524
20.3.6 为简单的OpenGL三角形制作动画526
20.4 OpenGL的运用:形状和纹理528
20.4.1 绘制矩形528
20.4.2 使用形状530
20.4.3 使用纹理541
20.4.4 绘制多个图形546
20.5 OpenGLES2.0548
20.5.1 针对OpenGLES2.0的Java绑定549
20.5.2 呈现步骤552
20.5.3 着色器552
20.5.4 将着色器编译到程序中553
20.5.5 访问着色器程序变量555
20.5.6 简单的ES2.0三角形555
20.5.7 关于Open GLES2.0的更多阅读材料558
20.6 代码编译说明559
20.7 小结560
第21章 活动文件夹561
21.1 探索活动文件夹561
21.1.1 用户如何使用活动文件夹562
21.1.2 构建活动文件夹565
21.2 代码编译说明573
21.3 参考资料573
21.4 小结573
第22章 主屏幕部件575
22.1 主屏幕部件的架构575
22.1.1 什么是主屏幕部件575
22.1.2 主屏幕部件的用户体验576
22.1.3 部件的生命周期578
22.2 示例部件应用程序582
22.2.1 定义部件提供程序583
22.2.2 定义部件尺寸584
22.2.3 与部件布局相关的文件586
22.2.4 实现部件提供程序586
22.2.5 实现部件模型589
22.2.6 实现部件配置活动595
22.3 部件局限性和扩展598
22.4 资源599
22.5 小结599
第23章 Android搜索600
23.1 Android搜索体验600
23.1.1 探索Android全局搜索601
23.1.2 为全局搜索启用建议提供程序606
23.2 活动与搜索键交互608
23.2.1 常规活动上的搜索键行为609
23.2.2 禁用了搜索的活动的行为615
23.2.3 通过菜单显式调用搜索617
23.2.4 本地搜索和相关活动620
23.2.5 启用键入搜索625
23.3 实现简单建议提供程序626
23.3.1 计划简单建议提供程序626
23.3.2 简单建议提供程序实现文件626
23.3.3 实现Simple Suggestion-Provider类627
23.3.4 简单建议提供程序搜索活动630
23.3.5 搜索调用方活动634
23.3.6 简单建议提供程序用户体验636
23.4 实现自定义建议提供程序638
23.4.1 计划自定义建议提供程序638
23.4.2 Suggest URL Provider项目实现文件639
23.4.3 实现Suggest Url Provider类639
23.4.4 实现自定义建议提供程序的搜索活动647
23.4.5 自定义建议提供程序描述文件652
23.4.6 自定义建议用户体验653
23.5 使用操作键和应用程序特有的搜索数据655
23.5.1 在Android搜索中使用操作键655
23.5.2 使用应用程序特定的搜索上下文658
23.6 资源659
23.7 对平板电脑的意义659
23.8 小结660
第24章 文本到语音转换661
24.1 Android中的文本到语音转换661
24.2 使用语段跟踪语音665
24.3 使用音频文件代替话音666
24.4 TTS引擎的**功能672
24.4.1 设置音频流673
24.4.2 使用耳标673
24.4.3 播放静音674
24.4.4 选择不同的文本到语音转换引擎674
24.4.5 使用语言方法674
24.5 参考资料675
24.6 小结676
第25章 触摸屏677
25.1 Motion Event677
25.1.1 Motion Event对象677
25.1.2 回收MotionEvent687
25.1.3 使用VelocityTracker687
25.1.4 探索拖放操作689
25.2 多点触摸692
25.2.1 Android2.2 之前的多点触摸692
25.2.2 自Android2.2 开始的多点触摸699
25.3 触摸地图699
25.4 手势702
25.4.1 捏合手势702
25.4.2 Gesture Detector和OnGestureListener705
25.4.3 自定义手势707
25.4.4 Gestures Builder应用程序708
25.5 参考资料713
25.6 小结714
第26章 传感器715
26.1 什么是传感器715
26.1.1 检测传感器716
26.1.2 可以了解的传感器信息716
26.2 获取传感器事件718
26.3 解释传感器数据727
26.3.1 光线传感器727
26.3.2 接近传感器727
26.3.3 温度传感器727
26.3.4 压力传感器728
26.3.5 陀螺仪传感器728
26.3.6 加速度计728
26.3.7 磁场传感器733
26.3.8 结合使用加速度计和磁场传感器734
26.3.9 方向传感器734
26.3.10磁偏角和GeomagneticField740
26.3.11重力传感器740
26.3.12直线加速度传感器740
26.3.13旋转矢量传感器740
26.3.14近场通信传感器741
26.4 参考资料749
26.5 小结749
第27章 联系人API750
27.1 账户750
27.1.1 账户屏幕概览750
27.1.2 账户与联系人的相关性754
27.1.3 枚举账户754
27.2 联系人应用程序754
27.2.1 显示联系人755
27.2.2 显示联系人详细信息755
27.2.3 编辑联系人详细信息756
27.2.4 设置联系人的照片758
27.2.5 导出联系人758
27.2.6 各种联系人数据类型759
27.3 联系人760
27.3.1 内容SQLite数据库760
27.3.2 原始联系人761
27.3.3 数据表762
27.3.4 聚合联系人763
27.3.5 view_contacts765
27.3.6 contact_entities_view765
27.4 联系人API766
27.4.1 浏览账户766
27.4.2 浏览聚合联系人773
27.4.3 浏览原始联系人781
27.4.4 浏览原始联系人数据785
27.4.5 添加联系人和它的详细信息788
27.5 控制聚合790
27.6 同步的影响791
27.7 参考资料792
27.8 小结792
第28章 使用AndroidMarket793
28.1 成为发布者793
28.1.1 遵守规则794
28.1.2 开发人员控制台795
28.2 准备销售应用程序798
28.2.1 针对不同设备进行测试798
28.2.2 支持不同的屏幕尺寸798
28.2.3 准备上传AndroidManifest.xml799
28.2.4 本地化应用程序800
28.2.5 准备应用程序图标800
28.2.6 付费应用程序考虑因素801
28.2.7 将用户引导至Market801
28.2.8 Android授权服务802
28.2.9 准备上传.apk文件802
28.3 上传应用程序803
28.4 Android Market上的用户体验805
28.5 更多发布途径806
28.6 参考资料807
28.7 小结807
第29章 多用途的碎片808
29.1 什么是碎片808
29.1.1 何时使用碎片809
29.1.2 碎片的结构809
29.1.3 碎片的生命周期810
29.1.4 展示生命周期的示例碎片应用程序814
29.2 Fragment Transactions和碎片后退栈821
29.3 Fragment Manager823
29.3.1 引用碎片时的注意事项824
29.3.2 List Fragments和〈fragment〉824
29.3.3 在需要时调用独立的活动828
29.3.4 碎片的持久化830
29.4 对话框碎片831
29.4.1 Dialog Fragment基础知识831
29.4.2 Dialog Fragments示例应用程序835
29.5 碎片之间的更多通信方式846
29.6 使用Object Animator自定义动画847
29.7 参考资料849
29.8 小结850
第30章 ActionBar851
30.1 Action Bar剖析851
30.2 选项卡导航操作栏活动852
30.2.1 实现基础活动类853
30.2.2 为Action Bar分配统一的行为855
30.2.3 实现选项卡监听器857
30.2.4 实现选项卡操作栏活动858
30.2.5 可滚动的调试文本视图布局860
30.2.6 操作栏和菜单交互861
30.2.7 Android描述文件863
30.2.8 测试选项卡操作栏活动863
30.3 列表导航操作栏活动864
30.3.1 创建SpinnerAdapter864
30.3.2 创建列表监听器865
30.3.3 设置列表操作栏865
30.3.4 更改BaseActionBar-Activity866
30.3.5 更改AndroidManifest.xml866
30.3.6 测试列表操作栏活动867
30.4 标准导航操作栏活动868
30.4.1 标准导航操作栏活动868
30.4.2 更改BaseActionBar-Activity869
30.4.3 更改AndroidManifest.xml870
30.4.4 测试标准操作栏活动870
30.5 参考资料871
30.6 小结872
第31章 3.0版中的更多主题873
31.1 基于列表的主屏幕部件873
31.1.1 3.0版中新的远程视图873
31.1.2 在远程视图中使用列表875
31.1.3 应用示例:测试主屏幕列表部件885
31.1.4 对测试列表部件进行测试893
31.2 拖放894
31.2.1 3.0版中拖放的基础知识894
31.2.2 拖放示例应用程序895
31.2.3 测试示例拖放应用程序905
31.3 参考资料906
31.4 小结907
《精通Android 3》作者介绍:
Satya Komatineni,印度理工大学电子工程专业硕士?有20多年的程序设计经验,开发过用于Java Web开发的简单开源工具Aspire Web以及开源个人Web操作系统——_Aspire Knowledge Central。擅长使用Java、NET和数据库技术进行Web开发,发表过30多篇这方面的文章。他经常在创新技术相关的行业大会上发言,并为java.net上的网络博客撰稿。
Dave Mac Lean,加拿大滑铁卢大学系统设计工程专业学士。早在1980年就从事软件开发工作,使用过多种语言进行编程,曾开发机器人自动化、数据仓库、Web自助服务应用程序、EDI事务处理器等系统。Dave~在Sun、IBM、Trimble Navigation、通用汽车等公司工作。
Sayed Hashimi,美国佛罗里达大学工程学硕士。具有**、金融、物流和面向服务的架构等多个领域的软件开发经验,使用各种编程语言和平台(包括C/C++、MFC、J2EE和NET)开发过大规模的分布式应用程序。他在重要软件杂志上发表过许多文章,还在Apress出版过其他广受欢迎的图书。