新書推薦:
《
山西寺观艺术彩塑精编卷
》
售價:NT$
7650.0
《
积极心理学
》
售價:NT$
254.0
《
自由,不是放纵
》
售價:NT$
250.0
《
甲骨文丛书·消逝的光明:欧洲国际史,1919—1933年(套装全2册)
》
售價:NT$
1265.0
《
剑桥日本戏剧史(剑桥世界戏剧史译丛)
》
售價:NT$
918.0
《
中国高等艺术院校精品教材大系:材料的时尚表达??服装创意设计
》
售價:NT$
347.0
《
美丽与哀愁:第一次世界大战个人史
》
售價:NT$
653.0
《
国家豁免法的域外借鉴与实践建议
》
售價:NT$
857.0
|
編輯推薦: |
本书全面系统论述了如何使用微软开源技术ASP.NET Core和跨平台移动开发技术Xamarin 与Apache Cordova 在Azure 云端快速地开发部署一个支持网站浏览和移动客户端的电子商务应用。全书论述了如下主题:1 微软云 端站略2 开源跨平台的ASP.NET Core3 开源跨平台的设备开发4 项目设计和需求分析5 构建开发环境6 构建实体模型7 创建Web API 网站8 创建Web API 服务9 在Azure 上部署服务10 AngularJS 和Ionic11 使用Cordova开发跨平台移动应用12 使用Xamarin开发跨平台移动应用Azure 上的Web App
|
內容簡介: |
本书系统介绍了微软新一代高效、跨平台的应用平台.NET Core 1.0。借助.NET Core,原本只能运行在Windows 上的.NET 应用可以运行在Linux、OS X甚至是UNIX上。结合微软的Apache Cordova 和Xamarin 等工具,可以构建从服务端到客户端的完整开源、跨平台的解决方案。本书主要内容包括微软云 端战略,革命性的ASP.NET Core,开源跨平台的设备端开发,项目介绍和需求分析,构建开发环境,构建实体模型,创建Web 网站,创建Web API,在Azure 上部署服务,AngularJS和Ionic Framework,使用Cordova开发跨平台移动应用,使用Xamarin开发跨平台移动应用等内容。 本书详细论述了利用微软技术快速构建开源、跨平台的移动应用解决方案。本书并不限于仅仅介绍.NET Core 技术,而是向读者介绍如何将微软提供的一系列平台和技术串联起来,形成确切方案进而为用户解决实际问题。
|
關於作者: |
李争:微软中国有限公司开发者体验与平台合作事业部担任技术顾问。专注于微软公有云平台Azure的解决方案和架构设计、Azure应用的实施,以及Azure上的开源技术等工作。曾在微软企业服务部作为原厂技术支持工程师工作多年,承担企业开发者代码调试和技术支持、Web应用前端后端代码调优,以及IIS 的问题诊断、调优、培训等工作。具有丰富的企业客户临场解决严重系统问题的经验。拥有四十多门微软认证证书,涵盖了几乎全部微软开发相关技术,同时也是一位具有十多年丰富授课经验的微软认证讲师MCT。 著有《微软互联网信息服务(IIS)最佳实践》。
|
內容試閱:
|
前言 2016年5月11日,我在新浪微博上留言不是我不明白,这世界变化快啊! 坐在微软的办公室里研究了一宿Ubuntu Linux,五年前想都不敢想,并配发了一张Ubuntu gcc编译开源项目时的截屏。是啊,这个世界变化真是太快了!别说五年前,就是三年前,一直从事微软技术路线的我也没有想过未来将要在Linux 上部署我的应用。微软公司在新任CEO 的带领下开始踏上了新的征程,迅速地开始向开源领域转型。公司向开源领域转型的第一个动作就令人瞩目,微软首席执行官 Satya Nadella 在2014年10月直接对媒体喊出了Microsoft Loves Linux!紧接着,微软在2014年年底宣布.NET Core 要支持跨平台,操作系统囊括了Linux、OS X 甚至FreeBSD,并且将.NET Core 的代码放到了Github 上。然后,微软又推出了广受好评的轻量级跨平台的IDE: Visual Studio Code。至今开源界已经给Visual Studio Code 贡献了上千个扩展插件。进一步,微软宣布SQL Server将在2017年正式支持Linux,并且通过收购Xamarin 公司一举揽收了Gnome和Mono 项目的创始人Miguel de Icaza这种开源界明星级别的人物进入公司微软公司目前已经和开源界展开了紧密的合作,从云端大数据平台到移动端开发,在微软的产品中你都可以看到世界著名开源软件基金会Apache 的身影。现在再讨论要不要开源?要不要跨平台?已经毫无意义了。微软的工程师现在只关心一个项目或者产品的哪部分要开源?要支持几种操作系统平台?为什么要写这样一本书?这是一个好问题!经过这三年微软向开源和跨平台领域的转变,微软已经在开源和跨平台领域构建出了一套自己的技术体系。从服务器端的.NET Core、ASP.NET和Web API,到Web 端的TypeScript 脚本语言,再到移动端的Apache Cordova 和Xamarin,微软已经可以支持开发者使用完全开源和跨平台的技术构建自己的应用。再配合免费的Visual Studio Community版本以及支持Git版本控制的Visual Studio Online,开发者可以不花一分钱就可以在微软的平台上实现基于开源项目的应用程序生命周期管理。在李克强总理提倡的大众创业,万众创新的大潮中,微软现在的开源技术体系架构可以帮助创业者和开发人员大大降低创业的门槛和成本,迅速地将自己的创新想法变成现实。作者编写这本书,主要是为了通过一个非常简单的电商项目,将目前微软开源跨平台的技术体系结构串联起来,帮助创业者和开发人员了解和掌握如何使用微软的开源跨平台技术来迅速构建自己的应用。然后启用微软云Azure 的力量,快速部署和集成,迅速地将自己的技术产品和想法推广到每个用户手中。
本书不是一本单独讲解某个微软开源技术的图书。恰恰相反,本书是把微软开发工具和开发服务(Visual Studio 2015、Visual Studio Online),微软开源开发技术(.NET Core1.0、Apache Cordova、Xamarin)和微软云(Azure)等各种相关技术串联起来的一本书。通过本书读者可以了解到如何利用这些开源、免费的工具和技术构建自己的应用。本书的代码全部开源,读者有兴趣可访问https:github.commicliMuscleFellow 获取本书相关的源代码。同时读者也可以通过访问http:musclefellow.chiancloudapp.cn 来体验已经部署好的网站和Web API。本书的创作始于2016年1月,截止到2016年7月2日。期间,.NET Core 从beta 8 演进到1.0 RTM。种种变化也给作者写作带来极大的痛苦,很多工作在每次.NET Core 新版本发布之后都要重新调整,很多章节的内容也因此全部失效而永远无法与读者见面。如何高效地阅读本书对于已经非常熟悉微软战略的读者,可以直接从第3章开始阅读。对于云计算和微软战略不是很熟悉的读者,建议从头开始阅读。从本书第5章开始,将涉及开发和代码。建议读者从Github上下载代码,再与本书内容对照着学习和阅读。本书适合哪些读者本书适合那些对使用微软技术构建应用以及对微软云平台Azure 部署应用感兴趣的人员,也适用于对开源技术感兴趣的读者。同时,本书对有志于互联网创业,尤其是期望快速搭建应用的创业者极具参考价值。致谢首先,我要感谢我的家人,尤其是我的女儿。在女儿需要陪伴成长的年纪,我占用了大量本属于她的时间去写作。尤其是连续写作两本书的情况下,使得我很长一段时间都没有好好地陪她。我对我的女儿充满了愧疚。此外,我也非常感谢我内心深爱的那个人。其次,我要感谢我的同事刘颖老师和清华大学出版社的盛东亮编辑。本书的成书是和你们的鼓励和支持密不可分的。最后,我还想感谢胡德民Peter Hu 和我的老板赵立威。在最近一年的时间里,胡德民帮我安排了很多与微软开源、跨平台相关的技术演讲,使我有机会全方面地接触微软相关的开源技术,尤其是Xamarin。同时,我的老板赵立威也非常支持我的写作,在写作过程中给予我很大的鼓励和支持。作者联系方式由于作者能力有限,书中难免会有疏失之处,请读者多多谅解也请不吝赐教。电子邮件地址: mic_lee2000@foxmail.com微博: @迈克尔老李
第3章开源跨平台的设备端开发
移动开发并不是一个非常新的命题。但就微软来说,早在20年前微软公司就推出了Windows CE。用户真正熟悉的是Windows CE 4.0和6.0等版本,10年前的多普达686和696是资深手机玩家的必备产品。在Linux阵营,基于ARM架构的版本ARM Linux的发展也有将近20年的历史了。本章将向读者介绍移动开发的历史、特点及主流技术。3.1移动开发简史既然要讲到移动端开发,那么就需要简单了解一下移动开发的历史。本节将简要介绍Windows CE、Symbian、Android三款著名的移动端操作系统。3.1.1Windows的精简版Windows CEWindows CE是Windows Compact Edition的缩写,顾名思义,是一个经过精简的Windows操作系统。Windows CE为了适应移动设备的小屏幕、低功耗等需求,对操作系统中不必要的功能和服务进行了删减,形成了Windows的一个分支。第一个版本的Windows CE诞生于1997年,最早被应用于卡西欧的个人数字助理设备中。Windows CE经过长时间的发展,在4.0版本时日臻成熟。并在4.0版本中首次区分了带有硬件键盘的SmartPhone版本,以及大屏但不带有硬件键盘的Pocket PC版本。微软当时与多家硬件厂商进行深度合作,将Palm OS视为最大的竞争对手。Windows CE后来又出现了多个分支版本,比较著名的有Zune版本。这款名为Zune的硬件是微软用来与iPod一较高下的播放器。之所以要提到Zune,是因为它是第一款应用了Modern App界面又称Metro界面的微软产品,后来Xbox和Windows Phone也相继应用了这套界面规范。Windows CE给这个社会带来的影响是非常深远的,很多早期的ATM自动柜员机都是使用Windows CE版本作为操作系统,直到最近十年才被Windows XP Embedded和Windows 7 Embedded版本逐渐替代。请注意,Windows CE与Windows XP Embedded没有继承关系,它们是不同类型的操作系统。另一个广泛应用的场景是微软与福特合作,在福特全系列车型中植入Windows CE作为汽车的车载系统,至今很多行驶在美国马路上的福特汽车仍然运行以Windows CE为内核的车载终端。Windows CE的最后一个高潮版本是Windows Phone 7.0和7.5。微软在这个版本上将Modern风格的界面作为应用程序的设计标准加以规范并推广。后来,随着Windows 8内核开始直接可以运行在ARM架构的CPU上面,微软停止了对Windows CE系列操作系统的支持和更新。Windows CE的开发早期以Visual C和Visual Basic两种开发工具为主,微软甚至专门推出了针对Windows CE的开发IDE EVCEmbedded Visual C和EVBEmbedded Visual Basic。在20年前,用VC给Windows CE编写应用程序是很先进的。微软甚至允许程序员在Windows CE上面有限地使用庞大的MFC类库。在Windows CE 4.0时代,随着.NET逐渐流行,Windows CE也支持了.NET的一个精简版本.NET CFCompact Framework。不过由于这个.NET版本太过精简功能极度受限,并没受到广大程序员的欢迎。3.1.2工控起家的Symbian在20世纪90年代末期,诺基亚手机以其耐用性和经济性迅速占领了移动电话市场。在21世纪初,诺基亚甚至打出了你每眨一次眼,诺基亚就卖出四部手机的口号。可见市场占用率之高。作为功能机的老大,诺基亚也觊觎智能机市场。于是在2000年前后拉着爱立信、索爱等几家手机生产商共同注资成立了Symbian公司。Symbian早期并没有发明Symbian OS,而是从一家英国做工业控制和自动化的公司买下了它们的操作系统EPOC。EPOC操作系统体系结构完善,架构优良,最重要的是能耗非常低。Symbian在EPOC的基础上加入了WAP浏览器并集成了音乐、图像等系统服务,从而开发了SDK形成Symbian OS操作系统。这款操作系统的EPOC印记明显,在它的SDK中有很多文件夹仍然以EPOC命名。Symbian OS SDK采用C作为编程语言,并支持Visual C 6.0和Code Warrior作为IDE。在SDK中使用Perl脚本语言生成自动化脚本来创建项目文件,同时也通过Perl脚本语言生成自动化构建脚本。这意味着开发者在Windows上面不能使用带有空格和中文字符的路径。Perl脚本无法支持这种路径字符串。Symbian OS是一款专门针对ARM 4、ARM7等ARM架构CPU优化的操作系统。因此,这款操作系统是一款纯32位的操作系统。由于其内核精巧,使得应用程序可以占用较低的内存高效地运行在操作系统之上。作者依稀记得,在Symbian OS的开发教材上,一开始就讨论了一个问题: Boolean Int两种数据类型中的哪一种在Symbian OS上运行更快?由于前一种类型只用一位来表示,因此在ARM CPU处理时要加入补位指令补齐31个零,所以后者更快。针对所有应用程序都要共同使用到的基础功能比如文件读写、音频播放、网络访问等Symbian OS都将其逐个封装成服务。应用程序作为服务的客户端可以创建一个指向服务的指针。当服务使用结束,再将指向服务的指针释放,从而实现了对高资源占用功能的调度。对于开发者来说,这非常像使用COM组件,因此没有什么障碍。同时,SDK中也提供了对应的智能指针的封装类。Symbian OS根据当时智能机硬件规格分为S40、S60、S8090等几个分支。Symbian公司的投资商如索爱等公司再在Symbian OS的基础上根据各自对用户使用习惯的理解设计了界面程序。而诺基亚自己则选择使用了原生的Symbian OS界面。总之,在当时硬件功能有限,电池容量不高的背景条件下Symbian OS是一款出色的操作系统。低功耗、支持WAP浏览的特性都引领了那个时代的潮流。只是SDK复杂,开发者学习成本高昂,同时用户界面简陋,后期无法快速地支持更多硬件规格,这为Symbian的没落埋下了伏笔。3.1.3Android的革命性崛起Android是机器人的意思,中文发音安卓。这款操作系统也不是谷歌自己发明的,而是由一位硅谷的创业大师Andy Rubin在2004年发明的。最早Andy的公司设计了一款智能手机操作系统,这款操作系统在初期被微软看中以2亿美元购买了它的知识产权,并以此推出一款名为Kin的针对儿童市场的智能手机。这款手机支持儿童社交等功能,但市场反应平平,仅卖出400多部。成为微软CEO Steve Ballmer执政期间的一大败笔。现在想想,如果把之前那2亿美元算进来Kin手机可能现在仍是世界上成本最高昂的手机,任何镶钻的奢侈手机也无法与它的单机成本抗衡。Andy Rubin在卖掉第一款智能手机操作系统后,专心研发他的第二款智能手机操作系统,也就是现在的Android。而当时,谷歌已经在搜索领域大获成功,有大笔的资金可以对未来进行投资。谷歌敏锐地意识到,未来将是移动设备的天下,用户在移动设备上的使用时间将大大地超过PC上的使用时间。而此时不抓住机会占领移动设备市场,将会丢掉大部分市场份额。于是,谷歌开发了针对以ARM的Linux为核心的Android系统,非常有超前意识地广泛支持了各种设备规格。3.2移动开发的显著特性相较于服务器端应用开发和桌面应用程序开发,移动应用开发具有几个鲜明的特点。一款移动应用程序是否很好地体现了以下的特点,决定了这款应用的成败。3.2.1用户体验是第一位的与桌面应用程序不同,移动端应用程序的主要输入设备只有键盘无论物理键盘和虚拟键盘,并且键盘的面积很小,无法提供给用户全尺寸键盘。而桌面应用程序不同,用户常用的输入设备是鼠标和全尺寸物理键盘。因此,合理设计用户界面让用户方便地在移动设备上输入就成了决定移动应用开发的成败。图3.1展示的是桌面上用于数学建模计算的MATLAB软件界面。由于可以使用鼠标,这种界面在PC上使用毫无难度。但是在移动设备上就非常难以操作。
图3.1MATLAB软件界面
因此,需要在开发移动应用时充分考虑用户的使用场景,数据能查询或者推算的就尽量不要让用户输入; 可以使用选择器控件的如Dropdown List就尽量不要使用文本框; 非敏感信息,能帮助用户缓存的就一定要缓存,避免同一信息多次输入。在这方面一个极为优秀的例子是微信。微信率先使用移动设备的麦克风作为用户输入设备,把用户读出的语音记录下来以极高的压缩率制成音频文件传给对话的另外一方。这一改变可以说是革命性的,它在方便了用户交流的同时,提高了微信的使用率,也增加了用户的黏度。同时,微信在播放语音时,还可以判断目前移动设备的姿态。如果移动设备在用户耳边,就使用听筒播放语音; 如果移动设备是其他姿态就使用外放播放语音。既照顾到用户通信的私密性又照顾到使用的便利。这样的应用在设计之初,就把用户的体验放在了应用开发需求的最高优先级。另一个提升输入体验的典型例子是二维码。以前用户如果需要用移动设备访问某个网页,就必须要手工用移动设备的简化键盘输入网址。有了二维码,通过移动设备的镜头进行扫描,马上就可以访问网页,大大方便了信息的交流。3.2.2移动设备的资源限制颇多通常来说,移动设备的软硬件资源较PC和服务器来说极为有限。比如iPhone一直只有1GB内存,这一情况直到iPhone 6S才有所改观变成2GB。而在PC和服务器领域,4GB内存在多年前早已是标配。这就意味着在移动设备上做开发的程序员必须对申请的资源精打细算,不能无节制地申请和释放内存。同样的问题还反映在电池上。由于通常情况下PC和服务器都是连接在不间断电源上工作的。在高性能CPU的支持下,算法的效率其实并不是最高优先级考虑的事情。换句话说,在PC上对一万个无序数字组成的数组使用冒泡排序还是快速排序往往只是让用户感觉到程序运行时快慢有所不同,而不会考虑两个算法在功耗上的差距。但是对于移动设备就截然不同了,因为移动设备往往是依赖电池工作的。一个高功耗的缓慢算法,不但会让用户等待的时间显著延长由于移动是设备CPU运算能力普遍低于PC,会让算法的效率差异更加的显著,还会大大影响移动设备单次充电后的使用时长,甚至由于电池长时间高负荷运转导致高发热量造成整个移动设备运行不稳定等状况。因此在移动设备编程领域,开发人员在编码时必须要时刻注意代码对移动设备资源的使用影响,尽量降低软件功耗。其他的资源方面限制还体现在网络带宽和存储空间上。虽然iPhone的最高存储容量已经提高到了128GB,但是这并不是强制性的。因此,开发者在编写移动设备应用程序时既要尽量使用本地缓存减少网络带宽占用,又要顾及本地存储空间的使用量。举例来说,几乎所有市面上流行的新闻客户端都提供了本地缓存清理功能,让用户在移动设备存储空间较为窘迫时可以释放缓存数据占用的空间。3.2.3移动应用程序需要处理移动设备的特殊事件通常,在桌面应用程序中往往只有运行和停止两种状态,而在移动设备中,往往还多了一个挂起的状态。所谓挂起状态Suspended,是指用户在移动设备商将当前运行应用切换成另一个应用程序,但是老的应用程序并没有被关闭仍然驻留内存的一种状态。当应用程序由运行状态切换为挂起状态时,需要程序员保存当前操作会话的临时数据,以便当程序从挂起状态切换回运行状态时将临时数据恢复。移动应用程序生命周期的三种状态如图3.2所示。
图3.2移动应用程序生命周期的三种状态
除了需要比桌面应用程序多处理生命周期状态,移动应用程序还需要及时处理诸如电池事件、网络连接事件以及蓝牙连接事件等。因为移动设备普遍使用电量有限的电池作为能源。因此,需要在设备发出低电量警告通知时保存当前用户操作的临时数据到设备的存储上。又因为移动设备经常因地理位置、海拔等因素导致网络连接频繁地在连接断开状态之间切换,所以在应用程序中非常有必要处理好在网络不同状态下应用程序功能的行为。这些都是作为一个移动应用开发人员编写用户体验良好的应用程序时必须要考虑到的问题。3.2.4移动应用程序需要处理好数据同步和数据冲突的问题在移动应用开发领域中,由于网络条件和网络带宽的限制,往往需要缓存一部分数据到移动应用程序中,待网络条件允许后再把数据批量同步到服务端。一个典型的例子是铁路12306手机客户端应用程序,这个程序每次启动时都要检测服务器上有没有车站和时刻表的更新数据,如果有就先下载到本地进行缓存,如图3.3所示。
图3.312306手机客户端下载缓存数据
缓存数据对于开发人员来说,其实是增大了应用开发的逻辑难度。因为这涉及数据同步和数据冲突的处理问题。对于数据同步,可以使用微软Sync Framework等组件帮助实现,也可以由开发人员自己编写代码实现。但是考虑到数据同步将对业务数据产生重大影响,建议在程序编写完成后充分地进行数据同步测试。3.3主流跨平台移动开发技术介绍各大移动开发平台都有自己专有的开发工具、SDK乃至开发语言。iOS系统使用XCode集成开发工具通过ObjectC或者Swift语言进行应用程序的开发; Android系统使用Android Studio作为集成开发环境,开发者可以使用Java或者C来进行编程。每种平台使用各自的开发工具和开发语言都有各自的考虑,但这样一来给开发商也带来了极大的困扰。使用各个平台的原生开发环境和开发语言使得开发商无法使用一套codebase生成针对各个平台的应用程序。这使得移动应用的开发成本和代码维护工作量成倍增加。在这个互联网创业大爆炸的年代,如果一个重要的产品功能不能先于竞争对手推出,那么很可能就意味着抢占市场的努力就白费了。这是广大创业者所不能容忍的。于是,一些可以使用一个统一codebase开发横跨各种流行移动平台的技术就应运而生了。下面将介绍几款跨平台移动开发技术的杰出代表。3.3.1QT Library介绍QT Library是挪威奇趣TrollTech公司在1994年创立的一套跨操作系统平台开发类库。这套类库基于CC编写,实现了完整的消息处理机制和桌面UI元素如按钮、下拉框等。QT Library创立之初其实不是专门为了移动开发而创建的,而主要是为了解决OS X、Linux、Windows图形用户界面GUI应用程序跨平台而创立的。Linux上著名的KDE就是基于QT二次开发形成的。QT Library为了掩盖各个操作系统平台之间的差异,做了大量的工作。QT Library自己实现了线程类,封装了对各个操作系统平台原生线程API。这样一来,基于QT Library开发的桌面程序通过针对不同操作系统平台的编译,就可以实现一套代码UNIX、Linux、Windows三个操作系统运行。QT Library甚至还开发了自己的IDE,帮助开发者可视化编程。当然IDE本身也是用QT Library开发的。进入21世纪以后,随着移动开发领域的逐渐热络,QT Library也渐渐地开始支持各种移动操作系统平台。其实这也很自然,像Android系统本身也是由Linux发展而来,在初期兼容Android没有太多的困难。2008年,还处在巅峰时期的诺基亚收购了奇趣公司,想让QT Library更好地在Symbian系统上发展。不过后来随着诺基亚的江河日下,QT Library也开始了一段多舛的命运。先是支持了MeeGo系统但MeeGo仅出了一款手机后官方就停止发展了。后来诺基亚将QT Library逐渐多次交易卖给了芬兰的Digia公司,整个QT Library于2012年8月整体移交给Digia公司。自这时起,QT Library开始完善地支持所有流行的移动开发平台。 QT Library目前支持的移动平台主要有:
1 Windows Phonearm;2 Windows RT64bit;3 iOS 8.1;4 Android 4.4;5 Tizen OS。QT Library目前有两个主力版本: QT5.5和QT 4.8。QT Library是开放源代码的,获取源代码请参考: http:wiki.qt.ioGet_The_Source。但是请注意,QT Library的商业授权仍然需要付费,每个开发者授权大概是350美元月。QT Library的首页请访问: http:www.qt.io。3.3.2Xamarin介绍相较于QT Library的奇趣公司几十年的历史, Xamarin实在是年轻。这家成立于2011年的公司,正是看中了当前移动开发平台诸侯争霸中的商机。虽说公司创立才刚刚5年,但是Xamarin公司的技术已非常成熟。Xamarin公司的技术负责人Miguel de Icaza是个大有来头的人物。1972年出生于墨西哥城的他,从20岁起就开始了他自由软件程序员的生涯,1997年创建了Linux上著名的图形桌面环境Gnome,2001年与Xamarin CEO Nat Friedman一起创立了另一个著名的开源项目.NET Mono。读者也一定想到了,Xamarin能够迅速地被开发出来,主要是因为Xamarin是构建在Mono Framework上的缘故。有了Mono Framework的支持,程序界面和代码很多都可以被复用,Xamarin的开发速度大大加快。所不足的是,这样一个模式下,需要为移动应用植入一个运行时来支持应用程序的运行。Xamarin使用清爽简洁、功能强大的C#作为开发语言,提供了一套对移动开发所需要的界面、IO等功能进行了封装的.NET类库。使得开发人员可以像开发WinForm或者UWP应用程序一样开发运行在iOS和Android操作系统上的应用程序。与QT Library比较,Xamarin没有以前桌面操作系统的历史包袱,而是专司iOS、Windows、Android三个平台的跨平台实现。Xamarin同时基于Mono Framework创建了自己跨平台的IDE,称为Xamarin Studio。同时也提供Visual Studio扩展插件,将自己植入Visual Studio中。经过数年的发展,Xamarin已经从一个工程支持一个平台项目的方式,发展到了一个共享工程可以支持多个平台运行的方式,Xamarin将这个大一统的界面库叫做Xamarin.Forms。 Xamarin.Forms显著的特点是它的统一界面库既保持了相对统一的风格,又在细节之处符合各自平台的设计规范。如图3.4所示。
图3.4Xamarin Master Detail视图在iOS、Android、Windows Phone三个平台上的展现
虽然使用托管语言开发,但是经过编译、生成的应用程序其实是原生代码的。因此,Xamarin开发的应用程序具有开发方式统一、运行效率高等特点,并逐渐受到了森海塞尔、JetBlue和博世、西门子等著名客户的青睐。由于Xamarin的诸多特点,与微软的开发技术非常契合。这引起了微软的持续关注,在2016年2月24日,微软与Xamarin签订了收购协议,以5亿美元的价格全资收购了Xamarin公司。这一交易在2016年3月得到政府监管部门的批准,2016年4月微软在BUILD大会上正式宣布了这一消息。图3.5展示了Scott Guthrie与Miguel De Icaza的合影,中间的那位是微软执行副总裁人称红衣教主Scott Guthire,右边那位就是Gnome和Mono项目的创始人Miguel De Icaza。
图3.5Scott Guthrie与Miguel De Icaza合影
随着微软对Xamarin公司收购的完成,Xamarin已经对Visual Studio用户免费开放使用。是的,即使是免费版的Visual Studio 2015 Community,用户仍然可以用到完全功能版本的Xamarin。Xamarin的另一重大改变就是Xamarin代码也开源了!Xamarin是构建在Mono Framework之上的,Mono Framework是开源的,但是Xamarin作为一款商业软件是不开源的。现在微软把Xamarin.Forms全套代码也贡献了出来,放在了GitHub网站上。读者有兴趣可以访问: https:github.comxamarinXamarin.Forms来查看。3.3.3Cordova介绍Apache Cordova简称Cordova,是由Nitobi小组创建一个一套横跨多个移动平台的移动开发框架。2011年Adobe公司收购了Nitobi小组和知识产权,再加入Adobe自己的一些云服务组件构建了一个大名鼎鼎的产品PhoneGap。随后Adobe将Nitobi小组的代码捐献给了Apache组织,成立了开源项目Apache Cordova。之所以被叫做Cordova,是因为Nitobi小组当初办公室所在的大街叫做Cordova大街位于加拿大温哥华。与前两个跨平台开发框架不同,Cordova不是架构在原生界面库上的技术。Cordova是一种寄宿在浏览器上的一种跨平台开发技术。Cordova支持JavaScript和微软TypeScript两种脚本语言编程一个在JavaScript基础上的强类型扩展,从根本上说是同一种语言,使用HTML 5标准渲染界面并支持与移动设备资源交互。从本质上来说,Cordova技术就是用HTML页面与用户交互,用脚本语言表达逻辑运行在移动设备浏览器上的一组动态页面。Cordova的出现可谓是恰逢其时。这里有几个原因。第一,当前主流移动开发平台的浏览器都已经更换为现代浏览器了。微软的Trident,Mozilla的Gecko,谷歌的Chrome和苹果的Safari等主流的渲染引擎都已经大幅度地提升了在移动设备上的渲染性能,并且对HTML 5给予良好的支持。第二,当今是前端技术大爆发的时代。JavaScript和TypeScript有着庞大的用户群体,并且用HTML CSS渲染一个界面比用代码控制容易多了iOS原生开发,界面渲染是基于代码的,再加上不断推陈出新的前端框架如AngularJs,更加方便了开发者。第三,Cordova是开源社区在维护的一个项目,全球的开发者都可以贡献自己的代码给Cordova,大大地丰富了Cordova的功能。Cordova的优势在于可以快速低成本地开发一款横跨多种移动平台的应用,但是由于界面和代码严重依赖浏览器渲染,性能上与原生应用尚存一定的差距。因此比较适合信息展示类的应用程序开发,如商店、新闻、RSS阅读等,不适合游戏开发场景。Cordova对于一般的商业应用来说,已经足够了。它最大的优势就是可以快速开发和部署一个移动应用。这对于创业者来说弥足珍贵,因为创业本身是一个试错的过程。能用最小的时间和金钱代价进行试错,才是创业者的最优技术方案。3.4移动应用开发方式的选择在了解了众多的支持移动应用开发的平台和界面库之后,怎么选择移动应用的开发方式就是一个摆在面前的问题了。本节将讨论如何选择一种恰当的移动应用开发方式。3.4.1Web页面还是App其实即使是一个采用了响应式界面设计Responsive Design的Web网站也可以在移动设备的浏览器中进行完美的展示。比如本书中的示例Muscle Fellow网站,图3.6展示了Muscle Fellow网站在QQ浏览器和微信浏览器中的样子。
图3.6Muscle Fellow页面在移动浏览器中的展示
既然支持响应式设计的Web页面可以在移动浏览器内正常展示,那么为什么还需要开发众多的移动端应用呢?下面来看一个市场调查的结果,如图3.7所示。
图3.7用户在浏览器和App上的使用时间
在图3.7中展示了2013年和2014年手机用户在移动端浏览器和移动端应用上花费的时间比例。在图3.7中,我们可以了解到用户在浏览器上面花费的时间很少,且一直呈现递减的趋势。其中重要的原因是,用户在小屏设备上输入网站地址是一件非常费力的事情,且有那么多的域名需要记忆。而移动端的应用的易用性就在这里体现出来了,只要单击一下图标就可以访问功能了。因此,从用户的使用行为决定了必须要开发移动端应用,才能获得用户更多的使用机会和时间。有了这个结论,下面就是要讨论怎么开发移动应用了。3.4.2移动应用开发方式的选择其实从微软技术层面来看,总结起来移动应用的开发方式有三种: HTML JavaScript、Java和C#等高级语言开发、CC开发原生程序,如图3.8所示。在这三种方式中,位于上层的HTML JavaScript虽然最简单,但是对于移动设备访问能力是受到一定限制的,同时性能上也没法与原生的CC编写的应用相比。位于底层的CC编写的移动应用虽然执行效率好,但是适配能力和移植很弱,一旦有新规格的设备出现,就需要通过修改程序来进行兼容。
图3.8开发方式的选择
那么在这三种方式里面应该如何选择呢?其实发挥决定性因素的不是技术本身,而是开发的成本。开发移动端应用的成本不仅包括财务成本,还有时间成本。尤其是互联网应用,在一个创业想法有多家对标公司在同时抢占市场的情况下,谁能最快地推出应用,谁就能占得市场的先机。从开发成本上看,居于最上层的HTML JavaScript的方式可能是最低的,而位于最底层的C方式是最高的。首先,从人力成本上说,一个懂得HTML JavaScript的前端程序员要比会写CC的程序员好招聘得多。HTML JavaScript需求远大于CC。其次,从开发方式和API来说,用脚本化的语言描述一段逻辑本来就要比CC简单很多。这就导致了图3.8中三种模式开发成本自上而下地增加。而出于对性能的一定需求和对硬件访问的需求,位于中间层次的.NETC#方式是更加均衡的一种方式。本书既然讨论开源和跨平台,那么位于底层的CC就不在讨论范围之内了,剩下的就是Cordova和Xamarin两种开发方式。它们都开源,也都可以横跨多个移动平台。3.4.3Cordova还是Xamarin这个问题就比较难回答了。因为这两种方式各有优长。另一个市场调查数据告诉你Cordova程序员为什么当初会选择Cordova,如图3.9所示。位居前三的理由分别是: 使用了它们熟悉的编程语言HTML JavaScript,可以跨平台,性能还可以接受。也就是说,程序员选择Cordova的最根本原因是技术背景。用Cordova开发移动应用和做网页差不多,其学习曲线平滑,很快就能掌握,并且运行性能也还可以接受。
图3.9Cordova市场调查数据
那么为什么会选择Xamarin呢?总结起来,Xamarin吸引程序员的理由有以下几条:1 可高性能地访问本机API;2 支持强类型和面向对象的开发;3 用户界面设计支持控件拖曳; 对于Windows开发者,没有必要学习JS或HTML;4 iOS和Android界面设计也支持控件拖曳;5 使用XAML定义界面布局和自适应布局;6 基于Mono,完全开放源代码。那么什么时候适合使用Cordova而什么时候适合使用Xamarin开发移动应用程序呢?总结起来可以用下面几个条件来帮助你在Cordova和Xamarin中如何选择。Cordova技术通常适应的场景:1 移动应用在不同的平台之间界面保持较高的一致性,不需要为特定的移动平台定制界面;2 与移动应用对应的服务器端Web网站可以共享界面元素资源;3 开发人员有HTML5 JavaScript开发背景。Xamarin技术通常适应的场景:1 Xamarin.Forms可以帮助程序员实现特定的应用界面;2 开发人员背景是.NET技术背景,尤其是进行UWP应用开发;3 应用运行需要较高的性能,比如要开发一款游戏。不管开发者在Cordova和Xamarin之间怎样选择,它们现在都是开源且免费的!本书的最后三章将介绍如何使用Cordova和Xamarin来开发移动端的应用。
|
|