前言
最后更新于:2022-04-01 02:53:20
你正在一条熟悉的路上慢跑,突然被一个念头击中——下一款杀手级的移动应用。一路上你甚至不再关心时间,只想让你的想法立即变为现实。但究竟如何下手呢?你还不是一名程序员,要想成为程序员,也得需要几年的时间,而时间就是金钱,而且......甚至,有人可能已经把它做出来了。就这样,你的设想胎死腹中了。
现在想象一个不同的世界,在那里,创建应用无需多年的编程经验,艺术家、科学家、人道主义者、卫生保健工作者、律师、消防员、马拉松运动员、足球教练,以及社会各界人士都可以自己创建应用。想象一下,在这个世界里,不必雇用程序员,就可以将想法转化为应用的原型;你可以创建自己专属的应用,利用移动计算技术来满足你个人的需求。
这就是App Inventor的世界,谷歌公司的新型可视化编程工具,用于构建移动应用。事实证明,基于可视“块”语言的编程方法,即便是对孩子来说,也是成功的。App Inventor大大降低了为Android手机和设备开发应用的门槛。想象一下,视频游戏里的角色变成你和你的朋友;或者一款“买牛奶”的应用,当你在下午3点以后路过某个超市时,它会提醒你;或者一款测验应用,其实是一种别出心裁的求婚形式,发给你的另一半“问题4:你愿意嫁给我吗?如果愿意,按下按钮发送短信。”真的有人用这种App Inventor应用来求婚,而对方居然说是!
## **移动电话专用的块语言**
App Inventor是一个可视化,可拖拽的编程工具,用于在Android平台上构建移动应用。利用基于web的图形化的用户界面生成器,可以设计应用的用户界面(外观),然后像玩拼图玩具一样,将“块”语言拼在一起,来定义应用的行为。
插图0-1显示了一款应用的早期版本中使用的块语言,创作者Daniel Finnegan是一名从未学过编程的大学生。你能说出这个应用的功能吗?
![{%}](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-31_55e3d2a3172aa.png)
**图 0-1 用App Inventor块语言来定义应用的功能**
这是一款短信“应答机”应用。开车时启动它,就可以对收到的短信进行自动回复。
可以看到,比起传统的程序代码,这些块语言更易于理解,因此你立即受到吸引,结合自己的实际经验,你可能会问:能不能把收到的短信大声读出来?我可以定制我的回复吗?我能否建一个应用,像“美国偶像”那样,让人们用短信来投票?以上所有问题的答案都是肯定的。这本书将要告诉你怎样做到。
## **用App Inventor做什么?**
### **玩**
为手机写应用充满了乐趣,而App Inventor更增加了探索和发现的乐趣。只需在Web浏览器中打开App Inventor,连上手机,并像图0-1中那样把一些块拼在一起,立即就能在手机上看到你的应用,并与之交互了。于是你开始编程,你会发邮件给朋友们,让他们发短信来测试你的应用;或者用刚写好的应用来控制一个LEGO NXT机器人;再或者拔下手机,走到户外,去验证一下应用中是否正确地使用了位置传感器。
### **建立原型**
对应用有想法了,是吗?快速地创建一个原型,而不是随手记在餐巾纸上,或干脆让它随风飘散。原型是想法的模型,不够完整,也不够精致。用文字来表达一个想法,就像写一篇散文给朋友或爱人;而建一个App Inventor的原型,就像写首诗歌给风险投资人。这样一来,对于移动应用的开发来说,App Inventor就像一张电子餐巾纸。
### **构建个性化应用**
在当前的移动应用世界里,我们被迫接受那些推送过来的应用。你没抱怨过吗?我们期待个性化的应用,或者至少让我们能够调整它的功能。使用App Inventor,可以创建贴近自己需求的应用。例如,第三章的MoleMash(打地鼠)游戏中,有一个随机移动的地鼠,每次触碰到它都可以得分,你可以把地鼠的形象替换成你喜欢的,比如你兄弟姐妹的照片,而不必在乎别人是否喜欢;第八章的测验应用,询问与美国总统有关的问题,但你可以轻松地修改问题,任何话题都可以,从你最喜爱的音乐到家族史。
### **开发完整的应用**
App Inventor不只是一个原型系统或界面设计器,也可以用于创建各类完整的应用。它所使用的块语言提供了所有基础的编程指令,如循环及条件,只是以“块”的方式来呈现。
### **教学**
无论你是中学生还是大学生,App Inventor都是一个伟大的教学工具。它的伟大不仅仅是对计算机科学而言,对与数学、物理、创业以及几乎任何其他学科来说,它都是一个了不起的工具。重要的是在创造中学习,而不是死记公式,例如,你创建了一个寻找最近医院(或商场)的应用;又比如,用马丁•路德•金和马尔科姆•X的视频或演讲片段来创建一个多媒体测验应用,远比写一段黑人历史的文章来得生动。我们坚信App Inventor以及本书将成为你学习中贯穿始终的伟大工具。
## **为什么要用App Inventor**
很多人说App Inventor之所以易用,是因为它可视化的操作界面,以及可拖拽的块语言。但这究竟意味着什么呢?为什么App Inventor会易于使用?
### **无需记忆并输入指令**
对于新手来说,编程最大的挫折在于两点,一是要输入代码,二是面对计算机弹出的令人费解的错误消息。这种挫折让很多初学者来不及体会解决逻辑性问题的乐趣,就中途放弃了。
### **你有多种选择的可能性**
在App Inventor中,组件和块被分门别类地放在不同的抽屉中,触手可得。编程的过程,就是找到这些块,并把它们拖到程序中,来实现你预设的功能,无需记住那些指令或查阅手册。
### **限定块之间的匹配**
与那些挫败程序员的神秘的错误信息相比,App Inventor的块语言从一开始就排出了很多犯错的机会。例如,某功能块要求输入数字,就无法输入文字。这虽然不能消除所有的错误,但肯定是有帮助的。
### **直接处理事件**
使用传统编程语言时,程序的执行就像照着菜谱做菜一样,是顺序执行一系列的指令。但使用图形界面的应用,特别是移动应用,事件可能随时发生(例如,接收短信或电话),多数程序都不采用菜谱的形式,取而代之的是对事件的处理。事件处理程序的工作方式是:“当某事件发生时,程序要做这件事。”在传统的语言如Java中,你要了解类、对象,以及一种叫做侦听器的特殊对象,每个侦听器代表一个事件。在App Inventor中,用“when”块来表示事件,像“当用户点击按钮...”或“当收到短信时...”这样的事件。
## **你可以创建怎样的应用?**
用App Inventor可以创建各种不同类型的应用。发挥你的想象力,就可以创建出各种既有趣又实用的应用。
### **游戏**
人们往往从简单的应用开始,像第3章的“打地鼠”游戏,或第2章的在朋友脸上绘画的应用。随着不断进步,可以开始按照自己的想法做一些更复杂的游戏,如吃豆人与太空侵略者等。你甚至可以使用手机的传感器,通过倾斜手机让游戏中的角色移动(第5章)。
### **教育软件**
App Inventor不仅限于制作简单的游戏,也可用于创建信息和教育类应用。第8章的“测验”应用可以帮助学生们在考试前更好地复习,第10章的“出题”应用,允许用户为自己出一份考卷(想想那些长途旅行的家长们会多么喜欢这个应用!)。
### **位置感知应用**
因为App Inventor提供了访问GPS位置传感器的功能,因此可以构建一个定位应用——知道自己在哪儿;也可以建一个停车应用,帮你记住停车位置(第7章);或者一个找人应用,在音乐会或大型会议时,显示你的朋友或同事的位置;或者一个定制的游览应用,为你所在学校、工作场所或博物馆预置游览路线。
### **高科技应用**
您可以创建以下应用:扫描条码、交谈、倾听(文字识别)、播放音乐、制作音乐(第9章)、播放视频、检测手机的方向和加速度、拍照以及拨打电话。从技术上讲,智能手机就像一把瑞士军刀,并且谷歌的工程师们一直致力于让App Inventor的技术更易于掌握。
### **短信息应用**
“开车不发短信”(第4章)只一个短信处理类应用的简单案例,还可以编写应用,定时向亲友们发送“想念你”一类的问候,或像“广播中心”(第11章)那样的应用,帮助协调大型活动。需要这样的应用吗?让你的朋友用短信来投票,就像“美国偶像”节目那样。这些应用都可以用App Inventor来完成。
### **控制机器人的应用**
第12章展示了如何创建应用来充当LEGO机器人的控制器。把手机当做遥控器,或者为机器人编写一个“大脑”伴随它到处游走。机器人与手机之间依靠蓝牙通信,App Inventor的蓝牙组件也可以创建类似的应用,来控制其他的蓝牙设备。
### **复杂应用**
App Inventor大大降低了编程的门槛,几小时内就可以创建出很炫的高科技应用,但这门语言的功能并不简单,它同样提供了循环、条件以及其它程序及逻辑结构,来实现逻辑较为复杂的应用。在尝试创建应用的过程中,你会惊奇地发现这些逻辑问题是多么的有趣。
### **基于web的应用**
App Inventor也提供了应用与Web之间的通信手段。可以写一个应用从Twitter或RSS订阅上抓取数据,或者打开亚马逊书店的Web页面,通过扫描条码来查询一本书的线上价格。
## **什么人能够创建应用?**
App Inventor免费提供给任何人使用。它在线运行(不是桌面程序),可以在任何浏览器中访问。你甚至不需要手机:内置的Android模拟器可用于应用的测试。截至2011年1月,App Inventor已经拥有了几万个活跃用户以及几十万个应用。
是谁创建了这些应用?他们是程序员吗?有些人是,但大多数人不是。其中最有说服力的例子是David Wolber教授的一门课程。Wolber教授是本书的作者之一。在旧金山大学(USF),App Inventor是计算机科学通识课的一部分,主要针对商务和人文学院的学生。许多参加这门课的学生对数学是既恨又怕,而这门课恰恰满足了学生们惧怕数学的核心需求,绝大多数学生连做梦也没想到他们会编写计算机程序。
尽管毫无经验可言,但学生们依然学会了App Inventor并成功地创建了伟大的应用。英语专业的学生首创了“开车不发短信”应用;两个通信专业的学生创建了“Android,我的车在哪儿?”;而一个国际研究专业的学生创建了“广播中心”应用(第11章)。有一天晚上,在下班后,一个艺术专业的学生去敲Wolber教授办公室的门,询问怎么写一个while循环,此时此刻他意识到,App Inventor已经极大地改变了技术的格局。
媒体也开始关注这一意义非凡的变化。《纽约时报》称App Inventor为“DIY应用创建软件”;《旧金山大学记事》撰文报到了USF学生们的工作:“Google让大正成为应用的生产者”。《无线》杂志描写了Daniel Finnegan——“开车不发短信”的作者,并写到“Finnegan的故事有力地说明:编程普及的时代正在来临。”
如他们所说,这只猫已经跳出来(第一章应用里有一只小猫)。现在App Inventor已经在高中开课;在“挑战技术创新”的课后项目中(面向旧金山湾区的高中女生),在西雅图湖畔学校,以及几所大学的入门课上,都有App Inventor的一席之地。有数千名爱好者、商人、婚介人以及能工巧匠们正漫游在App Inventor的网站和论坛上([http://appinventor.googlelabs.com/forum/](http://appinventor.googlelabs.com/forum/))。想要开始行动吗?不必拥有编程经验!
## **本书中使用的惯例**
本书采用了如下的通用惯例:
粗体绿色文本:代表程序块
斜体:表示email地址、URL地址、文件名、路径名,强调首次出现的术语。
等宽字体:表示Python代码,组件、属性、变量及函数的名称。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-31_55e3d2a3b5600.png) 这个图标表示:测试环节以及测试说明。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-31_55e3d2a4231ad.png) 这个图标表示:提示、建议或一般性注释。
## **如何使用本书**
本书可作为初高中及大学课程的教科书,或有志向的开发者的入门书。全书分为两部分:第一部分是一整套创建具体应用的教程,第二部分是App Inventor指南(手册),后者的编排更像是一部经典的编程教科书。随着学习的不断深入,教程的复杂性也在增加,从第一章的“Hello,猫咪!”——每次点击都让小猫发出叫声,到一个支持Web的应用:通过扫描书上的条码,就可以从Amazon Web Service上获得相关信息(第13章)。
从理论上将,最好是按教程的顺序来学习,但如果你觉得很轻松,那么也可以跳着看。本教程手把手地教你创建应用的每一个具体步骤,并提供块语言的截图来帮助理解,你还可以参考App Inventor指南部分的章节,将有助于巩固对概念的理解。
手头最好有本参考书,因为App Inventor的开发环境占满了电脑屏幕,留给显示教程的空间极其有限。我们设想人们将书放在手边,并跟随教程完成每个应用的学习和创建过程。然而我们同样希望人们能在远离电脑的情况下,花时间来系统地阅读更多App Inventor指南中的章节。
对于教师和学生来说,这本书可以作为计算机科学入门课程的教科书,或者任何一门靠创造来学习的课程的参考资料。依我们的经验,“阅读教程→讨论→创作”这样的顺序会取得最好的效果。所以,第一步先让学生完成教程中的一两个应用,不必要求太高,只要能按部就班地完成就好;第二步可以指定App Inventor指南中的某个章节,在课堂上进行讨论和演说,来减缓学习的进度;第三步要鼓励学生探索:让学生按照每一章末尾的改进建议,在没有具体指导的前提下,对应用做出修改;最后,指定一个创造性的任务,让学生对应用提出自己的想法,然后实现它们。
每章的文件及例子的完整代码都可从这里下载:[http://examples.oreilly.com/0636920016632/](http://examples.oreilly.com/0636920016632/)。
## **致谢**
创建App Inventor开发工具的动机是教育,基于这样的动机,我们坚持认为,通过主动学习,程序可以成为那些闪光的强大思想的载体。因此,App Inventor是不断发展的计算机及教育事业的一部分,这一事业始于20世纪60年代Seymour Papert及MIT的Logo小组的努力,他们设计了众多的活动和计划,来支持计算思维,其影响一直延续至今。
App Inventor的设计借鉴了此前的计算机辅助教育的研究成果,并立足于谷歌在线开发环境。可视化编程框架与MIT的scratch编程语言密切相关,在具体实现上依赖于Open Blocks,它由MIT的Scheller教师培育项目发布,并源自MIT 的Ricarose Roque的研究论文。我们感谢Scheller项目的Eric Klopfer与Daniel Wendel让Open Blocks成为现实,并感谢他们在工作中所提供的协助。将视觉化的块语言翻译为Android上的实现的编译器使用了Kawa语言框架,而Kawa是Scheme编程语言的方言,由Per Bothner开发,并由自由软件基金会发布,它是GNU操作系统的一部分。
作者要感谢谷歌和App Inventor团队在USF、米尔斯学院及MIT所给予我们的工作的支持以及教学上的努力。特别感谢App Inventor技术主管Mark Friedman,项目经理Karen Parker,与工程师Sharon Perl和Debby Wallach。
我们还需特别感谢O'Reilly的编辑们,Courtney Nash、Brian Jepson,还有Kathy Riutzel、Brian Kernighan、Debby Wallach以及Rafiki Cai,感谢他们的反馈和见解。
最后,我们还要感谢我们各自的配偶的支持:Ellen的丈夫Keith Golden,Hal的妻子Lynn Abelson,Liz的丈夫Kevin Looney,David的妻子Minerva Novoa。新妈妈Ellen还要感谢保姆Neil Fullagar的帮助。