内容简介本书共四部分19章,主要介绍如何使用Adobe AIR开发Android移动应用,深入讲解Android移动开
发特有的各种主题,力图帮助读者创建高品质的应用程序。第1章~第5章讨论创建和发布AIR应用程序
的技术、环境和基础。第6章~第14章讨论和功能有关的主题,比如多点触摸技术、加速计、自带的摄像
机、地理位置、音频和视频等。第15章~第17章讨论一些更高级的主题,建立一个体系结构来管理多个
视图,并提供完整应用程序的代码。第18章~第19章阐述资源管理和开发的最佳实践。读者可在本书配
套网站下载代码示例,并编译和安装到移动设备上。本书着重强调良好的开发实践,尤其适合热爱技术和用户体验的开发人员参考和学习。序
为独立应用程序赋予杰出的使用体验,要比想象中的难得多。有了Adobe AIR之后,开
发人员和设计人员能将他们的思路快速和方便地转换为应用程序。随着新一代移动平台
的兴起,我们将AIR引入那些平台,可以有效地扩大用户群体。通过Véronique的书,你
将一劳永逸地学会如何使用AIR构建出色的应用程序,如何利用移动平台的新功能,比
如地理位置、触屏以及其他传感器。让我们开始编码吧!——Arno Gourdol,Flash Runtime Foundation工程主管
前言
如果你不能简单说清楚,就说明你还没有完全明白。——阿尔伯特·爱因斯坦手机产业的欣欣向荣革新了我们与世界连接和相互通信的方式。它已成为移动生活方式
的基础。虽然硬件厂商和平台工程师正在大力促进手机技术的发展,但手机的真正潜力还需应用
程序的创建者来激发。为此,Google和Open Handset Alliance(开放手机联盟)开发了Android,一种能在大量
移动设备上运行的操作系统。Adobe和Open Screen Project(开放屏幕项目)为各种移动
系统提供了AIR开发工具。两者结合在一起,为这个各自为阵的世界带来了某种统一的
迹象。本书教你使用Adobe AIR进行Android平台上的开发。我的目标是针对移动开发特有的各
种主题进行深入讲解。我的希望是本书能帮助你创建高质量的应用程序。面向的读者本书面向开发人员,尤其是那些既关心技术,又关心用户体验的狂热的程序员(coder)。
我尝试尽可能多地提供关于所有主题的背景信息,而非只是把本书作为一本ActionScript参
考手册来写。今天仍处在移动纪元之初期,你们每一个人都是潜在的改革者。你的贡献可能影响移动
技术的未来。
4 | 前言本书前提本书假定你已经有ActionScript 3语言的基本到中级能力。例如,知道怎样创建事件侦听
器,理解不同的数据类型,并知道类是什么。如果想学习该语言的基础知识,或者只是
想复习一下,我推荐Colin Moock写的Essential ActionScript 3.0一书(O’Reilly)。每个
主题我都会从基本的讲起。我还提供了示例代码,帮助你逐渐消化新知识。最后,我只
用ActionScript和少量第三方库。本书内容本书分为4个部分。第1章到第5章讨论创建和发布AIR应用程序的技术、环境和基础。第6章到第14章讨论和功能有关的主题,比如多点触摸技术、加速计、自带的摄像机、
地理位置、音频和视频等。第15章到第17章讨论一些更高级的主题,建立一个体系结构来管理多个视图,并提供完
整应用程序的代码。第18章到第19章阐述了资源管理和开发的最佳实践。此外,本书还有一个配套网站(http://oreilly.com/catalog/9781449394820),方便你下
载代码示例,自己编译并安装到移动设备上。排版约定本书使用如下排版惯例:斜体表示新名词、URL地址、电子邮件地址、文件名或者文件扩展名。等宽字体(Constant width)用来显示代码示例,以及段落中的程序元素,如变量、方法名、数据库、数据类
型、环境变量、声明和关键字等。等宽粗体(Constant width bold)显示了用户需要逐行键入的命令或文本。等宽斜体(Constant width Italic)显示了需要用户用自己的值将其替换掉的文本,或者需要用户根据上下文进行相应
替换的文本。
前言 | 5注意: 代表一个提醒、建议或者一般性的注意事项。警告: 代表警告或提醒。注意,我喜欢将起始花括号和代码放在同一行,因为我觉得这使书中的代码可读性更
强,还能节省一行空间。基于同样的理由,我也没有遵守私有变量要以下划线开头的约
定。演示新概念时,我只用一个小的代码段介绍新的API或类。使用代码示例本书旨在帮助你更好地完成自己的工作。一般情况下,可以在自己的程序和文档中使用
本书的代码。除非要重新发布绝大部分代码,否则不必联系我们进行授权。例如,写
程序使用本书的几个代码块不需要授权。但是,出售或者发布包含本书示例的一张CD-
ROM就需要授权。通过引用本书正文和示例代码来回答一个问题不需要授权。但是,将
本书的大量示例代码集成到你的某个产品的文档中就需要授权。如果引用时能提及本书,我们会非常感谢,虽然这并不是硬性规定。提及本书时,一
般请包括书名、作者、出版社和ISBN。例如:“Developing Android Applications with
Adobe AIR by Véronique Brossier. Copyright 2011@ Véronique Brossier, 978-1-44939-
482-0”。如果觉得在使用代码示例时超出了合理使用的范畴,或者需要授权,请通过电子邮件联
系我们:permissions@oreilly.com。联系我们有关本书的任何建议和疑问,可以发送信函到以下地址:美国:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2号成铭大厦C座807室(100035)奥莱利技术咨询(北京)有限公司
我们为本书提供了一个网页,其中给出了勘误表、示例代码和所有的附加信息。可以通
过以下地址访问该网页:要对本书发表评论或询问技术问题,请发电子邮件到以下邮箱:有关我们的书籍、会议、资源中心以及O’Reilly网络,可以访问我们的网站:致谢感谢Flash Runtime Foundation工程主管Arno Gourdol,感谢AIR团队在产品预发布之前
所做的工作和积极配合与支持(尤其值得一提的是Mohit Arora,Syed Mohd Mehadi,
Romil Mittal和Ashutosh Jagdish Sharma)。我要向Joe Ward表达我最真诚的谢意,他为
我提供了有关AIR的方方面面的解答和文档资料。我要向AIR for Android预发布名单上的同仁表示感谢,尤其是Jyunpei Furukawa和Pascal
Sahuc。感谢O’Reilly的编辑Mary Treseler、文稿编辑Audrey Doyle、制作编辑Kristen Borg和插
画作者Robert Romano。感谢O’Reilly的技术审稿人Tom Barker,Rich Tretola,Matthew
David,Chris Griffith以及(特别感谢)Kevin Bahadoor。除了O’Reilly的技术编辑,我还邀请了几个朋友和专业人员参与审阅了本书。他们根据
自己的专长分别审阅了单独的章节。有几个慷慨的朋友还审阅了多次。感谢Francois Balmelle,David Cameron,Danny Durra,Renaun Erickson,Judah
Frangipane,Ben Garney,Colin Holgate,Alexandre Houdent,Kevin Hoyt,Lisa Larson-
Kelley,Elliot Mebane,Doug McCune,André Michelle,Keith Peters,Brian Rinaldi,
Michael Thornburgh和Edwin Van Rijkom。感谢Grant Garrett让我使用Influxis服务来测试我的视频应用,感谢Jonathan Bryski绘的走
路循环图,感谢MTVNetworks的Pier Borra为方便我着手开始写作而提供的休假。
Merci(法语,“谢谢”的意思)Thibault Imbert,在我首次考虑写书时,他的热情强
烈地感染了我。感谢Rich Shupe,他无私地分享了他的写作经验,他的幽默让人难以忘
怀。我要由衷地感谢Mike Chambers和Colin Moock,感谢他们在我工作中提供的帮助,要知
道,在我们这个行业,作为女性,往往意味着被当作隐形人。感谢我的那一半Satyen Mehta,他的耐心和不懈的支持(他称我为Jacqueline Cousteau of
Flash),感谢他在我写作的时候做了很多美味佳肴。当我在夜间赶工的时候,CMB悄无声息地来到身旁,它乖巧的举动为我消除了很多压
力。遗憾的是,Mesocricetus auratus不能上我这本书的封面。
目录序 .........1前言 ..........3第1章 AIR初探 .....9安装Adobe开发工具 ..........10Flash Professional CS 5.5 ..........10Flash Builder 4.5 ..........10在Android设备上安装AIR“运行时” ........10AIR SDK简介 .........11新的ActionScript库..........12尚不支持的功能 .........13桌面上的AIR与Android上的AIR的对比 .....13Android上的Mobile Flash Player 10.1与AIR 2.6的对比 .........14第2章 打电话和发短信 ..........15设置设备 .........15创建项目 .........16使用Flash Professional ..........16使用Flash Builder .........16创建应用程序描述 .........17使用Flash Professional ..........17使用Flash Builder .........17写代码 .........17使用Flash Professional ..........18
ii | 目录使用Flash Builder .........19将应用程序打包成APK文件并安装到设备 ..........20使用Flash Professional ..........20使用Flash Builder .........20测试和调试 .........21使用Flash Professional ..........21使用Flash Builder .........22移动工具应用程序 .........22Launchpad .........22Device Central CS5 ..........23Package Assistant Pro .........23De MonsterDebugger ..........23通过服务器将AIR安装到Android设备上 ....23其他工具 .........24小结 ....25第3章 Android初探 ..........26Android SDK ..........27安装Android SDK ..........27安装Android Debug Bridge .........28检测设备 .........29使用Dalvik Debug Monitor ..........29使用logcat命令 .........30使用Virtual Device Manager和Emulator ..........31AIR如何在Android上运行 .........32使用intent启动AIR .........33AIR对Android API的访问 .........33使用命令行工具 ..........34概述 ..........34小结 ....36第4章 权限、证书和安装 .........37为什么要针对移动市场 .........37APK文件 .........37创建应用程序图标 .........38
目录 | iii选择应用程序设置 .........39设置权限 .........41打包外部资源 .........44用证书签署应用程序 ..........45版本控制 .........45注册成为Android开发人员 .........46在Android Market发布应用程序 .........46上传资源 .........46陈列细节 .........47发布选项 .........47通过Adobe InMarket发布应用程序 ......47为Amazon Appstore发布 .........48使用MAC地址控制发布 ..........48启动AIR应用程序 .........49开发应用来挣钱 ..........49收费应用 .........49移动广告 .........50报告 ....50小结 ....51第5章 评估设备能力并应对多种设备 .........52硬件 ....52处理器 .........53内存和存储.........53摄像机 .........53传感器 .........53电池 ..........53显示屏 .........53软件 ....54性能 ..........54功能 ..........55方向 ..........56创建多屏内容 .........57资源缩放和定位 .........58矢量图形与位图的选择 .........60
网络连接 .........61小结 ....62第6章 打开/关闭应用程序和保存数据 ..........63AIR应用程序 ..........64打开应用程序 .........64关闭应用程序 .........64在后台和前台之间切换 .........65设置Back,Menu和Search按钮 ..........66重写暗屏行为 .........67为什么和怎样保存数据 .........68内部还是外部存储 .........68本地共享对象 .........70文件系统 .........72使用SQLite数据库 .........75创建数据库文件 .........76嵌入数据库.........81使用加密本地存储 .........82小结 ....83第7章 多点触摸技术 .........84简单的历史性回顾 .........84多点触摸和手势 ..........85工作原理 .........85Multitouch类 .........85GestureEvent类 .........86缩放(Zoom)手势 .........87旋转(Rotate)手势 ..........88Pan手势 .........89Swipe手势 .........90Press and Tap手势 ..........91Two-Finger Tap手势 .........92TouchEvent类 .........93GestureWorks库 .........95触摸设计 .........96小结 ....96第8章 加速计 ......98什么是运动传感器 .........98Accelerometer类 .........98直观地认识值 .........100简单动画 .........100更新和屏幕渲染 .........101设置边界 .........102向中心旋转.........102摇一摇 .........103获得平滑的值 .........104小结 .........106第9章 摄像机 ....107Gallery应用程序和CameraRoll类 ..........107选择图片 .........108添加图片 .........113摄像应用程序和CameraUI类 ..........113上传到远程服务器 .........115EXIF数据 .........115小结 .........118第10章 地理位置 ..........119Geolocation类 .........119GeolocationEvent类 ..........121使用GPS和网络/Wi-Fi技术定位设备 ........122使用GPS ..........122使用蜂窝网络和WiFi ..........123如何辨别正在使用GPS还是WiFi ......123AIR和Android .........125逆向地理编码 .........126地图 .........128启动Google Maps .........128静态地图 .........129
动态地图 .........132EXIF数据和Map对象 ..........136speed属性 .........138小结 .........138第11章 麦克风和音频 ..........140麦克风 .........140录音 .........141播放音频 .........142保存录音 .........143音频资源 ..........147嵌入文件 .........147使用外部文件 .........147设置和音频编码/解码器 ..........148处理声音 ..........150加载声音 .........150播放声音 .........152显示进度 .........152停止声音 .........153恢复声音 .........153访问元数据.........154使用多点触摸的音频示例 .........154ID3标签 .........154修改声音 ..........155控制音量 .........155平移 .........156原始数据和声音频谱 .........157音频和应用程序活动 .........160小结 .........161第12章 视频 .....162准备视频 ..........162编码/解码器 .........162码率 .........163帧频 .........164
分辨率 .........164性能 .........165播放视频 ..........165嵌入视频 .........165外部视频 .........166边播放边放的视频 .........166RTMP流 ..........170HTTP动态流.........171P2P通信 .........171控制 .........172YouTube ..........172捕获视频 ..........173视频和CameraUI类 ..........173Camera类 .........175文档和教程.........176小结 .........176第13章 StageWebView类 ..........177原生浏览器 .........177StageWebView类 .........178设计时的注意事项 .........180本地使用 .........181移动广告 .........182服务和身份验证 .........184不足 .........185小结 .........186第14章 硬件加速 .........187一些定义 ..........187渲染和屏幕显示 ..........188计算 .........189边线和颜色创建 .........189光栅化 .........189表示 .........189Android上的GPU渲染 .........190
cacheAsBitmap属性..........190cacheAsBitmapMatrix属性 .........193显示列表 ..........195内存消耗 .........195树结构 .........196节点关系 .........196多帧MovieClip .........198交互性 .........198多种渲染技术 .........198最大纹理内存和纹理大小 .........1992.5D对象 .........199如何测试GPU渲染效率 .........199矩阵 .........199单位矩阵 .........200变换矩阵 .........200为多屏幕部署定义矩阵 .........202GPU模式中不要使用的矩阵 ..........202硬件加速音频和视频 .........203小结 .........203第15章 设备和其他问题 ..........204RTMFP UDP .........204局域网的P2P ..........205颜色交换 .........208对比AIR应用程序 ..........209远程网络的P2P ..........209简单文字聊天 .........211多播流 .........212端到端流 .........214定向路由 .........216中继 .........217寻宝游戏 .........218其他多用户服务 .........218Arduino和物理计算 .........219小结 .........219
第16章 ViewManager类 .........220导航 .........220ViewManager类 ..........220独立视图 .........224面包屑导航 .........231Flash Builder的ViewNavigator .........233小结 .........236第17章 案例学习 .........237Album应用程序 .........237设计 .........238构架 .........238流程 .........239权限 .........241导航 .........241图片 .........241音频 .........242逆向地理位置 .........242SQLite .........242P2P连接 .........242滚动导航 .........243桌面功能 .........246小结 .........246第18章 资源管理 .........247文本 .........247虚拟键盘 .........247字体 .........248Flash文本引擎 ..........248优化图形 ..........250降尺度和mipmap .........250运行时的矢量图形 .........251缩放 .........251cacheAsBitmap .........251cacheAsBitmapMatrix..........251
矢量到位图.........252合成矢量图形 .........252多帧MovieClip .........253精灵表和Blitting ..........255Blitting ..........255定制光标 ..........257异步位图解码 .........257缓存资源 ..........257组件 .........258小结 .........259第19章 最佳开发实践 ..........261关于优化的资源 ..........261寻求帮助 ..........262文档 .........262Internet ..........262社区 .........262运行机制 ..........263帧的概念 .........263内存 .........265创建对象 .........265删除对象 .........266垃圾回收 .........268事件 .........269事件传播 .........270多个子一个侦听器 .........270泛型和自定义事件 .........271诊断工具 ..........272Hi-Res-Stats .........272Flash Builder Profiler ..........273Flash Preload Profiler ..........274Grant Skinner的PerformanceTest类 ....274本地工具 .........275小结 .........275