开发体验

前言

想象一下,你像往常一样,正在一条熟悉的路上慢跑,突然被一个念头打动——一款全新的杀手级移动应用!一路上,你甚至忘记了回家的时间,迫不及待地想把这个想法付诸实现。但是该从哪里下手呢?此时的你,并不是一名程序员,而要想成为程序员,怎么也得花上几年的时间,而时间就是金钱,而且......甚至,到了那个时候,可能早已有人把它做出来了。于是就这样,你的灵感胎死腹中了。

现在来设想一个全然不同的世界,在那里,创建应用不需要有多年编程经验,艺术家、科学家、人道主义者、卫生保健工作者、律师、消防员、马拉松运动员、足球教练以及来自各行各业的人们,他们都可以自己动手创建应用。设想一下,在这个世界里,不必雇用专业程序员,就可以把想法转变为应用的原型;你还可以创建只属于你个人的应用,利用移动计算技术来满足自己独特的需求。

这就是App Inventor的世界,一个用于创建移动应用的可视化编程工具。实践证明,这种基于“块”语言的可视化编程方法,显著地降低了为安卓设备开发应用的门槛,就连孩子们也能用够运用自如。让我们敞开来想象一下,把视频游戏里的角色替换成你和你的朋友;或者做一款“买牛奶”的应用,当你下午3点钟之后路过某个超市时,手机会主动提醒你买牛奶;或者是一款问答应用,把它作为一种别出心裁的求婚方式,发给你的那一位,“问题4:你愿意嫁给我吗?如果愿意,按下按钮发送短信”。真的有人创建了一个类似的App Inventor应用来求婚,而对方居然说“愿意”!

面向手机的块语言

App Inventor是一款采用拖拽操作的可视化编程工具,主要用于构建运行在安卓平台上移动应用。首先,App Inventor提供了基于Web的图形化的用户界面设计工具,可以设计应用的外观,然后,再像玩拼图游戏一样,将“块”语言拼在一起,来定义应用的行为。

图0-1显示的代码块,来自于一款应用的早期版本,它的开发者Daniel Finnegan是一名从未学过编程的大学生。你能猜出这是一款什么样的应用吗?

图0-1 一段学生编写的代码

这是一款短信“应答机”应用。开车时启动它,就可以对收到的短信进行自动回复。

很明显,相比传统的程序代码,这些代码块更容易理解,于是你立刻被深深地吸引住,结合自己的切身体会,你的问题也来了:能不能将收到的短信大声地读出来?我能自定义回复内容吗?能不能做一个像“美国偶像”那样的应用,让人们用短信来投票?以上所有问题的答案都将是肯定的。这本书就是要告诉你怎么来做。

用App Inventor做什么?

可做的事情简直是太多了!

把开发当作游戏

为手机写应用本来就很有意思,而使用App Inventor则更增添了探索和发现的乐趣。只需在Web浏览器中打开App Inventor,连上手机,并像图0-1中那样把一些块拼在一起,立即就能在手机上看到你的应用,并且能够与之交互。于是你开始编程,你会发邮件给朋友们,让他们发短信来测试你的应用;或者用刚写好的应用来控制一个乐高NXT机器人;再或者拔下手机,走到户外,去验证一下应用中的位置传感器是否有效。

创建原型应用

对一款应用有了灵感,是吗?那就快速地创建一个原型,切莫随手记在餐巾纸上,或者干脆让它随风飘散。什么是原型呢?它是你构思的模型,是有待进一步完善的作品。用文字来表达想法,就像是写一篇散文给你的朋友或爱人;而用App Inventor创建一个原型,就像是写给风险投资人的一首诗。因此我们说,对于移动应用的开发来说,App Inventor就像一张电子餐巾纸。

构建个性化应用

目前,在移动应用的世界里,我们只能被动接受那些推送过来的应用。你就没有抱怨过吗?我们更期待那种个性化的应用,或者至少让我们能够有所取舍。使用App Inventor,你就可以创建出更贴近自己需求的应用。例如,第三章的打地鼠游戏中,有一个随机移动的地鼠,每次触碰到它你都可以增加得分,你完全可以把教程中地鼠替换成你想要的形象,比如你弟弟妹妹的照片,或者随便什么你能想到的东西,只要你喜欢!同样,在第八章的出题应用中,我们给出的问题都与美国总统有关,你可以轻而易举地将那些问题替换成你感兴趣的问题,比如,你最喜爱的音乐、你的家族历史,等等。

开发完整的应用

App Inventor不只是一个原型开发工具或界面设计器,它也可以用来创建各种完整的应用。它所使用的块语言提供了所有基础的编程指令,如循环语句及条件语句等,只不过是以“块”的方式来呈现而已。

教学

无论是对于初中、高中还是大学的学生,App Inventor都是一个非常出色的教学工具。它的出色不仅仅是对计算机科学而言,对于数学、物理、工商管理以及几乎任何其他学科来说,它也是一个了不起的工具。重要的是在创造中学习,而不是死记公式,例如,你创建了一个寻找最近医院(或商场)的应用;又比如,用马丁•路德•金和马尔科姆•X的视频或演讲的录音片段来创建一个多媒体的问答应用,远比写一段黑人历史的文章来得生动。我们坚信App Inventor以及本书将成为你学习中贯穿始终的强有力的工具。

为什么要用App Inventor?

很多人说App Inventor之所以易用,是因为它采用了可视化操作界面,以及可拖拽的块语言。但这背后究竟意味着什么呢?为什么App Inventor会易于使用?

无需记忆和输入指令

对于初学者来说,学习编程面临的最大困难有两个:一是要输入代码,二是要面对那些计算机弹出的令人费解的错误信息。这种困难给他们带来的挫折感,往往使很多初学者还来不及体会解决逻辑性问题的乐趣,就中途放弃了。

你要做的只是选择

在App Inventor中,组件和代码块被分门别类地放在不同的抽屉中,触手可得。编程的过程,就是找到这些块,把它们拖到程序中,来实现你所预想的功能,不需要记住那些指令或查阅参考手册。

限定代码块之间的匹配

同那些让程序员感到挫败的神秘错误信息相比,App Inventor的块语言从一开始就排除了很多犯错的机会。例如,如果一个代码块要求你输入数字,你就就无法输入数字以外的任何字符。这虽然不能消除所有的错误,但起码会排出很多低级错误。

事件的即时处理

传统的编程语言,在它们诞生的那个年代,编写程序就是按照特定的顺序输入一组命令,就像厨师照着菜谱的流程做菜一样。但是在图形化的用户界面中,特别是在移动应用中,程序将不再按照某个特定的顺序执行,而是由那些随时可能发生事件(例如,收到短信或来电)触发运行。因此,大多数的程序都不再采用这种菜谱的模式,取而代之的是对事件的处理。事件处理程序的工作方式是:“当某事件发生时,做某事。”在传统的语言如Java中,你要了解类、对象,以及一种叫做事件侦听器的特殊对象,每个侦听器代表一个事件,而在App Inventor中,你可以拖拽出一个“事件块”来表示"户点击按钮"或“收到短信”之类的事件。

适合创建哪些类型的应用?

用App Inventor可以创建各种不同类型的应用。只需发挥你的想象力,就能创建出各种既有趣又实用的应用来 。

游戏

一般人们都会从简单的应用开始,例如,第3章的“打地鼠”游戏,或者第2章的油漆桶应用(在朋友的脸上绘画),等等。然后随着不断进步,就可以开始按照自己的想法做一些更复杂的游戏,如吃豆子、太空侵略者等。你甚至可以使用手机中的传感器,通过倾斜手机让来控制游戏中角色的移动(第5章)。

教学类应用

App Inventor不仅限于制作简单的游戏,也可用于创建信息和教育类应用。第8章的总统问答应用可以帮助学生们在考试前更好地复习,第10章的出题与答题应用,允许用户为自己定制一份考卷(想想那些长途旅行的家长们会多么喜欢这个应用!)

位置感知应用

因为App Inventor提供了访问GPS位置传感器的功能,因此可以构建一个定位应用——知道自己在哪儿;也可以建一个停车定位应用,帮你记住停车位置(第7章);或者一个找人的应用,在音乐会或大型会议时,显示你的朋友或同事的位置;或者一个定制的导游应用,为你所在学校、工作场所或博物馆预置游览路线。

高科技应用

您还可以创建以下类型的应用:条码扫描、聊天、听力练习(文字识别)、音乐播放、音乐制作(第9章)、视频播放、检测手机的方向和加速度、拍照以及拨打电话,等等。如果把智能手机比喻为一把功能多样的瑞士军刀,那么编写程序就是操作这把刀的技术,而App Inventor让这门技术更易于掌握。

短信应用

开车不发短信(第4章)就是一个短信类应用的简单案例,你还可以编写一个自动问候的应用,定时给你的亲友们发送诸如“想念你”之类的短信,或者类似于“广播中心”(第11章)那样的应用,帮助协调大型活动,再或者,像“美国偶像”节目那样的投票应用,让你的朋友通过短信来投票,等等。所有这些类型的应用都可以用App Inventor来实现。

控制机器人的应用

第12章是一个机器人控制类应用,教你如何编写程序来控制乐高机器人。你的手机可以充当机器人的遥控器,或者说你的程序就是机器人的“大脑”,可以伴随它到处游走。机器人与手机之间通过蓝牙通信,你也可以使用App Inventor的蓝牙组件创建其他类似的应用,来控制周围的蓝牙设备。

复杂应用

App Inventor大大降低了编程的门槛,让你在短时间内就可以创建出很炫的高科技应用,但这门语言的功能并不简单,它提供了循环、分支以及其的语言要素与逻辑结构,可以编写出逻辑复杂的应用程序。在尝试创建应用的过程中,你会惊奇地发现解决这些逻辑问题是多么的有趣。

基于Web的应用

App Inventor也提供了应用与Web之间的通信手段。你可以写一个应用,从Twitter或RSS订阅中抓取数据,或者访问亚马逊网上书店,通过扫描条码来查询一本书的线上价格。

哪些人能够创建应用?

App Inventor开发工具是一款在线应用(非桌面程序),向所有人免费开放,只要你能联通网络,就可以在任何浏览器中使用它。你甚至不需要手机:内置的安卓模拟器可用于应用的测试。截至2014年9月,App Inventor已经拥有了190万注册用户,他们分别来自195个国家,并共同创建了将近5百万个应用。

是谁创建了这些应用?他们是专职的程序员吗?有些是,但大多数不是。

其中最有说服力的例子是David Wolber教授的一门课程。Wolber教授是本书的作者之一,就职于旧金山大学(USF)。旧金山大学为商科及文科学生开设了一门计算机科学的基础课程,而App Inventor是这个课程的一部分。许多参加这门课的学生对数学是既恨又怕,而这门课恰恰满足了这些患有数学恐惧症的学生们的核心需求,其中绝大多数学生连做梦也没想到他们会编写计算机程序。

尽管毫无经验可言,但学生们依然学会了App Inventor,并成功地创建了那些了不起的应用。英语专业的学生首创了“开车不发短信”应用;两个通信专业的学生创建了“Android,我的车在哪儿?”;而一个国际研究专业的学生创建了“广播中心”应用(第11章)。有一天晚上,已经过了下班时间,有一位艺术系的学生去敲Wolber教授办公室的门,询问他如何写一个条件循环,此时此刻,Wolber教授意识到,App Inventor已经极大地改变了计算机教育的格局。

媒体也开始关注这一意义非凡的变化。《纽约时报》称App Inventor为“DIY应用开发软件”;《旧金山大学记事》撰文报道了USF学生们的工作:“谷歌让普通大众变成了应用的生产者”。《连线杂志》则采访了Daniel Finnegan——“开车不发短信”的作者,透过Finnegan的故事,他们断言:“编程大众化的时代已经到来。”

正如他们所说,这只猫已经跳出来了(第一章应用里有一只小猫)。现在,在世界各地,App Inventor已经被列为初中及高中课程:有来自28个国家的超过2500位女生参加了“技术创新挑战”项目(一个面向高中女生的课外项目);在高中开设的试点课程——计算机原理的预备课程中,也加入了App Inventor的内容;在许多大学新开设的入门课程中,也都有App Inventor的一席之地。有数千名爱好者、商人、求婚者以及能工巧匠们正漫游在App Inventor的网站上,创建自己的应用,你还等什么?开始行动吧,无需拥有编程经验!

排版约定:

斜体:表示新出现的术语、URL地址、email地址、文件名及文件扩展名。等宽字体:表示程序代码,当出现在正文时,也表示与程序相关的要素,如变量名、函数名、数据库、数据类型、环境变量、语句及关键词等。等宽粗体:表示需要用户输入的命令或文字。等宽斜体:表示可被替代的文本,该文本由用户提供,或取决于上下文。

提示或建议。

测试环节以及测试说明。

示例代码的使用

书中涉及到的相关文档可以从这里下载(代码及资源文件):https://appinventor.org/bookFiles。

本书将指导你完成这些实例,同时,你也可以在自己的程序或文档中使用书中的代码,通常情况下,这些代码的使用不需要获得我们的许可,除非你做大量的复制。例如,你在自己的程序中使用了若干行书中的代码,这无需获得我们的许可,如果是销售或发行O'Reilly书中程序的CD-ROM,则需要获得许可;如果用书中的内容或代码来回答问题,无需获得许可,如果在你的产品文档中大量使用书中的代码,则需要获得许可。

在你引用本书的内容时,如果能够注明出处,我们将不胜感激,但我们不强求你这样做。注明出处的内容通常包括书名、作者、出版商、ISBN等,例如:““App Inventor 2 by David Wolber, Hal Abelson, Ellen Spertus, and Liz Looney (O’Reilly). Copyright 2015 David Wolber, Hal Abelson, Ellen Spertus, and Liz Looney, 978-1-491-90684-2.”

如果你对示例代码的使用超出了以上描述的范围,或有其他用途,可以随时与我们取得联系:permissions@oreilly.com。

Safari网上书店

Safari网上书店

Safari网上书店是一家按需供应的数字图书馆,提供技术及商务领域中世界级权威作者的图书及视频作品。

出于研究、解决问题、学习以及认证培训的目的,许多技术专家、软件开发人员、网页设计师、商务人士及创作人员都将Safari网上书店作为他们所需资料的主要来源。

Safari网上书店为企业、政府、教育机构及个人提供了不同层次的方案及定价策略。

书店的会员可以从几百家家出版社的数据库中,搜索并获得数千种图书、培训视频、正式出版前的手稿等资料,这些出版社包括O’Reilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que,Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann,IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology 等等。要了解Safari网上书店的更多信息,请访问我们的网站(https://www.safaribooksonline.com)。

联系我们

请将您对本书的评价及问题发给我们:

O'Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472800-998-9938 (从美国或加拿大拨打)707-829-0515 (从本地或其他国家拨打)707-829-0104 (传真)

我们为本书设立了专门的网页,其中有勘误表、程序示例以及其他有关信息,网页地址是http://bit.ly/app-inventor2。

对本书的意见或询问技术问题,请发邮件至bookquestions@oreilly.com。

更多与O'Reilly有关的图书、课程、会议、新闻等信息,请访问我们的网站http://www.oreilly.com。

在Facebook上关注我们:http://facebook.com/oreilly在Twitter上关注我们:http://twitter.com/oreillymedia在YouTube上关注我们:http://www.youtube.com/oreillymedia

致谢

催生App Inventor的动机是教育,基于这样的动机,我们坚持认为,通过主动学习,程序可以成为思想的载体,可以让那些奇思妙想变为现实。因此,App Inventor是不断发展的计算机及教育事业的一部分,这一事业始于20世纪60年代Seymour Papert及MIT的Logo小组的努力,他们策划了众多的活动和计划,来支持推广计算思维,其影响一直延续至今。

App Inventor的设计借鉴了此前的计算机辅助教育的研究成果,并立足于谷歌在线开发环境。可视化编程框架则与MIT的Scratch编程语言密切相关,App Inventor 2是基于Blockly的一个特殊实现,Blockly由谷歌公司Neil Fraser领导的团队开发。将可视化的块语言编译为安卓运行代码的编译器采用了Kawa语言框架,而Kawa是Scheme编程语言的方言,由Per Bothner开发,并由自由软件基金会发布,它是GNU操作系统的一部分。

作者在此感谢谷歌公司及App Inventor原创团队,他们为我们在USF、Mills College以及MIT的工作及教学探索提供了支持。特别感谢App Inventor技术主管Mark Friedman,项目经理Karen Parker,与工程师Sharon Perl和Debby Wallach。

同样感谢MIT的App Inventor团队,他们持续不断地致力于App Inventor的开发与完善,特别感谢技术主管Andrew Mckinney、牛人Jeff Schiller、教育及推广主管Shaileen Pokress及Josh Sheldon、无名英雄Jose Dominguex工程师,以及贡献出宝贵假期的Franklyn Turbak及Ralph Morelli。

还要特别感谢旧金山大学的学生Cayla Shaver所作的非凡的编辑工作,以及为本书向App Inventor 2改版所提供的帮助。

最后,我们还要感谢我们各自家庭成员的支持:Ellen的丈夫Keith Golden,Hal的妻子Lynn Abelson,Liz的丈夫Kevin Looney,David的妻子Minerva Novoa。新妈妈Ellen还要感谢保姆Neil Fullagar的帮助。