本帖最后由 lyf1428 于 2012-4-25 23:23 编辑
微软(中国) Windows 8 Reimagined开发者训练营 会议纪要及心得分享
(V0.15 beta) lyf1428
版本说明:
(本报告为beta版,很多章节并未完善,内容可能随时改变。)
1. 因会议所涉及的VS演示代码在拍摄后极不清晰,几乎完全看不到,而这部分内容又非常重要,小白需亲自实践,然后为大家清晰的截图并讲解,但由于个人时间实在太少,暂无法做到这一点,故砍掉和代码有关的相关章节。此外,为保证文中所有内容都是正确的、经得起推敲与考验的,已写好的部分也被临时砍掉,时间充裕时一定补上,请大家放心。
2. 报告中已引用的PPT并非特别清晰,这个确实没办法,小白已尽最大努力进行调优,最低限度保证每个字至少能看到。高清原始PPTX我是没有的,请感兴趣的朋友不要向我索取。
3. 口语转为书面语的过程可能会产生错误,小白能力有限,望广大开发者们及时纠正,谢谢。
4. 很惭愧,未来得及记录以及被遗忘的部分可能很难再补充,十分抱歉。
5. 非常感谢娜娜(Nakour)为本报告提出了宝贵意见,并更正大量错误。
版权声明:
1. 本报告中所涉及的全部会议资料,包含(但不局限于)任意段落、文本、影像、PPT等内容,版权归微软(中国)所有。
2. 报告内的旁白、解说、桌面截图、额外补充及非会议内直接涉及的相关内容,版权归撰写者(PCBeta -> lyf1428 -> 远景小白)所有。
3. 报告本身目的在于宣传和普及微软Windows 8的开发知识及Metro设计的相关细节,提倡大家阅读学习,但因版权所限,暂不希望此文中的任意段落、内容、图像或全部,出现在远景论坛(PCBeta)之外的其它地方,请务必遵循这一原则,避免法律纠纷,如被转载,一究到底,谢谢。
序言:
1. Windows8最大亮点是Metro,所以这次会议的重点也是Metro,会议一开就是一整天,而涵盖内容之多却绝非一两个月能够轻易消化,各微软高管们非常辛苦地轮班传授Metro理念,以及如何利用Visual Studio 11编写Metro应用。从这一点可以看出:微软下大决心引导消费者接受并喜爱Metro,而最直接的办法莫过于先从开发者入手,引导、鼓励开发者们编写出丰富多彩的第三方应用。
2. 报告内的WinRT及程序讨论章节,更适合已至少掌握一门编程语言并能够熟练应用的朋友,在这方面相对薄弱的朋友,仍可通过浏览Metro设计规范和理念的相关章节,对Windows 8有个全新的认识。
3. 报告中所引用的PPT内容非常重要,字字如金,望大家在浏览时不要忽略。
会议现场:
微软(中国)
微软(中国)F1
微软(中国)F3
会议现场 (1)
会议现场 (2)
会议主讲: 俞晖:微软(中国)有限公司资深市场推广经理、MSDN总编
亓光宇:微软(中国)有限公司开发技术资深顾问
GiorgioSardo:微软总部Windows开发平台高级经理
赵立威:微软(中国)有限公司开发技术顾问总监
朱宏:微软(中国)有限公司开发技术资深顾问
俞晖 - 开场演讲:It's all about developers!
感谢开发者们准时与会,也感谢同事们的辛苦付出,尤其是Giorgio,昨天刚从美国飞来,身体很不舒服,带病参加这次会议……(限于篇幅,寒暄部分省略,望见谅。)
赵立威 - 概述性演讲:与微软一起重塑Windows!
早上好,我们首次在国内,面对广大的开发人员,向大家介绍Windows 8开发的相关特性、整个Windows平台、以及Metro开发的规范、理念。今天,有幸邀请到在座的各位,在第一时间一起了解和探讨Windows 8的开发和设计,让我们一起重塑和构建Windows!
虽然Windows 8仍在开发之中,距离RTM可能还有一段时间,但在市面上,大家已经看到不少支持触控的Windows 8硬件,所以开发者们不必担心开发的应用没有条件去测试,支持Metro体验的硬件已很多,并会越来越多。
大家来看看这个PPT,我们需要关注以下三点:
这个数字有点儿旧,最新的数字是5.25亿,从Win7销售之日起,相当于每秒售出7份Windows,由此可以看出Windows客户市场的广阔性。
移动互联网时代,我们需要新的体验和设计,一会儿Giorgio还会和诸位详细介绍。
由于Metro和以往的Windows UI相比变化较大,会不会给人一种不易接受的生硬感,我们在设计时也考虑到了这个问题:它虽然是单一的、方方正正的,但它更是活动的、交互的,能够拉近用户和设备的关系,让使用者感受“沉浸式”的轻松体验。
每个开发者都希望获得盈利,而Windows 8的Metro应用为大家提供了最佳的盈利机会。
由于太多了,时间关系我给大家简短介绍:
1.活动磁贴——如果你开发的应用足够吸引人,便有机会出现在每一个用户的屏幕上,根据用户的使用习惯,当它们被重新布局时,你开发的应用甚至有可能会被置于屏幕最中心。
2.搜索——我们引入了很多新的特性,应用不仅可以在商店搜索到,同样可以在必应(bing)里搜到,如果用户使用的系统是Windows 8,并且如果你的网站有自己开发的程序,IE10还会在界面下方为用户推送你的应用。
3.Contract——有搜索Contract、共享Contract、系统Contract……由于目前还没有太确切的翻译,我们暂时先使用这个英文叫法,它相当于一种协议,或者说是一种共有的服务封装。
4.云——个人用户的配置文件可以全部同步到云,包括你开发的应用配置文件,越来越多的云特性将被应用到传统的Windows开发理念当中,最大化的利用25GB的SkyDrive。
5.硬件支持——Windows 8支持Wifi、3G、NFC、LTE、4G、传感器、外围设备等等,开发者们需要考虑一下你开发的应用需要具备什么样的特性,让你的应用拥有更高的黏着度。
后面还会有其他同事详细介绍,我简单的提一下应用商店,关于收费应用的分成比例,我们提供的规则,据我所知是目前业界最高的标准,微软只扣除20%~30%的收入作为维护应用商店平台的基本支出。此外,微软会有一系列更优化的措施,使用户容易发现你开发的应用,并提供了ACK供开发者测试,来严格确保消费者获得最佳的应用体验。
全新的MSDN Windows开发中心:
全新的MSDN Windows 开发中心及相关支持,大家可以下载开发Metro应用所必备的 Visual Studio 11 Express Beta for Windows 8(包含Microsoft Expression Blend)、相关的中文开发技术文档以及UX设计指南、程序范例等。同时,微软工程师也会参与应用开发论坛,为大家解答开发过程当中所遇到的问题,促进交流,共同发展。
Metro应用实验室:
从4月16日起至6月30日,微软将在北京、上海、广州等城市陆续建立移动的Metro应用实验室,微软工程师现场对您编写的应用在平板上进行评估、对性能优化、改良设计、程序实现等给予指导性的参考意见,以及对应用是否符合未来发布到AppStore的要求进行建议。 Metro应用实验室在中国大陆范围内共接纳108个团队,每个团队一次评估最多2个应用。要求很简单,您只需提前写好一个可运行的、且并非粗制滥造的Metro应用进入实验室:)
下面,由我的同事Giorgio为大家做下面的介绍,谢谢。
Giorgio Sardo - 关于WinRT的生动演讲
(小白的英语很烂,无法完全领悟Giorgio所讲的全部内容,只能把听懂的部分分享给大家,见谅。)
大家早上好,我是Giorgio,能够和这么多牺牲休息时间与会的开发者们在一起讨论Windows开发技术,我非常荣幸。这是全球第一场微软面对开发者的会议,刚才立威为大家介绍了Windows 8应用的一些Metro理念,并提到了应用商店,我真心觉得这是对开发者的一次难得契机,更是一个新的开始。Windows 8将会改变我们对设备的使用方式,无论是在办公室、街上、公交车还是任何地方,也无论你使用的是台式机、笔记本、平板还是任何支持Windows 8的设备。
可以看到,当我用手指轻触屏幕时,Metro给人的感觉是轻松、流畅的,给大家看看我的“人人”,这里展示了我的好友信息、图片,我来给自己照张照片吧,哈哈。再来看看Metro IE、搜索、消息、画图等应用,这种令人激动的沉浸式Metro风格对于每一个使用者来说都是如此简单,而对于开发者而言,你可以充分利用Windows 8的多设备支持特性,来编写你的应用,包括游戏。
对于传统应用程序,我们仍然可以像使用Win7那样在桌面上进行,你所有的程序将毫无障碍的工作于Windows 8。噢!开始按钮哪儿去了——把鼠标置于左下角,你可以随意切换传统桌面和开始屏幕。贴靠左侧时,便出现切换应用的侧边栏,看,我之前打开的那些应用都出来了吧。如果需要的话,拖动应用到屏幕的一侧,你甚至可以切换到传统桌面而不影响你做其它事情。
这些新特性想必安装过WCP的朋友早已体验,就不做过多介绍了,继续往下讲:
来说说WinRT API 吧:
在Windows 8下,你仍然可以轻松地利用传统的Win32、COM、.NET Framework来开发你的Metro,它为开发者们提供了一个简单的UI模型,并实现符合Metro UI规范的一系列API。从这张图我们能够看出,Windows Runtime不是一个Framework,它是Windows 8引入的一个新的、跨语言支持的公共平台框架,无论你使用的是C++、.NET、Javascript,都可以创建Metro程序,这里我提到的“Projections”概念,它是向.NET、Native、以及HTML/JS提供接口的过程。另外,我们需要使用的命名空间,都是以Windows开始的。
ps:大家仔细看这张图,能够说明很多问题。例如,Metro应用是否可以和传统的桌面程序进行交互?从这张图便可看出,答案显然是否定的,它俩之间的唯一交集就是Windows Kernel Services,而在Core层之上,是完全真空独立的沙箱(不排除以后改变的可能性,但至少目前不会)。再比如说,为Metro实现本地操作功能是否需要WinRT的支持,看图便知,必须通过WinRT来实现。其它问题都可以从该图获得解答,非常重要。
WinRT是Metro的基础,API定义的元数据是基于.NET标准的(即ECMA335)。让开发者选择自己所熟悉的语言和库,为不同语言编写的应用提供一个统一的支持,实际上都是在使用一个统一的模型。它既不是建立在Win32之上的另一个抽象层,也不是为了取代Win32和CLR而生,它和Win32一样,是建立在Windows核心操作系统服务(Windows Kernel Services)之上的面向对象的API。你可以把它理解为“语言映射”(Language Projection)。
下面我们一起做个简单的小演示:
ps:尽管只是一个简单的HelloWorld,但由于Giorgio演示的速度较快,头一次接触Metro开发的朋友可能会一头雾水,且投影在拍摄后显示效果也不是很清晰,所以小白在这里斗胆代替Giorgio,用图文并茂的方式为大家清晰的讲解如何创建你的第一个Metro应用。
一、打开Visual Studio 11 Beta并按如下方式新建一个空白项目:
File—〉new—〉Project—〉Templates—〉Visual C++—〉Windows Metro style—〉Blank Application 项目被我命名为PCBetaLyf1428HelloWorld,此外还可使用中文命名,也没关系。但我发现个问题,不知是不是beta的缘故,Name里不能包含“_”(下划线),否则VS内置设计器在加载XAML时会抛出异常。小白被这个问题折腾了好几个小时,希望朋友们不再走弯路。
二、在写代码之前,小白为大家预习一下预备知识:
一个空白的Metro项目,应当包括哪些文件,他们的作用分别是什么(这方面内容Giorgio未提及,小白用自己的理解为大家阐述),看看左侧的Solution Explorer:
于之前所述,Metro是建立在WinRT API之上的,所以大家需要先搞明白,和传统C++开发相比,我们需要注意些什么:
1.后缀名为xaml的文件:
念法大致为“zai me(在么)”,其实XAML不是多么新的概念,XAML是一种基于XML且遵循XML结构规则的陈述性语言,用来标记创建可视化的UI元件,优点就是在创建界面时方便直观、逻辑清晰且易控,可使用C++、JavaScript直接操作XAML中所声明的对象。所有与XAML一起使用的库都被移植到C++,并编译为本地x86版本,也就是说,使用XAML和C++编写的Metro应用并不是运行在.NET之上,它们和你之前写的所有VC程序一样,被直接编译为x86版本,这是很多关注或猜测Windows 8 Metro的朋友所容易误解的,因此小白刻意说明一下,以便铲除这个误区。
基于C++的Metro,UI全部是由XAML定义的,也就是说,在你的代码中,所编写的重点是逻辑而不是UI,UI设计几乎可以完全依赖于VS11内置的设计器或外置的Blend,通过XAML来实现,我想,这样做的好处更有利于团队的合作开发,你来实现逻辑,我来实现UI,互不干扰。
2. 后缀名为h、Cpp的文件:
这样的后缀名你并不陌生,但不要去考虑将传统应用程序披上Metro的花衣,尽管WinRT包含了许多现代C++程序所用的库,且绝大多数API都是你所熟悉的,但它毕竟是针对AppStore设计的沙箱环境,作为开发Metro的基础,很多操作是受限的,例如:本地文件操作,设备、内存访问操作等等。详细来说:
(1).App.xaml.h、BlankPage.xaml.h:基本可以算是标准的C++头文件,在这里你可以把类和app.xaml、BlankPage.xaml中的XAML相对应。
(2).App.xaml.cpp、BlankPage.xaml.cpp:实现Metro逻辑的部分,不同之处在于,App类中成员变量的作用域是整个应用,而BlankPage的作用域仅涉及到页面类中的当前页面。不知这样说是否确切,但你至少可以这样理解,不会有太大问题。
(3).pch.h、pch.cpp:这个没什么好说的,标准的C++文件,头文件中添加预编译信息,cpp中实现控制逻辑,如果是非常简单的Metro小应用,我们甚至可以不用在这两个文件里添加任何内容。
3. Package.appixmanifest文件:很直观的元数据描述文件,你所编写的应用,可以在这里修改名称、徽标、属性、闪屏等信息,这个就不单独截图了,在VS中点开一看就明白。
以上,是我们在写代码时真正常用的文件,至于包含在Common、Debug、ExternalDependencies中的那些文件,你不要试图去修改它,即便改了也会被二次覆盖。VS11默认不显示*.g.xaml文件,需要在SolutionExplorer的按钮中选中show all files。还有,那个“项目名称_TemporaryKey.pfx”的文件,如果没有特殊需求,建议不要删掉,那是微软授予你的“开发人员许可证”,是证书文件,开发Metro时你需要用到它,除非你有自己的证书(密钥)。
三、切入正题,HelloWorld!
我们的目标是写一个简单的Metro,通过点击按钮,弹出一个标准的Windows 8 Metro消息。
1.双击BlankPage.xaml,VS加载如图右侧所示的UI编辑器,Loading过程没必要等待,你可以做别的事情,几秒钟即可完成。之前所说的,如果你的项目名称包含下划线,这个步骤便会抛出异常。
2.如果你习惯可视化编辑UI,就在最右侧的TOOLBOX中拖拽一个button到上方画面,习惯写代码的话,可在下方编辑框中添加:
- <Button Content="我是一个可爱的按钮" HorizontalAlignment="Left" Margin="557,356,0,0" VerticalAlignment="Top" Width="254" Click="Button_Click_1" Height="52" FontSize="20"/>
复制代码
3.由于我们只实现一个小功能,所以无需向头文件中加任何内容,只需在BlankPage.xaml.cpp中,让刚才那个button实现msg即可,代码可以这样写:
- void PCBetaLyf1428HelloWorld::BlankPage::Button_Click_1(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
- {
- Windows::UI::Popups::MessageDialog^ msg = ref new Windows::UI::Popups::MessageDialog("我很Metro,不是吗:)"); //所有命名空间都是Windows。
- msg->ShowAsync(); //和异步有关的内容,下午的会议中,亓光宇会讲到。
- }
复制代码还没看明白的朋友见下图:
4.Debug—〉Start Without Debugging(Ctrl+F5),运行结果如下: 点击按钮,弹出一个msg。
Giorgio的技术演示部分基本结束,关于应用商店方面的演示,亓光宇会在后面做类似的中文演示,故省略。俞晖上前带领大家掌声表示感谢,并进行五分钟的会间休息,以下是上午场的最后一个环节,由亓光宇讲解Windows Store的相关内容。
亓光宇-关于Windows Store内容的演讲
很高兴大家来到微软,我们来讨论一下Windows Store方面的内容,通过我的介绍,希望大家能够对Windows 8以及它的应用商店有个很好的第一印象。
微软一直在思考,如何与各软件商和开发者重塑合作伙伴的关系,这里所说的“重塑”和我们之前提到的Windows Reimagined实际上是一个概念。其实微软的这个生态系统是非常良好的,包括以前在桌面应用上的合作关系。Windows 8 Store是从原有商业系统中总结出的经验,通过提出了一些更好的想法而诞生的。大致内容包含以下五个点:
一、为发现而设计 大家发现,Windows 8的Metro界面是“沉浸式”的,这种方式能够更好的增加用户与PC之间的黏度,应用商店中包含了聚焦、推荐、浏览、筛选及搜索等功能,我在这里特意提一下,微软将会在Metro版的IE10中提供这样一个功能——当用户访问到大家的推广页面时(例如网站推广),IE10会自动弹出提示,让用户知道你的网站有相对应的Metro应用,通过应用商店进行下载。用户通过点击按钮,便可直达应用商店中你的应用下载界面,而这种推广方式显然要比以前更加方便。
二、前所未有的范围 这方面的数据,刚才立威已经和大家分享,对于现有的Win7用户,我们可以肯定,Windows 8将对这些用户带来前所未有的影响,而这将为大家推广自己的应用带来最佳的市场机会。在全球,我们已经有两百个市场,支持一百多种语言,Windows 8所支持的语言数量甚至会超过Win7,哪怕是小语种。对于支付方式,能否支持人民币支付,这个还要稍等,欢迎大家随时关注微软的最新消息。
三、灵活的商业模式 Windows 8将陆续提供多种应用的商业模式,例如:对用户无任何限制的免费模式,或按时间、功能限制的收费模式。特别需要强调两个比较大的更新——第一,Metro将提供第三方应用内的广告投放系统(在开发时,VS会提供专门的广告投放接口)。第二,Windows 8将原生支持第三方应用支付,我们允许第三方提供相应的SDK以便在应用内部提供支付,这一点和其它的应用商店相比具有明显不同。
四、透明的条款 Windows 8应用商店后端运行的审核系统,与你在开发应用时,VS里自带的前端审核功能(WACK)完全一致,WACK会对应用进行一系列稳定性接口的检查,例如,当WACK检查到应用中含有不稳定、不安全的代码,它们将无法出现在应用商店,即便上传了也会返回Failed,除非你改正过来。
五、最佳的赚钱机会 收费模式的Metro可以自由定价,这一点微软是不会干涉的,只扣除相应的分成部分。
下面,我们来具体讲解Windows Store,让不太明白的朋友有个更清晰的概念:
当我们点开应用商店时,可以看到精品聚焦、游戏、社交、娱乐、音乐等各种分类,同时支持“语义缩放”,这个概念是Windows 8应用的一个比较大的特点,具体是指——同样的数据源可以通过不同的组建方式,方便用户导航、浏览。同时,支持“主题”方式,例如微软之前举办的“首届应用程序大赛”、“电脑上已安装的应用”等,在同一页面列出和主题相关的所有项目,我们将会在不同的市场地区推出不同的专题,以便于开发者更好的推广自己的应用。
我们的原则是30%由微软收取,留下70%全部归开发者所有,见下图:
一旦开发者通过应用赚到25000美元以上时,将变为二八分成,以获得更多的利润。需要说明的是,微软拿到的分成部分,可能需要返回OEM厂商一部分,这样才能使OEM厂商比以前更愿意捆绑Windows 8来销售他们的电脑,从中得到更长期的利润。考虑到Windows整体的用户基础,应用商店对开发者来说将会是一个非常好的机会。定价范围见下图:
定价方式将采用“分段式”,比方说,肯定不会出现“一块五毛三”的价格。
下面来说说Metro应用的业务模式:
比方说,你出版的杂志已有相当一部分用户群的订阅数量,那么这部分用户,你可以把他们直接迁移到Windows 8的应用商店,让他们多一种用户体验和接收渠道,这一点微软是允许的,或者是二次购买,也没问题。广告部分,你可以选择多种途径,例如微软提供的广告投放系统、第三方广告系统、或是你自己写的广告。关于一次性购买,你可以自由决定用户的购买方式。这是非常灵活的,基本上涵盖了目前所有的PC软件销售模式。我们来分享一个来自Windows Phone应用市场的数据,来说明“试用功能非常重要”,见下图:
我们对带试用功能和不带试用功能的应用做了一些对比,数据表明,带试用功能的应用,用户下载量要比不带试用功能的应用高70倍,而10%转化率的概念是,10%的试用者会选择购买该应用,且时间可能非常快,短到几个小时甚至几分钟。从平均数来讲,收入差距将相差至少10倍。
虽然“付费”方式在中国大陆地区可能没有那么受欢迎,但对于全球用户来说,是一个非常好的商业模式。开发者可以仔细考虑一下该模式的价值,需要了解这方面更详细的功能,可以登录Windows Phone 7 Developer Blog。
Windows 8的试用功能包含以上两点——比如说时间限制的试用,在实现时无须添加任何代码,应用商店本身会提供该功能,例如当用户的试用期已到时,应用商店会提示用户是否选择续费或不再使用,这一点是非常方便的。
试用转换功能我们有现成的接口,来看一下实现的代码:
通过isTrial转换进行判断即可,这里使用的都是WinRT的API。
应用内的支付也是一样的,我们可以在整个应用中定义不同的Product,比如说,用户可以购买应用内的一个插件,或是花费5元兑换5万元宝,让他可以继续玩下去,或者是解锁某个功能,例如漂亮的Skin等。
我们可以通过一个XML文件对上述配置进行一个清晰的描述,见下图:
再来讨论广告部分,这是一个很大的话题,比方说我们会制作一些免费的应用,考虑到Windows庞大的用户量,其广告效应也是不可忽视的。
Windows 8在广告策略上也是非常灵活的,你可以自由选择实现广告的各种平台,当然我们更推荐使用Microsoft的广告,通过AD SDK开发者们可以在自己的应用中轻松植入广告。
通过下载SDK,我们需要关注一下它的特性,通过对其中的技术做一个简单的了解,即可实现相应的广告投放功能。在中国大陆地区,将会在未来一两个月内和开发者们见面,希望大家随时关注。
我们给大家展示下Windows 8应用商店后台的ACK页面:
这里包含了你提交给WinStore的应用时的各个检测项目,每项都是PASSED,你的应用才能成功出现在每一个Windows 8用户的应用商店中,如果有一项是FAILED,将审核失败。这里的每一步审批都非常透明,不存在任何人为因素,你可以很清楚你开发的应用到底卡在了哪一步,是稳定性有问题、签名有问题、还是内容不太“和谐”等等。
ps:为了更清晰的演示,小白斗胆插几句——当你安装了VS11时,可通过开始屏幕找到ACK认证工具,见下图:
它的全称为Windows App Certification Kit,只有通过这个工具的测试功能,你才能知道所编写的应用是否满足提交到Windows 8应用商店的条件。
选择第一项,ACK将会检查系统环境及现有应用:
稍等数秒便会列出可检测的所有应用列表,时间长短视设备性能而定:
小白写的D3D Metro应用出现在了列表里,勾选后点击“下一步”:
我试了下,这个过程点开应用的话有可能会出错,所以请耐心等待。
测试报告的格式是XML文件,任意路径保存后即可完成检测:
不用看结果也知道,小白写的简陋应用肯定是通不过的:)
通过检测报告,我们可以很清晰的知道具体哪一项没有通过,例如:我使用了Windows SDK无法支持的API,在应用中调用了kernel32.dll中的lstrlenA,于是便会给出警告“The application is using one or more APIs that are notin the Windows SDK for Metro style Apps.”此外,该程序也不应来自于Debug模式。从“How to fix”中便可以看出ACK的检测是非常人性化的。耐心些,一步一步修改、完善你的代码,早晚会出现在千家万户的应用商店中。
小白插嘴完毕,继续听光宇的精彩讲解:
微软为开发者们提供的应用商店后台,会以图文并茂的方式列出你的应用的被关注度、广告效益、有多少人下载或应用内支付、应用购买等信息,方便大家更轻松的经营和管理你的Metro生意。
下面我们来说说透明条款:
微软不会对不同的类别采取不同的策略,面对所有应用,这个规则是统一的。
为大家分享一些数据,通过比较,我们来看看其中的“机会”:
据统计,Windows用户已达5.25亿,而安卓手机用户为2.34亿,安卓平板用户只有1300万,Iphone的用户量为1.12亿,而Ipad有4000万用户,Mac则仅有3000万用户。
我们将这些数字依据OS进行合并后不难发现,开发者们用同样的时间和精力所编写的应用,最终的用户数量为5 : 2 : 1.5 : 0.3,数量级相差非常悬殊。
“The Only Option!”Windows是开发者们唯一的选择。额……好吧,我感觉我很像搞传销的,尤其带着这个耳麦:)但是大家要把这个想法根植在心,这是前所未有的重大机会。刚才Giorgio也提到了,在座的各位以及所有关注这次会议的朋友,是全球最早涉足Windows 8 Metro技术的先行者,这个先机是难得的,我们的目光不仅要看到国内市场,更要放眼全球,因为大家面对的是全球Windows用户。
这一段讲解完毕,大家可以到大厅中仔细感受一下各种不同的Windows 8设备,并思考如何开发出自己的Metro应用赚到第一桶金。谢谢!
ps:上午的会议在精彩的讲解中结束,感觉时间过得飞快。中午的午餐和茶点很丰富,小白曾参与过其它IT公司的类似会议,尽管Microsoft的整体会议环境称不上是最棒的,但肯定算得上是数一数二,对与会者的照顾十分到位。
Giorgio Sardo - 关于Windows8 web平台的的介绍
各位下午好,上午我们讨论了很多关于Windows 8平台的基本架构、充满商机的Metro应用、Windows应用商店、以及WinRT相关介绍,我们通过利用.Net、C++以及我最喜欢的Java语言可以开发出Metro应用,下面我来介绍下Windows 8下的HTML5技术。 一、比较IE9和Windows 8的Web加速平台
我们先来看看Win7下IE9硬件加速的web平台功能,见PPT:
从图中看到,IE9全面支持HTML5的GPU硬件加速,降低CPU负担来高效渲染标准的Web内容,包含视频、图像、矢量图形以及文本等web元素。而在此基础上,Windows 8的硬件加速web平台添加了更多激动人心的新功能,我们看看蓝色字体部分:
IE10对Web的UI元素和特效方面进行了大量的优化和改良,其中包含了几乎所有CSS3及HTML5新特性,这些新特性在视频及整个多媒体方面将为大家带来更加流畅和丰富的用户体验。 下面我来登录http://ie.microsoft.com/testdrive/Default.html,为大家展示几个小Demo:
都有谁访问过这个网站请举手?呵呵,很好。这里所提供的Demo非常有趣,几乎展示了所有最新的HTML5技术,通过这些Demo,你一定可以感受到IE10的迷人魅力。看一下Windows 8 Web Platform吧:
这个Demo展示了和Web文本相关的各种HTML5特效,右侧用“10”标注的Demo仅为IE10设计。
在3D Transforms中,你可以通过选择各种function以及调节相关参数来查看3D效果的Web文本,例如:通过变化rotateZ轴,可以实现整体文本的旋转,改变scaleY,达到以Y轴为基准的缩放效果等。
这是一个应用CSS3技术的网格布局范例,通过Add任意columns、rows以及改变size来完成网格布局,这在实际的Web应用中将会起到至关重要的作用。
IE10可以彻底解放CPU,把更多的运算工作交给GPU,在HTML5逐渐普及的未来,Windows 8会为用户带来更加轻松流畅的Web体验,更多范例大家可登录该网站进行体验。
上午我们已经提到了WinRT为所有打算编写Metro的开发者们带来了便利,下面我们具体看看如何利用Blend美化你的Web及Metro。
ps:接下来Giorgio演示了如何编写一个Metro小游戏,并利用Blend对项目中的UI、场景、角色进行编辑和布局,因Giorgio的电脑里有现成的项目代码及相关资源,所以小白在这里只能把这部分省略掉了,游戏是大家所熟知的Cut Rope,就是那个割绳子给蛤蟆吃糖豆的游戏。过段时间小白自己在编写Metro游戏Demo时,再将开发心得逐一分享给大家。以下,是两张Cut Rope的开发照片:
无论是开发Metro软件还是游戏,希望大家能够明白的中心意思只有一个——Metro的门槛并不高,千万不要认为由于Metro是一个新生事物,作为开发者的你就要拿出更多的时间、精力、财力来学习这些新技术。只要你了解Web技术、熟悉已经掌握的编程语言,那么你随时可以创造神奇的Metro应用。
俞晖:感谢Giorgio为我们带来的精彩讲解,由于身体不适,我们赶紧派车把Giorgio送回酒店休息吧,下面就是Metro Design方面的内容,Designer们久等了。我来给大家分享个八卦:其实朱宏刚加入微软不久,我一直觉得他没什么影响力,那天我发了一条关于这次会议的微博,朱宏转发了它,于是他的N多粉丝们都说,朱老板都上场了,我们必须支持!实际上,据我了解,这些粉丝基本都是漂亮MM:)下面我就把时间交给朱老板,让他和大家一起分享关于Metro设计方面的知识。额,他还要水喝……
朱宏-关于设计Metro风格应用的演讲
大家好,我是朱宏,主要负责UX用户体验方面的工作。嗯……我发现在场的有女生,女生还要写代码,好可怜啊!
大家知道Windows 8和之前的系统有个最大的区别,那就是为了适应越来越多的触控设备而引入了Metro界面,所以立威在上午也说过,这是一个新的里程碑。为什么这么说呢?接下来我就为大家逐一讲解Metro的魅力所在。
不知大家对Metro有个怎样的认识,它的英文直译是“地铁”,把这个意思放到Windows 8中显然不恰当,其实Windows 8的设计灵感来自Metro——地铁或机场的指示牌,极少使用点缀性的东西来进行修饰,而是用简单醒目、直观明了的方式来表示站点信息、引导信息等内容,它们的个头通常较大,在纯色背景下使用较大的字体外加好看而简约的图标来进行显示。这种设计理念可以方便用户(乘客)在第一时间获取所需要的内容,而不必将注意力分散到其它不相关的内容上来,我们讨论下它具有哪些特点:
这是Metro的核心——“内容重于形式”,自从有了电脑、互联网以及广告设计这些行业,随着工具的增加和大家审美水平的提高,经常会把一件东西设计得特别丰富、华丽,而在设计学中,也存在“信息爆炸”这个概念,我们往往为了“华丽”而加入越来越多实际上并不需要的东西,而用户真正所需的是“内容”而不是华而不实的“形式”,所以Windows 8要在界面设计上进行“回归”。
大家看,这是传统的Windows界面,有任务栏、菜单、标题栏、按钮等等,非常华丽(额……估计是朱老板的鼠绘作品)。
而这就是回归“内容”的Windows 8 Metro,大家可以看到,和传统界面相比,它没有任何与“内容”无关的额外点缀,必要的工具还是存在的,只是第一眼看不到而已。
比方说,当我们上网浏览图片时,我们非常关注图片本身的内容,而网页上的图片边框、阴影投得好不好看则是次要,Windows 8的设计理念,就是让用户“沉浸”在自己所关注、喜爱的内容之中,最大程度减少和内容无关的干扰。
先来说说布局,在Windows 8 Metro的布局方面,我们要求给“内容”留出“呼吸空间”,已安装过WCP的朋友都看到,板块与板块之间的空间并没有过多的装饰性点缀,只是留白。“留白”在平面设计学上是个非常讲究的概念,以往,我们在设计软件UI、尤其是web时,为了同屏显示更多内容,而很“使劲”地塞入更多内容,把寸土寸金的屏幕占满,生怕哪个空间被浪费掉。而Metro的理念则与其恰恰相反,我们不在乎所谓的“版面浪费”,只为用户呈现他们真正需要的“内容”。
删除多余的线条和框架——web设计人员都知道,div套div,再套div,你的“内容”被一个个框架层层嵌套,对开发者繁琐,对用户多余。并不是说Metro禁止使用这些东西,而是尽可能最大限度的减少它们,只留下“合理”的修饰。那么,去掉了这些修饰我们如何来排版?其实,“内容”本身就是一种排版,通过合理的、有规律的利用图文搭配方式,即可实现十分美观的排版效果。我们举例说明:
这是一个传统的RSS阅读器程序界面,基本整合了所有UI控件:标题、Logo、复合搜索、树形导航、列表、滚动条、状态栏……等等,大家思考一下,当你在关注RSS内容本身时,这些功能真的需要“同时”用到吗?答案显然是否定的。那么我们看看Metro的布局原则:
所有信息在屏幕中应当是一种等量的方式,使用户清楚它们的层级关系,因此我们在Metro界面设计上,会对等量级元素(例如图片、标题文本、链接)进行严格的CSS要求。
下面来说说字体方面的讲究:
有人发现这个PPT上展示的内容和传统字体概念上有哪个很大的不同么?举手抢答,没有奖品啊:)
很明显,当大家设计web时通常使用的字体大小单位是pix,那么这里为什么是pt呢?这问题似乎有点儿悬乎,老实说,其实以我的智商需要理解很久才能想明白:)一会儿我会给大家更具体的讲解其原因,不过估计经验丰富的开发者们已经想到了——这是一个“系统适配”的问题。如果一会儿我忘了说,大家提醒我一下,这个问题很重要。
再回到刚才我们讨论的RSS阅读器界面,根据之前所提到的传统布局的不足,我们把UI简化成了这样:
现在,已经去掉了很多点缀性的元素,UI里仅有标题、缩略图及文字内容,总体感觉要比传统界面更直观、整齐。而实际上,这种效果还是不够Metro,缺少“横向流动”的感觉,我们来看看这个概念:
为什么投影、PC屏幕、影院屏幕都是横向的呢?从人体工程学来讲,人的眼睛是横向排布的,所以当看到“横向流动”的画面时便会感觉非常舒服(手机则为了照顾手的人工学而设计为纵向屏)。
此外,当一个物体只在一个轴上进行移动时(例如只沿X轴移动,而Y、Z轴无法移动),则会给人带来“稳定感”,我们非常鼓励横向移动,但并不是说禁止开发纵向移动的应用,只要“合理”即可。这也是为什么应用商店中已有的应用基本上都设计成横向移动的原因,包括“开始屏幕”本身,也是横向移动的。所以,刚才那个改进版的UI还需要做进一步完善:
这就是进一步改进的界面,到了这一步,基本去除了所有不需要的装饰性元素,方块突出“内容”,并设计为标准的横向流动界面。这是最基本的Metro模板,如果你的应用是这样的设计风格,可以说基本上已符合所谓的“Metro”规范。当然,你不需要一定去套用它,这仅仅是个参考而已。
我们继续,刚才提到了要为“内容”留出“呼吸空间”,这就是Metro的“C模型”:
何为C模型——蓝色切线部分,我们可以把它看做一个方方正正的字母“C”,它封闭了上、下、左三个方向,只留出右面作为开放区域,除游戏外,几乎所有Metro应用都有一个无形的“C”支撑着UI布局。关于预留长度的具体数值并没有太严格要求,这幅图所示的上下长度各预留100像素,左侧预留120像素,在你的应用中,不一定非要套用这两个数值,但如果你设计的UI不符合C模型规范,将会在ACK审核时面临一些麻烦(当然,这也需要视具体应用而定)。
几乎所有通过审核的应用都设计为C模型结构,而VS在新建项目解决方案时,默认就是符合这个规范的,见下图:
因此,建议大家对它不要有过大的改动,使用这样的规范反而会节省你在布局设计上要花费的时间。
下面来说说“交互”:
我们在Metro界面上基本看不到工具栏、按钮、状态栏等控件,其实并非没有,而是为了突出“内容”而把它们隐藏起来。这样的规范,将会逐渐渗透到现代应用设计中的每一个Metro UI里面。大家来看看“应用栏”的设计原则:
Windows 8和Windows Phone 7相比,尽管都渗透了Metro理念,但在“交互”方式上却有很大不同,在PC上,应用栏几乎全部需要手动呼出,而Phone 7上则不全是。以上三种应用栏,都是符合Metro规范的,还有一种PPT上没有提到的,就是“分组应用栏”,即通过若干分隔线对应用栏图标进行合理的布局。此外,和手机上还有一个不同的地方就是Windows 8 Metro应用栏图标通常是对齐左右两侧的,而Windows Phone 7则默认居中。
也可以有例外,当某个功能按钮非常重要且被频繁使用的话,则可以把它设计到一个醒目的地方。例如,查公交线路、机票预订、列车时刻时,搜索按钮最好直接置于UI界面上,而不是应用栏内,否则用户会觉得非常不便。
关于顶部的设计,则通常是将内容标题、返回按钮显示其上,以保证UI的整洁,当然,这也是可以例外的,需要视具体情况而定。下面再来说说“弹出”:
理论上,上下文界面是轻量级的UI,仅适合容纳一到两个控件及少量文本,如果你需要在Context上添加很多内容,那么它实际上就不是Context了,你完全可以通过另外的页面或层次来表示它。尽管有些应用在Context上做了适当重写,添加了一条线或一个角之类的装饰物,但我个人认为,VS在默认的Metro上下文UI方面已经很美观并符合Metro风格规范,如果你做过多修改,将可能无法通过审核。
关于“错误”的表示:
在Metro下,报错内容通常直接显示在UI内,而非额外弹窗,这样设计的初衷也是为了符合简单、直观的理念。
我建议大家不要将太多的精力放到设计tabs上,尽管多tabs视图有它存在的意义和价值,但Metro在这方面做了一定的调整,主要原因是第一点——Metro是为了突出“此刻”所需展示的内容,而淡化“稍后”你可能要看什么、做什么。这样的设计更能令用户“沉浸”于当前内容之中,而不是频繁的在各个页面间来回跳转。如果需要有其它的操作,完全可以Back,这就是所谓的“中心辐射型”模型。
看看这张图,展示了“浏览式”应用(而非“工具式”应用)的“中心辐射型”模型,通过“层级”来替换传统的tabs,尽量遵循“简洁唯美”的原则,同时必须满足C模型规范。
“语义缩放”是Metro引入的全新概念,当你用双指做出缩放手势时(非触控设备用户同样可通过键鼠实现),UI便由一个层级变为另一个层级,这就是语义缩放。例如,在开始屏幕上,通过语义缩放实现层级变化,展示出应用组。
缩放的原则是——“内容范围保持不变”,比方说,这里有水果、蔬菜、干果等内容,通过语义缩放,让用户看到的应当还是这些内容,而不应出现服装、皮鞋、饰品等其它内容。
Metro去掉了额外的装饰点缀、不必同屏显示的控件、以及其它无用内容,不仅突出了“内容”,也在性能方面保证了“快速且流畅”的用户体验。在UI的动画特效方面也是很有讲究的,大家来看一下动画制作原则:
操作的迅速、层级的流畅,完全得力于VS自带的Animation Library(动画库),基本上我能想到的关于版面切换、文本载入、图像滚动、按钮变化、场景切换等所需的动画样式,在这个强大的库中已全部包含,你无需再为此浪费时间而单独设计它们。这样做的另外一个目的是,对Metro应用所使用的动画特效进行了一定程度的规范。
最后一句话非常重要——“动画是有意图的,而不是视觉装饰。”动画的意图在于让用户更清楚的明白某样东西它从哪里来、要到哪里去。比如用户从右往左拖入一篇新闻,那么原先的新闻便从左边飞出,反之则从右边飞出,留下的新内容刚好显示在屏幕上而取代原有内容;或者是点击某个按钮时发生的变色下沉特效;再或者是当拖动某个磁贴时,其它磁贴做出的让位特效等等,这些动画的目的只为让用户明白他的行为产生何种结果,希望大家可以很好的理解Metro规范所带来的好处。
大家已经看到,Metro的引入是为了更好的适应触控设备,某些操作(例如滑动、收缩、旋转)从人工学上讲更需要用手指触摸以获得更好的用户体验,而所谓的舒适度是有一定范围的,见下图:
以平板为例,图中有颜色的部分是手指最容易触摸到的位置,绿色部分是操作最舒适的区域,其次是黄色部分,操作相对困难且不太舒适的区域为红色部分。比方说,你把按钮设计在了屏幕最中间,用户需要点击时不得不一手拿平板,而腾出另一只手点击这个别扭之极的按钮,如果他的手中刚好提着东西,则几乎无法完成这一操作。
再比如,你把框架、文本、按钮、图标设计得很小很密,对PC用户的影响还不算大,但对平板用户将非常不便,因为手指的精度很难和鼠标相媲美。尽管目前触控设备的普及量没有PC高,但你所编写的应用是有可能出现在各种设备上的,所以大家在开发应用时,对各控件的布局一定要认真考量,使其更容易被用户所喜爱。
此外,在用户操作时,提供及时的视觉反馈也是非常重要的:
当用户做出某个拖拽操作,即使只平移了一个像素,也应及时提供视觉反馈,而不应是拖过几十个像素之后再做反馈。
ps:小白补充两句,例如,当用户点住某个磁贴时,哪怕只平移了一点点,与其它磁贴间的空隙都会以动画的形式变大,这样做是为了使用户更清晰的看到磁贴间的布局,以便轻松完成排序操作;更细节的例子也是有的,比方说,当用户点住磁贴的左半部分时,方块会产生向左塌陷的反馈,反之则向右塌陷等等。这些特点是Metro的设计规范之一,希望开发者们能够遵循这一原则。
实现贴靠和缩放,对硬件设备是有一定要求的,见下图:
用户总是习惯多任务操作。毫无疑问,Windows本身是支持多任务的,而Windows 8的Metro应用同样可以后台运行,前提是系统所在的设备规格支持该方式。大家在开发Metro应用时,建议支持的最小分辨率为1366X768,也就是说,1024X768等分辨率将不必再考虑,这是因为只有当分辨率大于或等于1366X768时,Metro才可实现贴靠视图,即PPT中第三个图的效果。
肖像即竖屏支持,当用户旋转设备时,你的应用最好也能完好的支持,而不至于排版混乱或出现其它问题,这是在开发时就应考虑到的。在贴靠时,并不是将Metro简单的置于屏幕一侧,而是对其中显示的内容进行重新的布局、排版、甚至由横向滚动变为纵向滚动,这一设计的原则是符合人体工程学的,以便用户更轻松的进行多任务处理。
贴靠是Windows 8本身的一个内置场景,你不需单独对其开发即可支持。一个出色的贴靠视图,可使你的应用被用户长时间保留在屏幕之上,而不至于为了使用其它应用而不得不关闭其一。
“缩放”一直是比较棘手的问题(这不仅仅是手机厂商所考虑的),如果应用内的资源为矢量图形,则根本不成问题,而如果是位图,就比较麻烦了。大家知道,某些系统只支持特定设备,别的机器想直接安装它是相对有难度、甚至不可能的,因此它们不必过多地考虑“适配”问题。而Windows会有不同的硬件厂商提供支持,面对各种分辨率的设备(包括平板),应用内的控件、布局、内容等元素能够较好的进行等量变化(即“自适应”),对用户体验产生的影响是至关重要的。此外,Metro主张滚动布局,这样做至少可以保证在一个轴上无需考虑布局问题。
我们再回到刚才,思考一下字号问题,为什么要使用pt而不是pix。像素大家都知道,一个点就是一个像素,在屏幕尺寸不变的情况下,分辨率越高,字体越小。而pt则是指在单位面积(英尺)下有多少点,与pix相比,pt强调的是面积而不是点,这就保证了当分辨率改变时,字体显示的大小保持不变。例如,无论你设定的字体是4pt、11pt还是42pt,在不同设备上都可以进行准确地等量缩放,而不必担心因分辨率的不同为用户的操作带来不便。
再来说说位图问题,如果你想在Metro应用的页面上精准显示一幅图,必须置入不同尺寸的该图片。举例来说,在1366X768下,你有一张100X100的寸照可被精准显示(而不是放大),而在2560X1080的分辨率下,为了自适应设备,该图片可能会被放大(具体适配规则可参见MSDN上的相关文档),希望保持原图清晰度的话,你需要提供三种规格(即原图、比原图大140%、比原图大180%)的该图片与之相匹配。 Contracts部分一会儿由光宇为大家做更详细的介绍,我就直接跳过去了。
来说说Tile,开始屏幕上显示的Metro图标叫做Tile(磁贴),而Live Tile则不仅仅是显示一个“反白”图标,还应显示你要向用户推送的一些信息,例如天气预报、音乐专辑、股票行情、消息留言、航班信息、新闻订阅、邮件摘要、滚动图片、甚至广告……等等。
这样,当用户登录Windows 8后,在进入某个应用之前便可第一时间看到他们可能希望关注的信息。
磁贴是应用的“窗户”,开发者们不应只把它当做一个图标来对待,它是很重要的应用扩展。另外,Secondary Tile(二级磁贴)也同样重要,例如,用户可以把“人人”中常联系的好友磁贴直接固定于开始屏幕,从而增加了进入该应用的入口,提高了你的应用的被使用率,无论用户点击的是几级磁贴,总之是在使用你开发的应用,所以说这一点非常重要。
“仿佛永远在线”是Metro应用所倡导的规范之一,无论是哪种推送信息,都应及时更新,让用户感觉到他们所关注的内容总是新鲜的,更新不及时的推送等价于没有推送。
通知,几乎在每个应用中都会有,例如弹出提示、聊天信息等,都会临时显示在应用的右上角,而不是长期需要存在的内容。
这就是设计“通知”时需要掌握的原则,我们应把“实时性”极强的信息设计为“通知”,例如新增的聊天内容,如果没有及时显示为通知而导致用户半个小时没回话,他们会抱怨——马上到手的姑娘就这么没了。
当用户同时拥有多种不同设备时,“云”起到同步个性化设置(包含首选项、个人信息、图像数据等)的作用,从而避免用户在不同设备上繁琐设置同一应用。实现方法通常有两种:服务器存储、HTML5本地小数据存储。
所谓“小”数据存储,是有一定范围的,例如,用户在家通过某个应用下了一半高清电影,打算到公司继续下载,目前可能不太容易实现(请勿和“离线下载”概念相混淆)。
这是一个很感性的说法,我们务必遵循Metro规范,才能开发出一个合格的应用。
之前提到过,Windows用户量是最庞大的,当你的应用出现在他们的应用商店中,潜在客户量与实际收入将是其它操作系统所无法比拟的。所以,希望大家多参考国外优秀应用,或通过MSDN仔细学习相关知识,开发出较高质量的、新颖实用的应用,而不应停留在千篇一律的“模板级别”,大家在开发Metro时有必要认真思考,应当如何安排不同样式和功能,来更好的展示其内容。
开发Metro所使用的Visual Studio、Blend已内置了数量庞大的模板、控件及常用元素,大家只需把精力放在所开发的应用本身应具备哪些内容即可,而不必在底层设计上花费无用功。无论是Windows 8还是Windows Phone 7,也无论你使用的是哪种编程语言,在Metro开发方面,大家的机会都是均等的。我们希望在微软优良的生态系统下,开发者们能够推动Metro的普及,设计出优秀的应用,被广大用户所喜爱。
大家通过MSDN可获得Metro开发资源及相关文档、示例,尽管数量还不算很多,但对开发者们的参考性还是很大的。此外,中文化的工作我们一直在做,但可能需要些时间。
问题答疑 1:我编写的Metro应用能否运行在XP或Windows Phone 7上?谢谢。
答:Metro和传统的Win32程序是不同的,无法运行于XP系统上,但能否运行于Windows Phone 7,现在还没有一个太肯定的说法。
问题答疑 2:在Windows 8 Metro中,传统操作系统的层叠窗口和悬浮窗口,是不推荐使用还是不支持使用? 答:从Metro的技术实现上来说是支持的,但我们不推荐。层的概念在Windows 8中被淡化,过多的层次有悖于Metro的设计理念,导致应用缺少“流动性”,同时也不满足由Hub到Spokes再到Details的层级要求,最重要的是,这样的应用可能无法通过WACK的审核。
问题答疑 3:我感觉Metro这种不主张过多层次的风格只适用于浏览型应用,对于工具型应用(例如Photoshop)怎么办?谢谢。 答:这个问题问得非常好,不可否认,目前的Metro更适合浏览型应用,但工具型应用的模板、标准将有别于现有方案,希望大家期待新的Office,以获得重要借鉴。
问题答疑 4:Metro的很多特性似乎过多的照顾了触控设备,对于传统的键鼠用户,某些操作明显不如触控方便,微软如何看待这件事情?
答:这个问题已经上升到了公司的战略层面,目前的Windows 8仅是预览版,我们相信在正式版发布时,相应的硬件设备(指触控显示器、触控笔记本)会逐渐出现在市场上并普及,微软不会陷入有软件没硬件的尴尬局面。
问题答疑 5:应用商店何时为开发者开放? 答:Store在中文区还未开放,即使大家开发出了Metro应用可能暂时也没地方去,何时开放尚没有明确的信息,只希望大家提前做好学习和开发的准备,待开放时,我们的中文应用能够一拥而上,到那时再临时考虑如何开发,必定会错过先机。
ps:十分敬佩朱宏能把这么多开发Metro所需掌握的大量细节,为大家如此清晰透彻的讲解,由衷感谢。接下来是最后一个环节,也是最精髓的部分,由亓光宇主讲。
亓光宇-使用XAML构建Metro应用的相关讲解
技术精粹放到后面来讲,我们是刻意安排的,毕竟好东西要留到最后,大家都是Windows 8的开发主力,也大多是.Net的开发者,希望诸位在这个平台上继续取得辉煌。XAML的开发人员构建Metro应用需要了解的新概念,将在下面的四五十分钟内为大家分享。
大家可能会有疑问,WinForm、MFC还有没有?这里我可以肯定的告诉大家,这些都没有了。Metro的前端目前只支持XAML和HTML,对于游戏开发者仍然可以使用DirectX,DX根本牵扯不到控件之类玩意儿,屏幕上每一个像素都是你的。另外,我推荐大家使用WinJS,因为只用.Net的话可能没那么酷了。
这句话比较坑爹啊,其实大家不听我说这些也都会了,归根到底还是让大家明白,继续拿着你原本熟悉的语言开发Metro肯定没问题,不需要额外抽出几个月的时间学习新内容,你的开发能力在Metro上是可以复用的。当然,区别还是有的,只会比原来更好:)
通过代码手动生成的互操作来调用传统的Windows API,在WinForm和现有的WPF上是这样操作的。
现在我们看到的是演化后的WinRT代码:
大家来看一下命名空间using Windows.Media.Capture,这已经是WinRT对象了,和我们平时经常用到的C#命名空间基本上是相同的。
这就是Windows运行时的基本架构,最底层是Windows Core,当我们在讨论语言架构时,Language Projection这一层是需要重点关注一下的,即“语言映射”,无论使用的是JavaScript、C#、还是C++的XAML,它其实调用的都是WinRT模块,使得不同语言调用的结果、运行效率、兼容性以及控件能力都是完全一致的。
开发者们不需要背新的类名,估计大家在写程序时也不会把所有类名都背下来吧,反正我基本上都是现用现查的。
“Windows运行时和.Net之间的映射几乎都是直接映射的。”这句话我个人是这样理解的:在设计WinRT时,.Net的命名空间和功能已经非常全了,所以WinRT会参考现有的东西,尽量跟它保持一致,尤其在类型和语言特点上。
Windows运行时和.Net之间的大多数差异都是隐藏的,它们之间在新的接口、方式等方面肯定是有不同的,将它们隐藏起来,才能有助于我们更关注Metro应用本身。
映射方面,现用现查即可,没必要过分关注细节。
扩展方法是指WinRT和.Net之间,那些没有被藏起来的细节如何把它补全。
绿框里的Windows.Storage.Streams是WinRT的命名空间,把它转换到我们熟悉的System.IO.Stream方式,则需要调用AsStream()方法,它会把不同的类型进行转换。
这是一个新的说法,我们可以构建混合型的Windows 8 Metro,所谓“混合”是指语言方面的,例如,A模块的功能是读照片,使用JavaScript;B模块的作用是下电影,使用C++,C模块负责更新头像,使用C#,这三个模块,理论上可以合并到一起而组成一个应用,它们之间可以交互。这应该算是一个好消息,据我所知,在其它的平台上,由于支持的语言非常有限,即使在多语言支持下,也不支持混合编程模式,那么我们可能就要面临如何把Object C的代码逐行翻译成Javascript,这肯定是个头疼的问题。
记得在我上学时,汇编语言的老师要求我们编写一个汉诺塔程序,于是我找来一段现成的C语言版汉诺塔代码,逐行将它翻译成汇编语言,搞了好几个通宵,其中的痛苦只有码农们能够理解。现在,通过混合构建,好处是很明显的了,转移、转换和打包将会非常容易,可以想象,在未来,支持Windows 8的库会越来越多。
并不是随便写一个Class并且什么都不加,就可以成为WinRT混合型编程类型,我们需要遵循一定的协议和规则,通过下图来看看这个简单的规则指的是哪些内容:
Visual Studio已经为我们提供了对托管运行时组件项目的内置支持。
能够将“异步”应用到程序中是一个非常好的意识,我来具体讲一下这个重要概念。
传统的应用程序大多是单机的,我们在自己的电脑上处理自己的东西,而随着互联网的发展和普及,更多的程序是需要联网的,例如微博、Facebook、人人等。
这些联网应用都是在线服务的前端展示,有很多场景、数据、图片都需要连接到后端,而它们大多不是实时的,有些操作需要数秒甚至数分钟,这就给前端UI带来很大挑战。我们无法等待当数据传送完毕时再给用户反馈,前端UI的线程必须及时归还给用户,否则便会像死机一样僵在那里不动。
再比如,包括音乐、视频的多媒体场景,即使是本地操作,也不能因文件的解压缩时间较长而使画面僵死,等等。这就体现出了“异步”的重要性。
来看看区别,这里的DownloadData()是传统的同步方法,我们在下载完数据后需要处理它,中间的红色部分为联网时间,这段时间只能Stop。而下面是异步方式的DownloadDataAsync(),无论是事件还是回调,都会带给用户及时的提示,蓝色部分为UI线程所占用的CPU时间间隔。可以看到,第一种方式下,红色部分无法释放CPU资源,如果这段时间是一秒钟,用户的前端UI就死一秒钟;如果是几分钟,UI就死几分钟;一万年就是一万年……:)在异步下,蓝色部分所显示的空隙,使UI线程完全有时间被运行,整个界面仍是流畅的,用户可以到处跳转。当然,这可能是个新问题,不听话的用户总喜欢到处乱点,于是就要加载不同的东西而导致后台繁忙,尽管如此,大家仍应保证用户的电脑不会死掉。如果你写的程序不够好,用户会打电话给你要求退钱,至少给你个差评,所以这个问题很重要。
说到差评,插个题外话,希望大家不要给Metro版的QQ过多差评,客观的讲,“内容重于形式”这句话已经把IM撇在一边了,Metro的设计模型更适合开发浏览型应用,而在Metro下开发实时连接较多的IM程序是比较有难度的,也包括网游。
QQ不是第一个Metro下的IM应用,第一个是Windows 8内置的“消息”。据我了解,QQ的Metro开发团队非常刻苦,在很短的时间内写出这样的程序实属不易,尽管现在的Metro QQ还不太好用,但他们一直在努力完善程序,挑战技术困难。
所以,当一个应用被辛辛苦苦的开发出来并出现在应用商店时,用户的过多差评会直接打击开发者们的信心、动力、甚至灵感。恕我说得生硬些,中国有句老话“笑人不如人”,如果你认为Metro QQ很差,就开发出一个比它更优秀的IM聊天应用吧。如果不能,请多给他们一些宽容和鼓励,换来的将会是越来越好用的Metro QQ。
额……我又跑题了,还是继续讲异步:
其实“异步”这个概念早就有了,五年前我在写机顶盒程序时感觉写“异步”很困难,而现在则变得非常简单,无论哪种语言、哪种平台,异步的方法都是起一个新的线程来处理需要临时处理的事情,完成后通过消息将方法返回给等待中的线程,最后调用回调函数(callback)。我们来看看微软是怎么做的:
这个概念不难理解,我们通过具体代码来说明问题,大家请看:
这两段代码在语义上是相同的,效果也是一样的,大家看看加了await后相当于现有C#代码的什么样子,和我刚才讲的差不多,起一个新的线程,线程完毕后回调。
我是个传统的C++使用者,记得在上学时,运算符就那么几个,现在已经发展到这么多,跟得上时代的朋友都已经习惯这些符号了,可我到现在也没太适应C#的=>,还有JavaScript中的强等符(===),记得刚学时不太明白,输入“=>”居然Google不出来,真是不习惯,所以我个人更喜欢上面这种写法,我只认识等号……额,我说错了,不是Google,是Bing,必应!必应啊!呵呵。
必应呢,是这样,我们也不希望一家独大,搜索引擎的特点是用户使用越多命中率越高。当然,为了查API没办法才用Google,微软马上就会对Bing有大的动作,希望大家除了查API,还是多使用Bing吧:)
跑题结束,继续异步:
异步有两个概念:一个是异步通用的模式,另一个是微软在.Net上的异步。以后到处都是异步,所以推荐大家多多使用异步,这样才能保证你的程序至少不会死在那里,无论后台再怎么繁忙,UI都是有反馈的。
此外,执行逻辑和阅读逻辑是不太一样的,我曾经看过一本叫做《Reconstruction(重构)》的书,里面的核心主旨是“代码的可读性大于执行效率”,为什么这样讲呢?以前,CPU才几十Hz、内存几KB,在这种条件下,程序的性能和算法非常重要;而现在,CPU动辄4核8核、内存8G甚至更高、硬盘到处都是SSD,根本没必要再写一些自己都很难看懂的程序,所谓的“优良”算法可能反而导致你开发过程的效率低下,提高你的维护成本,如果是团队开发,而你写的程序大家都看不懂的话,只会降低整个团队的生产力,很划不来。
从现在来说,会写一个库,已经没什么价值了,如果你能把异步用得非常好,从某种程度来讲才是真正的价值所在。
在C#和VB中,无需使用回调,即可实现异步,具体做法是通过async就能把普通的方法变成异步的方法,再利用await进行回调。
下面说说工具:
WDP在去年Build的时候,当时的Blend由于版本还比较早,所以尚未支持XAML的编辑,只支持HTML和CSS,并不是说Blend不打算支持XAML,而是当时需要急于拿出来而已。现在可以释疑了,Blend对XAML和HTML这两个Metro前端支持得都非常好。
在Visual Studio 2010时,对于XAML的编辑可能和Blend有点儿不太一样,有时感觉VS方便些,有时感觉Blend更方便,可能需要频繁切换,而现在的VS11已和Blend共享同一模块。我认为,开发者们使用VS即可完成所有工作,Blend就留给UI设计者们吧,用熟一样工具就行。
打开Blend——File——New Project,在这里我们可以看到,如前面所说,Blend支持两种Metro前端,在这里我选择XAML,内容类型选择Grid Application,Language选的是Visual C++,OK即可。
稍后便会创建完毕,但我们的XAML没有Design view,这个是和以往不同的,需要先built一下,这是因为早先的Blend和VS,预编译和实际编译的效果并不是很一样的。于是出现下图:
Build之后就没有问题了,在这个过程中,Blend调用了VS11的Link和CL,Metro前端已经可以自由编辑了。此外,Solution Explore所展示的项目内容和VS中完全一样,
1.建议大家使用异步,但如果你学不会异步,使用传统的.Net开发技术仍然可以编写出Metro应用。
2.从C#和VB角度来讲,很多方面和WinRT非常相似,你不太容易感觉出它们之间的区别,和以往一样,会觉得一切都很自然。
3.构建托管的WinRT组件,这一点对Windows Phone 7开发者来说是个好消息,除了前端UI的不同(同样都是XAML),后端逻辑直接迁移过来编译就可以了,当然,本地资源的调用还是需要更换为WinRT接口。
4.异步不再需要回调函数。
5.以可视化方式进行工作(指VS),生产率会更高,直接编辑XAML,将获得更多的控制权,此外,模板提供了Metro应用的基本结构。
6.大家在开始编写一个新的应用程序时,先从模板学起,毕竟要先会走再会跑。对于熟悉MFC、WinForm的.Net开发者,还是需要进一步学习和了解XAML的。本地示例代码非常有代表性,推荐大家仔细阅读。从Windows 8起,在Windows下的编程方向已经非常明确,所以希望大家能够深入了解WinRT。
亓光宇-关于Contracts的讲解
需要实现邮件的分享,或是像“人人”那样的分享,必须使用Contracts。我个人觉得,如果一个应用不实现Contracts,不能算是一个Windows 8应用,另外,不实现Live Tile,也不是一个合格的Windows 8 Metro应用或Windows Phone 7应用,希望大家把这个观点根植到自己的思维当中,并在开发时应用它。
一共是这五方面,大家先看一下Play To,是由A设备到B设备播放的技术,在巴塞罗那时有个Demo,麦克拿着一个诺基亚品牌的无线音箱,通过NFC与Windows 8的PC相连,音乐就播过来了,这里使用的就是Play To技术。
应用到应用的获取,举例来说,当你选取图片时,可以选择从SkyDrive或人人等其它应用中获取它们,这也是一个我们需要实现的Contracts。 下面说说搜索,利用搜索Contracts可以从系统任何位置搜索到你所需的内容,搜索可以全面使用,也可以依赖于场景,轻轻一划即可启用,下面我们做个演示。
无论是传统应用还是现代应用,也无论是基于网络还是本地,搜索已成为应用中最基本的功能,我们需要为用户提供更多选择及数据内容。这是Metro IE下的搜索,从图中我们可以看到,当用户输入关键字时,提供搜索反馈的不仅仅是当前应用,右侧栏列出了所有可参与搜索的应用。例如,当我输入“北京”关键字时,反馈给我结果的不仅是IE,也可以是“Music”中找到的《北京一夜》这首歌,还可以是天气预报中的北京天气,或是“人脉”中和北京有关的联系人等等。
下面看看共享Contracts:
这里额外说明一下,举例用的是Metro IE,实际上只要是实现Contracts的应用都可以做到。看图,共享Contracts,任何一个我所感兴趣的内容都可以共享到其它应用,例如“邮件”、“人人”等。
如果每个应用都使用不同的搜索或共享,由于使用方式的不同会给人比较混乱的感觉,而Contracts实际上是给用户一个统一的使用体验。搜索Contracts,当用户找不到所需内容时,多种搜索途径使他们总能找到可能需要的内容。从另外一个角度来讲,也提高了你开发的应用被用户打开和使用的几率。
在VS工程里的xaml文件,用来声明和注册“搜索”能力或“文件访问”能力(与搜索相关)。
搜索应用被激活,等待用户查询文本的输入,如果有则显示结果视图,没有则保持加载前的状态。
和之前不太一样,用户先输入查询内容并点击搜索,或用户选择一个查询建议,搜索被激活后,该应用获得的是“查询提交”的事件。对于开发者而言,代码需要稍微多写一些,为用户处理不同的事件和场景。
请求建议比较明确,基本上只有一个场景,用户只要输入搜索文本,主屏幕便会得到搜索建议的事件,最后将搜索建议(支持中文)返回给Search Panel。
下面再来说说刚才提到的“共享”:
Windows 8、Windows Phone 7是现代操作系统,它们是把应用运行在沙箱机制当中,带来的好处是实现“沉浸式”体验、以及前所未有的“安全性”,不会再有跨进程偷东西、或是KeyLocker这样的事发生,此外,由于不需要太多后台进程,可以很大程度降低对移动设备的性能要求。
优点很多,不代表没有缺点,很显然,这样做的结果是应用之间被隔离。例如,我希望更换微博的照片,而我的照片存放在人人的相册,那么我需要三步操作:从人人下载好需要的照片;保存到本地相册;打开微博并上传。这种比较“割裂”的机制会为用户带来不便,所以,实现应用之间共享数据的场景非常重要,而Windows 8的“共享”及“应用到应用之间的获取”很好的解决了这方面需求。例如,Windows 8借鉴了Windows Phone 7的share功能,当用户拍完照片后,可以直接共享到人人、微博、QQ等应用中,而无须传统的割裂式操作。
开发者们不需要对应用的共享花费过多精力,Windows已承担了大部分数据共享工作,只要应用之间遵循一定的规则,便可以天然的互通互联。所有的应用都应适应这一趋势,使用户的生活变得越来越轻松、方便,这就是之前所说的——Contracts是必须的,如果你的应用没有Contracts,便无法把Windows 8本身的特性表现出来。
能够“被分享”是一种能力,只有源应用能够支持更多的分享格式,才能确保为用户提供更多的选择。也就是说,共享源支持的多样性(如文本、图像、视频等)内容能够得到更多共享目标的支持。
共享代理是一个系统概念,是WinRT上比较重要的概念,将目标应用激活为shareTarget以便共享,而DataPackage是打包后的共享数据,在处理完毕后返回给共享代理。大家可以看到,左边右边各有一个DataPackage,它们就是通过共享代理进行传输的。
DataPackage能够使用多种格式共享数据(如标准的文本、图片、HTML等),是可扩展的,可以在未来定义为业界公认的格式——大家可以开启自己的想象。
很明显,至少实现当前的share问题不大。
这个比较好理解,比如我们打开应用商店,上面呈现出许多模块和数据,在什么都不点时,默认为用户分享一些信息,这样的场景叫做“演示”。当我点选某个应用后,分享的内容便和首页不同了,这是根据上下文来决定要分享哪些信息的。
共享目标适应的场景目前多为SNS或是一些共享视频的网站等(例如人人、Facebook),用户喜欢发一些杂七杂八的东西。也可能是文字处理,例如用户在某页面找到一段自己喜爱的内容,通过编辑再以邮件的形式发走等。所以说,不应界定自己的应用由于不属于SNS而不做shareTarget。当然,如果你的应用根本不支持某些场景,也告诉Windows我能够被分享(甚至支持所有分享),在每次分享动作中都会出现我,这显然是一种捣乱行为,很好玩:)
注册共享目标时,需要在应用清单中做一些必要的修改。另外,在分享邮件时,UI是需要重新制作的,就是刚才朱宏提到的全屏、附屏、主屏以及竖屏这几种UI,而不是默认就有的。
ps:小白在之前截图中已经提到的那个Package.appixmanifest文件,在那里进行设置即可,设置完之后便会放到这里面,在激活时添加下面的方法(function activated(e)),listen数据和内容。
1. 搜索时需要注重刚才所说的六个场景,以及查询激活事件、查询提交事件、搜索建议、搜索推荐这四个不同的事件,使用户有一个良好的使用体验。
2. 在共享方面,先在DataTransfer上注册,再定义自己的DataPackage,DataPackage概念希望大家能够记到心里。
3. 共享目标,定义共享目标的UI,尽可能的支持更多格式(DataPackage),最后,在appixmanifest中声明可被分享的内容。
时间可能不太够了,这部分内容并不是很多,我简单说一下。
这个Demo我现在可能做不了,先跳过吧。来说说Contracts总结:
我们一定要在自己的应用中,实现shareSource、shareTarget功能。另外,并不是说应用只有一个设置页面,例如Hub页面、Spokes页面等,每个页面都应当有上下文相关的设置,从而避免用户为寻找某个setting而翻来翻去。最后一点指的是Play To和文件到文件的读取,通过之前所讲的意图,希望大家能够领会。
如果大家对相关课程感兴趣,可以通过课程编号来搜索,更多内容请访问MSDN: http://msdn.microsoft.com/zh-cn/windows/ 以及Dev Center,下载Sample Code、SDK等内容: http://dev.windows.com/ 此外,还可以访问build观看在线视频与课程: http://www.buildwindows.com/
俞晖:收场演讲 内容非常多,感谢诸位能够坚持到现在,非常辛苦。此外,给后面的摄影哥一些掌声吧,一站就是一天。
同时也感谢所有线上参与互动的各位朋友,会议圆满结束!
ps:从会前准备、开会、整理、学习、实践、最后到发帖……小白近乎崩溃,目的只有一个,让所有喜爱Windows 8的朋友尽可能多的获得相关信息,欢迎关注远景开发者论坛板块,在下一个版本的报告中,会陆续补充被砍掉的章节,感谢阅读。
|