颤振:好的、坏的和丑陋的
创造了我的第一个应用程序使用颤振,我权衡技术的利弊对其他大型跨平台开发的竞争者——本地的反应
去年的这个时候我发表了的文章和我的印象本地反应风靡一时,在2016年和2017年,Facebook等公司,Instagram,特斯拉,沃尔玛,Airbnb, Skype和更多调查,甚至实际实现应用程序(或部分)。
但今年,反应本地似乎失去或已经失去了它的吸引力,与一些著名的公司已经宣布放弃它(查看这篇文章Airbnb的加布里埃尔脱落,或这另一个Udacity的内特伊贝尔)。与开发人员和从发表的文章,或者从招聘人员寻找在LinkedIn,看起来就没有那么热了。需要澄清的是,它没有死,没有工作所以对一些公司并不意味着它不会为别人工作。许多这样的公司用它在应用程序的部分而不是全部,这是其中一个原因是如此复杂。然而,不能否认,如果大公司为技术(通过书面形式的流行和创造流行的开源库)最终决定离开它,它有一个对社区的影响。最低,团队以前观望使用它有一个容易的决定,使用上述等帖子来支持他们的论点。
但在2017年发生了别的事情。谷歌公开发布的早期alpha版本的跨平台移动应用技术,颤振在Google i / o开发者大会上。快进到今年的会议和品牌宣布颤振准备生产,有一个在9月底预览版2。读完整的公告在自己的博客上,以下是一些最突出的结果:
- 最后发布的主题像素级的iOS应用程序(虽然以前主要是关注Android的材料设计)。
- 注意应用的减少包的尺寸,最小的Android应用程序现在只有4.7 mb当建于释放模式。
- 颤振,开源以来,进入前50名的名单最活跃在GitHub回购。
- 一些大公司正在使用它,比如阿里巴巴(安卓,iOS)、腾讯(安卓,iOS)和谷歌广告(安卓,iOS)。也有一段视频在阿里巴巴如何使用颤振建立其项羽应用(安卓,iOS),目前在中国5000万多个客户使用。
- 这个图表显示了颤振是得到很多动力堆栈溢出:
这对我足够的检查,了解它,并创建一个真正的应用程序(因为,一如既往,只是阅读的文档并不足以让一个真正的新东西的感觉)。它确实帮助的上周五月ASOS科技的发展,在整个技术部门——将近一千人免费调查任何新技术我们感兴趣。
你看到一些屏幕(Android和iOS)这个页面的顶部,和可以下载安卓版本的游戏商店——反馈是赞赏!
颤振是什么,它做什么?
- 这是一个开源软件开发工具包(SDK),由谷歌开发,快速构建iOS和Android应用程序,分享大部分的代码。它的工作原理与Android和iOS sdk,这也意味着你还需要一个iOS macOS机器制造(就像你反应本地和Xamarin的)。安装Android非常光滑的对我来说,我只是跟着网站上的说明和使用颤振的医生的命令,但我最初与iOS设置有一些问题。这篇文章通过Laxman萨尼帮助设置正确。
- 它使用飞镖的编程语言也由谷歌开发的。是的,学习另一种语言,但别担心,这是超级简单如果你熟悉Java, JS,芬兰湾的科特林,迅速或c#。
- 应用程序提前编译为本地代码在运行时,而不是在本地的反应。这给了因为有更好的性能没有JS桥在中间来解析和执行代码。但是这也意味着没有无线更新选项通过下载一个新的束JS代码在运行时。
- 而不是一个包装器上的iOS和android原生UI组件(本地和Xamarin的反应做什么),真的”屏幕上的吸引UI从头帆布的通过快速c++ 2 d图形库Skia(这也是Google Chrome的图形引擎,Chrome OS, Android, Mozilla Firefox和Firefox操作系统,和许多其他产品)。Skia项目始于1996年2005年被谷歌收购,虽然在BSD许可下发布,任何人都可以使用它。这巨大的后果——我讲下面的利弊。
- 类似于本机反应,颤振是也基于单向数据流的架构,或反应性编程短暂,但很明显这里介绍的通过伊丽莎白Denhup。用更少的话说,应用程序对用户输入的响应通过改变变量/属性(或更一般,屏幕的“状态”或视图),和UI是按照国家新重新呈现。函数不改变UI(的颜色按钮,文本的标签,一个列表的内容,等等),直接。
- 再次,同样反应本地,有热重载(感谢上帝)。你只是改变一些事情在代码编辑器中,保存,iOS和Android上的UI刷新emu或sim卡。方便和快速,很难回到一旦你不妨试一下,它弥补了事实,以编程方式创建UI,因此没有可视化编辑器。
- 颤振是可扩展与第三方插件添加新custom-drawn UI组件或包装特定于平台的特性所覆盖的内置类(如:视频/音频、货币化、存储、相机、增强现实、机器学习等)。这是最好的收集插件我发现。有很多,但不可能需要。
- 与前面的点,颤振相对容易编写特定于平台的代码通过检查后执行不同的代码Platform.isIOS和Platform.isAndroid(如果有区别的UI小部件要实例化,或逻辑.dart文件),或者通过编写自己的本地插件(如果你真的需要包装特定于平台的功能不颤振已经提供的)。
- 也链接到7点,典型的应用程序的性能不应成为一个问题(至少在发布模式下,调试模式明显慢,因为它使用一个虚拟机运行飞镖代码),作为UI是由一个快速低级c++写的自由,和其他功能映射到本地同行。但是,你必须这样做,通过最小化重绘的数量和重绘实际上只有部分取决于改变状态。指这篇文章通过安德里亚Bizzotto和这另一个通过西蒙•莱特福特了解更多。
- 你可以使用任何文本编辑器和颤振命令编写和构建应用程序,但是推荐的方法是使用一个编辑器,它支持颤振插件,即Android工作室(我的选择),VS代码或易达利J。这使您智能感知,自动完成,一些调试工具和备件,您需要使用命令行编译和运行应用程序。
为了了解性能和颤振应用程序的外观和感觉相比,本机应用程序,下载颤振画廊应用从播放存储(也许看它源代码在GitHub上)。另外,请参考小部件目录页面在官方的文档。
良好的
- 这一事实颤振是自己的界面图而不是一个包装特定于平台的本机组件既有优点和缺点。pro是如果一些以某种方式呈现您的测试iPhone与iOS 12,例如,它应该以完全相同的方式呈现,不仅其他iOS版本还在Android手机吗。本机或Xamarin的反应,UI组件有许多属性仅支持在一个平台或其他,或者他们但翻译以稍微不同的方式支持本地同行在幕后。这意味着你要么需要测试大量的设备和操作系统版本(和可能编写特定于平台的代码来解决某些情况下),或者只是知道它看起来破碎的(或者至少不同的对一些用户来说)。应用程序甚至可能崩溃如果你使用一个属性或功能,不支持在一个特定的操作系统版本。与颤振你会更安全(至少对于UI应用程序的一部分)。你仍然应该检查应用程序在多个设备,特别是如果你使用第三方插件,映射到底层平台的本机组件。将这种情况如果你使用音频/视频、推送通知,应用内计费等)。这种方法的消极的一面是覆盖在本文的下一部分。
- 热重载太有用,这是一个开发者的梦想成真:⌘+ S在编辑器中,和应用程序重新加载在sim秒!再见的构建/等待/运行/等待/测试/重新开始无休止的过程。在现实中你仍然需要重建资产和插件,当你改变改变在导航,状态初始化或逻辑,但大多数UI更改应用立即在应用程序运行时。对于应用大量的用户界面,这就是你把大部分的时间。
- 我喜欢的总体原则小的可重用组件,对“国家”的变化,这也是反应和反应的原生的核心思想。活性应用程序也可以在纯iOS和Android开发的发展当然,但它是更容易和更自然的摆动(RN)。这是因为它的的核心技术,而不是由第三方提供的东西libs和在许多不同的方式来实现。
- 飞镖是简单但强大的和完整的语言,类似于迅速、芬兰湾的科特林或Java。异步编程与异步/等待/未来是一个微风,也感到完整和一致的(我不能说相同的JavaScript)。
- 颤振和飞镖的内置支持单元测试逻辑,小部件测试对于UI /交互。例如,您可以发送丝锥和滚动姿态,发现孩子在小部件树小部件,阅读文本,并确认小部件属性的值是正确的。的官方文档做一份好工作,清楚地展示什么是可用的。这篇文章通过德文郡卡鲁显示了颤振插件使其融入你的所有代码编辑器。
- 我爱内置支持主题应用程序的UI的方方面面。最困难的部分在我的应用程序创建光明与黑暗的主题实际上是选择正确的颜色(我创建了两个,但可以用同样的方法创建了10)。的代码,它只是几行(基本设置主题财产的根MaterialApp对象-看到了一个完整的例子)。
奖金:这是一个利用任何跨平台技术在现实中,不只是颤动,但我还是要提一下:创建一个平台同时应用使它更容易保持一致。与传统的开发过程中,你可能会同时发射两个平台和功能平价但然后过了一段时间后,你会意识到,一个平台表现优于其他(在下载方面,销售,广告收入,…)。然后你开始削减成本,这意味着一个是部分留下。
不太好的
我不得不说我没有找到任何应该保持在一个“坏”或“丑陋”部分,但这里有一个清单的东西不是那么好,至少从某些角度视图:
- 正如前面提到的几次了,颤振描绘自己的UI定制方式,它不会创建本地组件。它确实很好地复制Android的材料设计和iOS-specific组件的库比蒂诺库但还不是本机。这有一些影响,如:
(A)如果iOS 13改变了分段控制或UISwitch呈现,你的颤振应用程序使用CupertinoSegmentedControl或CupertinoSwitch留着旧会直到你更新和重建颤振。可以认为,许多用户不关心(我的大多数non-techy朋友不关心,甚至不会注意到,例如,他们只关心应用程序看起来很足够,而不是是否符合操作系统100%的纯外观和感觉),但它可能是一个血色交易如果你是个纯粹主义者。
(B)如果您计划使用颤振的一个现有的应用程序(这是覆盖在颤动的wiki,在这里在一篇文章中,Tomek Polański,在这里在一篇文章中,Jan Reehuis),你可能会看到一个本机部分和颤振部分之间的区别。这可能麻烦你(和你的用户)。更少的新应用100%的问题当然颤振。
(C)为你让事情尽可能简单开发,并假设用户不关心本地的应用程序,你可以使用MaterialApp(使用材料设计组件)和Android和iOS编译它。它就能顺利,尽管非外观,它实际上是为我的应用程序。如果我所做的,相反,你关心这个,决定使用MaterialAppAndroid和CupertinoAppiOS,你会复制大多数(如果不是全部的话)UI的代码(这可以是一个相当大的应用程序的一部分),你会使结构更加复杂。仔细考虑这个,决定是否这将是值得的。 - 这是一个不错的漂亮的列表UI组件和其他插件GitHub上,但这是没有丰富的插件可以找到本地甚至Xamarin的反应。可能只是因为颤振远新,较小的社区,但事情就是这样。选择是有限的,许多插件都老了,没有维护,也许甚至不工作了与当前飞镖/颤振的版本。一些组件(尤其是非ui,地图特定于平台的特性)只有对iOS和Android,但不能两者兼得(通常他们支持Android,因为Android开发者更倾向于比iOS开发者,颤振颤振以来来自Google)。没错但是填写空白和编写特定于平台的代码只是为了丢失的平台仍比从零开始,事情肯定会提高如果颤动持续变得越来越流行。
- 调试并不是最好的。您可以使用打印/debugPrint语句,查看日志,并使用工具来配置CPU /内存或视图层次结构的可视化,但是我们在不同的行星相比,你做什么在Xcode中或Android工作室使用原生sdk。(更多关于你的选择的这里的官方文档。)
修正:许多人报道,这个观点是不正确的,您可以使用断点,单步调试的代码并检查变量值就像Java /芬兰湾的科特林Android。这适用于Android工作室和VSCode。好消息,) - 屏幕或错误日志,当有一个布局错误(或下级别的东西)可以非常混乱和模糊,因为它指向的某些行代码框架,可能是你们很多的抽象级别低于直接相互作用。本机iOS和Android,错误通常是更清晰的理解,,如果不是,你通常可以复制和粘贴完整的错误在谷歌和合理相信你会得到一个有用的链接列表,告诉你更多。与颤振,因为社区仍然相对较小,并非如此。
- 以编程方式创建UI(在同一个屏幕.dart文件代码)是容易的和直接的。这也意味着没有太多分离。我更愿意创建UI标记代码(类似于原生Android应用程序)你做什么在单独的文件中。
- 在Android上,绝大多数的开发人员使用干净的架构和MVP (model-view-presenter)。在iOS, MVC, MVVM (model-view-viewmodel)或毒蛇。在这两种情况下(但更多的Android)有明确的和众所周知的架构模式已被证明适合大型应用程序。对颤振(本地)反应,感觉一切都还在定义,没有“标准”或“已成为举世公认的真理”建筑的方法。所有的文章显示简单的样品,这是正常的,因为他们仍然需要人们机载前讨论更高级的方面。然而,如果你计划使用颤振对于一个相当大的项目,这将是比有一个清晰的想法如何构建它,所以它是可伸缩的,容易维护随着应用程序的增长的规模和复杂性。我强烈推荐看这个视频从布莱恩·伊根开始深入这个(包括分层代码,回来的和测试),并检查了他样品在GitHub上。我也推荐这个篇关于溪流和RxDart通过迪迪埃Boelens和其他文章对回来的和整体建筑评论。再一次,我绝对不是说颤振不允许您构建应用程序用干净的和可维护的架构,但是会有一些试验/错误/实验/研究,因为它不是一样成熟和广泛使用的我们习惯了在本地iOS和Android应用程序。
结论
我几乎可以复制粘贴我去年写的自然反应,但是相反,这是链接到我t。总结:有很多潜力,很容易开始,实际上创建真实的东西,还有很多好的原则和想法。然而社区仍然是小而零碎东西失踪的跨平台的插件,或在最好的情况下没有多少选择。同时,你一定会没事的,你不会有100%的本机外观UI,并且如果你想至少是尽可能为iOS和Android,代码和结构会更复杂。
就我个人而言,我认为这是一个非常有用的技术已经可以使用()的情况下:
- 你必须尽快到达最广泛的用户群可能——说白手起家创业,想释放的平台。看看在一个或两个牵引,然后投入更多,波兰等。你可以认为这是一个非常先进的原型,它可以进一步抛光后仍然保持在颤振或取而代之的是本地版本和一个专门的团队。
- UI并不是最大的问题——例如企业/ B2B应用程序,你想要一个业务线应用程序,员工/客户可以使用任何类型的设备,但不太关注它在操作系统符合一切生态系统。这是Groupon的商人(但不是最终用户)的应用程序,例如。
我能说最后是创建第一个简单的应用程序非常愉快在大多数情况下,尽管我已经开发出不少iOS和Android原生应用在过去,我相信我花了更少的时间在颤振(尽管我开始没有的知识)会比我创建两个单独的本地应用。不坏,我想说!
我是谁,我该怎么做?我骄傲地工作在移动解决方案架构师团队@ASOS.com(iOS应用程序|安卓应用),我们一直在寻找熟练,友好和有才华的开发人员想要影响顾客在线购物的方式。ASOS是最大的在线零售商在英国,让我们成为真实的,世界上最好的技术和时尚公司。我们使用的一些技术迅速iOS, Android芬兰湾的科特林,反应和节点web前端,. net和Azure的后端。颤振(和反应本机在此之前)只是我个人的实验。如果你听起来很有趣,你碰巧住在美丽的伦敦(或愿意移动——毕竟,这是最好的城市在欧洲,除了一些在意大利!),做的取得联系!
注::我也为孩子创造教育游戏与团结,为了好玩:)如果你有3至6岁的儿童,给予雅皮士一试!