Tag: Flutter

Flutter vs React Native-您需要知道的。 – openGeeksLab的Dmytro Dvurechenskyi

Flutter vs React Native-您需要知道的。 先进的工具不时需要现代流行的移动应用程序来实现它们。 因此,专业开发商努力满足这一领域的实际市场需求。 最有趣,最有用的创新成为讨论的主题。 React Native跨平台于2015年在GitHub上作为开源发布,结合了Android和iOS本机API。 尽管它具有无可置疑的好处,但是我们可以肯定的是,您一定听说过另一种有趣的,不寻常的编程方法-Flutter,它是Google对标准技术的高级答复。 这个新的用户界面于2017年启动,旨在在创纪录的时间内制作iOS和Android版本上的高质量本机应用程序。 什么是颤振? Flutter是Google对React Native的回应,我敢肯定您一定听说过它。 在Flutter发布之后,各种移动开发社区开始进行比较讨论,其中“ React Native或Flutter”是使用JavaScript开发跨平台移动应用程序的最佳框架。 但是,这很容易。 Flutter允许Google开发人员同时使用完全相同的代码同时为iOS和Android构建应用。 对于Flutter来说,这听起来像是一次巨大的飞跃,但要赶上React Native仍然有很长的路要走。 目前,对React Native开发心存疑虑的开发人员甚至没有认真考虑Flutter。 尽管我相信Flutter可能是移动应用程序的未来。 关于Flutter的5个快速总结: –这是Dart语言。 说什么飞镖? !!! 那是大多数开发人员的反应。 –推荐的带有Flutter插件的IDE是Android Studio或Intellij Idea。 – Flutter具有Dart桥,应用程序较大,但运行速度更快。 与带有Javascript bridge的React Native不同。 – React Native和Flutter共享类似的范例,例如事件处理程序和类扩展。 – Flutter的动画和安装体验分别非常出色和流畅。 大多数人在初次熟悉Flutter时会问的问题是“它像React Native吗?” 为了回答这个问题,我们的开发人员Viktor Gavrilov驾驶Flutter旋转了一下,这是他的发现: 在添加软件包时: 在Flutter中,所有内容都会自动连接。 但是,在React中,某些本机模块是手动连接的。 我们通过内置的“程序包管理器”连接程序包,因此不必像通常那样通过Xcode CocoaPods,React Native链接进行连接,而是通过npm将程序包连接到RN。 我们添加到pubspec.yaml。 该包,我们之前在https://pub.dartlang.org/flutter中找到并执行以下命令: “颤振包得到” […]

Flutterのアプリアイコンを环境ごとに分ける

本记事では,Flutterのアプリアイコンをンを环境ごとに分ける简単な方法について绍介します。 アプリアイコン以外全般については,iOSメインですが以下をご覧ください。 Flutterで环境ごとにビルド设定を切り替える— iOS编 最低限度,以下くらいには分けると円滑に开発・テスト・リリースができます。 flutter_launcher_iconsを利用 Flutterには,flutter_launcher_iconsというiOS ・ Andoidアプリアイコンを生成するとても便利なツールがあります。 flutter_launcher_icons | 飞镖包 flutter_launcher_icons Dart软件包–该软件包简化了更新Flutter应用的启动器图标的任务… pub.dartlang.org fluttercommunity / flutter_launcher_icons Flutter启动器图标–一个软件包,简化了更新Flutter应用程序的启动器图标的任务。 完全… github.com 基本的な使い方は以下です。 1.インストール #pubspec.yaml dev_dependencies: flutter_launcher_icons:“ ^ 0.7.0” 2.设定を记述 #pubspec.yaml(flutter_launcher_icons-development.yamlでも良い) flutter_icons: image_path:“ assets / images / icon.png” android:true ios:是的 もっと细かい指定も可能ですが,READMEを见てください 3.画像ファイルを配置 上で指定したimage_pathの场所にアイコンに指定したい画像ファイルを置く。 4.コマンド実行 $ flutter包pub运行flutter_launcher_icons:main 风味ごとにアイコンを変える そして,本题のFlavorごとにアイコンを変えるやり方です。 以下のPull Requestで対応された机能ですが,まだ使い方のサンプルなど整っておらず, masterではなくflavorブランチに隔离されています。 通过sestegra读取风味图标文件·提取请求#69·fluttercommunity / flutter_launcher_icons 预期文件如下:flutter_launcher_icons.yaml或pubspec.yaml,来自默认图标flutter_launcher_icons… github.com […]

Flutter:Firebase动态链接

我将告诉您有关将Firebase动态链接用于Flutter项目的经验。 对于那些不了解Firebase Dynamic Link的人 ,这里有一个视频。 Firebase Dynamic Link是满足此要求的完美解决方案。 在这篇文章中,我不会详细介绍如何在Android / iOS上配置Firebase Dynamic Link ,其中有许多教程。 我将详细介绍Flutter中的集成,该集成用于接收包含具有不同参数的深层链接的链接,因为在实现该链接时,我发现了一个错误,将向他们展示它们。 手动创建我们的动态链接 您可以按照以下文档进行操作:https://firebase.google.com/docs/dynamic-links/create-manually 在Flutter项目中添加Firebase Dynamic Link程序包 https://pub.dartlang.org/packages/firebase_dynamic_links 您可以阅读“ 处理收到的动态链接”部分 ,因为它详细介绍了说明,以防您未配置它。 将新软件包添加到pubspec.yaml文件中 firebase_dynamic_links:^ 0.0.6 插件页面上显示的示例并未详细说明应在何处放置该代码块,对于我而言,我必须阅读该插件的源代码以了解其功能。 这是示例代码: 假设MyHomeWidget是我们在应用程序启动时显示的初始窗口小部件,在创建窗口小部件并启动状态时,他们将调用_retrieveDynamicLink方法,该方法使用带有以下行的插件: 最终的PendingDynamicLinkData数据=等待FirebaseDynamicLinks.instance.retrieveDynamicLink(); 最终的Uri deepLink =数据? 。链接; FirebaseDynamicLinks.instance.retrieveDynamicLink()是在从动态链接打开应用程序的情况下负责获取深层链接的调用。 如果我们的窗口小部件已经启动,那么如果您再次打开动态链接,它将永远不会再通过initState()方法,因此我们将永远不会获得深层链接。 使用WidgetsBindingObserver 在小部件恢复或暂停时监听小部件的状态。 所以我们可以做这样的事情 在这里,我们确保每次显示小部件时,都会调用该方法以获得动态链接。 在iOS中,在插件获取Deep Link之前调用AppLifecycleState.resume 。 在调用_retrieveDynamicLink之前,添加一个小的延迟。 到目前为止一切顺利,只是我注意到一个错误仅在iOS上发生。 在iOS中,一旦打开应用程序,并使用FirebaseDynamicLinks.instance.retrieveDynamicLink()获得深层链接,当再次调用它时,我们将继续获取最后的深层链接,即,每次小部件都会执行该调用进入AppLifecycleState.resumed的状态,并且在从动态链接或由用户手动打开应用程序时发生这种情况,在iOS中,我无法得知从何处打开了它,因为在获得深层链接之后,即使该方法出来并手动输入了该应用,该方法也会带回相同的值。 当我查看iOS的插件代码时,我看到当调用retrieveDynamicLink方法时,其作用是将深层链接的值存储在变量中并返回它,问题是在使用该方法后,该变量永远不会cleaned,就像在Android中一样,因此在iOS中出现意外结果。 我已经发送了一个“拉取请求”来解决该问题,但在他们接受之前,您可以按如下所示更改pubspec.yaml文件 firebase_dynamic_links: git: 网址:https://github.com/diegoveloper/plugins.git 参考:ff17b724df0bcdf35bb5689b347d7fbef7107615 路径:packages / […]

如何在没有Mac的情况下自动为iOS签署Flutter应用

对于任何iOS开发人员来说,在将iOS应用安装到物理设备上并通过App Store交付给最终用户之前,都无需对iOS应用签名。 您所需要做的就是一个Apple开发人员帐户,一个有效的签名证书,一个匹配的配置文件……以及一台Mac来生成这些文件。 听起来很麻烦? 从与Stackoverflow上的iOS代码签名相关的问题数量来看,许多开发人员都为此感到困惑。 我们知道,设置代码签名可能会让人头疼,尤其是当您尝试使其在CI / CD环境中工作时,尤其是在为多个平台进行开发时,更是如此,例如Flutter SDK ,并且没有Mac。 但是,等等,我们对所有Flutter开发人员来说都是个好消息! 通过消除常规iOS代码签名过程中所需的某些步骤,Codemagic使整个代码签名业务比以往任何时候都容易。 介绍传统iOS代码签名的替代方法 如果我们告诉您不再需要Mac才能对iOS的Flutter应用进行签名怎么办? 而且,如果您不必担心签名文件又可以让Codemagic免费为您处理所有这些,该怎么办? 这就是我们的意思:Codemagic通过在应用程序内生成签名证书和供应配置文件,为iOS的Flutter应用程序提供自动代码签名,从而允许您在构建过程中对应用程序进行签名并将其发送到App Store。 继续阅读以获取代码签名基础知识和Codemagic的新自动代码签名功能的概述。 了解iOS代码签名的基础 在我们描述Codemagic如何通过为iOS签署Flutter应用来实现其魔力之前,让我们先了解一下iOS代码签名通常需要的内容。 苹果开发人员帐户 。 必须注册Apple Developer Program才能使用TestFlight进行Beta测试或将该应用发布给App Store上的最终用户。 还需要能够请求证书和下载配置文件。 但是,如果您只是在寻找一种可以在真实设备上安装的版本的方法,则可以按照本教程的有关如何在iPhone上部署应用程序而无需注册Apple Developer Program(但您确实需要Mac)。 签名证书 。 证书是一个公钥/私钥对,可用于识别谁开发了代码。 有一个个人开发证书,用于在开发过程中对应用程序进行代码签名,还有(共享的) App Store和Ad Hoc分发证书,用于对应用程序进行代码签名时进行分发。 供应配置文件 。 配给配置文件包含有关应用程序ID,可在其上安装应用程序的设备以及可用于对应用程序进行签名的证书的信息。 与证书一样,有一个开发配置文件,用于在开发过程中对应用程序进行代码签名,并提供分发配置文件(即席或应用商店)进行分发。 更具体地说, Ad Hoc分发配置文件可用于将应用分发给非Testflight测试人员(例如,通过HockeyApp),而您需要使用App Store分发配置文件在TestFlight上进行测试或发布到App Store。 与其他供应配置文件不同,App Store分发配置文件未链接到特定设备。 Mac 。 您需要Mac才能首先从Apple请求证书,然后再生成可以上传到第三方系统的证书文件。 开发Flutter应用程序时并不需要Mac,因此,当您没有可以使用的Mac时,这部分代码签名过程可能会成为问题。 综上所述,您将需要使用开发证书以及开发配置文件来对代码进行签名,并在开发过程中将应用程序安装在实际设备上。 当您计划将应用程序发布给测试人员或将其发布到App Store时,您将需要使用分发证书以及适当的分发设置配置文件。 […]

iOS将于2018年底发布。下一步是什么? 反应原生还是颤动?

对于iOS开发人员来说,这是“黑暗模式”的一年。 我一直喜欢将所有应用程序切换为暗模式,因为我觉得iOS开发的未来比以往更加黑暗(😬只是在开玩笑) Swift 4. iOS 12. Xcode 10 最终,我们得到了一个非常稳定的Swift版本,从现在开始,我将在各种产品中轻松使用它。 我毫不怀疑Swift语法和用法角度可读性的优点 iOS的新版本🤕Meh…我对此没有任何感觉✌️从现在开始,我可以在自己的构建设置中杀死iOS 9 =] Xcode10。优质Apple🤪您一直在增加版本号(无论如何,再次感谢黑暗模式)。 我仍然讨厌情节提要。 我希望我可以使用VSCode完全替代Xcode。 Xcode吞噬了我的公羊,Xcode吞噬了我的时间。 反应本机 今年人们疯狂谈论React Native。 人们尝试一下。 人们切换到它。 人们预言了iOS的未来。 人们在谈论关于移动开发未来的疯狂话题 和。 我也尝试过🤣(是的,我是多么好奇。) 我可以告诉您,这一直是我拥有的最佳开发人员经验之一。 用VSCode和Expo开发React Native项目是完美无缺的 毫无疑问,就屏幕切换和复杂视图而言,RN应用程序的性能不如本地应用程序。 但是说句公道话,作为混合解决方案,它相当顺利 这种折衷对于任何想要快速开发周期的初创公司都是可以接受的。 无需关心Airbnb的谈话内容。 他们很有钱✌️他们做自己想做的。 扑 我对Google的这种产品感到非常奇怪。 充当游戏引擎的想法使我非常乐于学习它。 学习曲线很高,社区仍然很小。 我还要再等一年,然后再针对任何生产产品提出建议 2019年接下来呢? 不要担心iOS会在未来5年内很快上市,但是了解React Native或Flutter等混合解决方案将为您提供更多在2019年担任Mobile Developer的机会 作为iOS开发人员,我对Apple每年发布的功能感到无聊。 别指望今年在iOS开发领域会有什么很棒的伟大创新。 也许是Xcode 11中的“更暗模式”🤣 在你走之前 – 您是否知道按下👏按钮最多可以放弃50👏? 如果您真的很喜欢这篇文章,请尝试一下! 另外,如果您喜欢自己所看到的内容,并希望我写更多内容,请给我关注Medium(Hoang Nguyen)。 ✌️ 谢谢您的阅读! […]

Flutter,本机API和插件(2/3)

(译自法文:Flutter,API本机和插件(2/3)) “我们需要谈谈…” 在第一部分中,我们已经了解了MethodChannels的基础。 现在,我们将仔细研究语音识别通道的基本实现。 语音识别 我们的应用程序需要使用麦克风和语音识别的权限 。 在iOS和Android 7.1+上首次启动时,用户必须接受该请求。 接受请求后,主机将调用Dart方法以确认识别可用性。 从那里,Flutter可以通过在专用通道上调用“开始/收听”方法来开始识别。 在调用start方法之后,记录开始,然后主机调用onRecognitionStarted Flutter应用程序将收到: 中间成绩单(在iOS上) 并且一旦用户停止识别( stop() ),则通过onRecognitionComplete(String completeTranscription)的最终转录 第一次实施 首先,我们需要在iOS端使用Swift创建一个项目(将ObjC用作默认语言)。 Flutter CLI使您可以使用以下命令进行定义: flutter create -i swift –org com.company speech_project ` -i swift`选择iOS的Swift –org选择项目名称空间 我们也可以选择使用-a kotlin`在Android的Kotlin中编写 扑/飞镖 SpeechRecognizer类处理Flutter 主机通信。 资源资源 文献资料 Sytody应用 Speech_recognition插件 Flutter插件和软件包

2018年十大技术讲座

让我们为能够为更大的开发者社区做出贡献而感到自豪的一件事是,我们能够通过免费的演讲在线视频(SkillsCasts)展示一些顶尖的技术人才。 无论是在各种会议上还是在聚会上,都会出现一些真正令人难以置信的技术讲座,我们认为分享这些经验是很公平的。 2018年是又一个引人入胜的演讲年,从学习如何使用Forest编程世界上第一台量子计算机到以功能风格设计Web应用程序,但今年有10场技术演讲吸引了我们社区的最大关注: 10. 传达抽象的力量 –郑裕uge博士 音乐会钢琴家和数学家郑兆E博士今年在伦敦Scala eXchange大会上发表了主题演讲,着眼于我们与抽象的关系,以及在教育系统中以不同方式整合抽象的巨大潜力。 9. 一小时(或更短的时间内)构建Flutter应用程序 — Matt Sullivan 来自Google Mountain View校园的Flutter开发人员关系负责人马特·沙利文(Matt Sullivan)3月在伦敦的CodeNode上谈到了Flutter编程的基本原理,该Flutter与iOS和Android集成并与现有代码兼容。 8. 从轨道上捣蛋:如何一劳永逸地处理大规模视图控制器-Paul Hudson 保罗·哈德森(Paul Hudson)是斯威夫特(Swift)的多产作家和爱好者,他从未间断地进行有趣的技术演讲。 3月,他讨论了Model View Controller模式以及如何减少代码中的耦合和维护。 7. 事件采购简介 — Alfredo Motta CreditSpring的软件工程师兼CTO Alfredo Motta在5月的“事件源”演讲中说道:“最近开发的一种设计模式,用于构建以领域为中心并且易于扩展的应用程序”。 6. ARKit 1.5图像识别:使电影海报栩栩如生— Romain Derrien Ubicolor的创始人和iOS伦敦Meetup的组织者Romain Derrien在三月份发表了有关使用ARKit 1.5通过AR使电影海报栩栩如生的演讲。 5. Scrum事件和Dave Snowden出席-预先技术和敏捷状态-Dave Snowden 认知边缘(Cognitive Edge)首席科学官戴夫·斯诺登(Dave Snowden)总是进行有趣的演讲,今年1月初的演讲也不例外。 他回顾了使敏捷如此吸引人的原因,失去的地方以及未来的发展方向。 4.我爱的F#代码-Don Syme 在2018年F#eXchange大会上,唐·塞姆(剑桥大学Microsoft移动工具和微软研究院首席研究员)发表了主题演讲,介绍了他喜欢的F#代码的类型以及在个人和团队中使用F#时如何找到最佳选择。 3.具有F#Web堆栈的SAFE应用程序— Tomasz Heimowski […]

颤振–我的想法和印象–第一部分

我是一位具有4年专业经验的iOS开发人员,不久前,我感觉自己想尝试一些新东西……决定尝试Flutter。 我将撰写一系列故事,描述我使用Google的新SDK的经历。 尽管我可能会在此处发布一些代码示例和/或发布有用文章的链接,但我很可能不会包含任何教程(如果最终喜欢该框架,可能会写一些教程故事,并且会有足够的关注者)。 ,教程等。因此,即使您对我的故事不感兴趣,您也可能会发现一些有趣的东西。 Flutter是Google的移动应用SDK,可在创纪录的时间内在iOS和Android上制作高质量的本机界面。 Flutter可与现有代码配合使用,为世界各地的开发人员和组织所使用,并且是免费的开放源代码。 几个月前,我已经尝试过React Native,但是由于我没有足够的空闲时间(工作时间),最终放弃了,也没有关于使用该框架编写应用程序的想法。 我花了不到5个小时来试用React Native。 这次有点不同(虽然不是总是这样开始吗?哈哈😅)。 我将写一个饮水跟踪器💦。 我知道已经有很多(满是广告but),但是学习新语言和SDK的基础就足够简单了,不会花费太多时间来完成,而且我还不想(还)花费太多时间以防万一我忙于其他事情。 无论如何,不​​要专注于应用程序的主题,在大多数情况下都没有关系。 最后,我可能会共享应用程序和/或代码,但稍后会决定。 所以…让我们开始吧! 😎 很明显,我已经在MacOS上进行了设置,现在我跳过了配置Android环境的工作……一旦我编写了应用程序的某些部分(大概是下次),就可以这样做。 我希望它会比上次安装Android Studio和所有依赖项更加流畅,这与Xcode相比确实很痛苦(为什么默认不安装某些(最新的?)SDK和模拟器?)。 下载了v0.5.1-beta,并按照您在Flutter官方页面上找到的说明进行操作。 为iOS开发设置一切非常简单,因为我已经安装了大多数东西,但实际上“颤抖的医生”实际上可能会要求我自动为我安装所需的一切……我知道我很懒,但我想我只是被宠坏了(有点) Xcode的帮助,我只需安装一个工具就可以立即开始开发。 与PATH变量相同,但是谁知道,也许一旦它超出beta,Flutter的环境配置将自动进行? 这样做很无聊,特别是因为我必须在短时间内做两次-一次在工作中一次在家里(或者也许我不需要这些事情,而自己写一个简单的bash脚本?)。 我已经安装了VS Code,所以只添加了Dart和Flutter的扩展名,因此所有内容(Android Studio及其依赖项除外)的安装时间都不会超过15分钟……还不错(👍🏼)(伙计们)建议用作IDE(Android Studio或Visual Studio Code),在使用Flutter / Dart时最喜欢什么? 是时候创建一个新项目了! 我已经在GitLab上添加了一个新的存储库(在这里保存了我的私有存储库),并通过VS Code命令托盘创建了一个新项目,非常简单。 该示例应用程序也从模拟器上启动,没有任何问题,可以尝试在Xcode中打开设备打开的项目并配置证书并在那里进行配置(有没有在不运行Xcode的情况下更快的方法?)。 如果我可以将它与React Native进行比较,那就更好了。 我在那里运行示例项目时遇到了一些问题,到目前为止,Flutter都没有问题(我并不是说React Native不好,我只是对它有不好的第一印象🙁另一方面,我将来可能会再尝试一次) 。 在Flutter.io入门指南中,有一个用于编写第一个应用程序的快速教程……先阅读几段内容,然后放弃🙈(让我们更艰难!那样会很无聊,不是吗?)。 我不知道为什么大多数“第一个应用程序”指南通常都显示根本没有任何架构模式的代码示例😬作为“ 不是新手程序员 ”,我想开始学习一些更好的示例并学习良好的实践(对于Flutter )从一开始就开始…然后开始谷歌搜索。 在介质上找到有关项目结构的文章[此处,谢谢Harkirat Saluja],并决定在我的项目中使用该结构。 如果您还有Flutter / Dart良好项目结构的其他示例,请告诉我,我很乐意将它们进行比较❤ “ 到目前为止一切都很好 ” […]

在应用程序购买中出现波动

我之前已经实现了react-native-iap模块,也有人要求在flutter构建一个模块,因为目前那里的插件不支持subscription等足够的功能。 所以今天,我实现了flutter_inapp_purchase模块。 已准备好响应本机应用程序内购买和Flutter应用程序内购买。 在itunesconnect中为ios设置应用程序内产品。 您需要完成协议,税收和银行业务。 在功能标签中添加应用内购买 。 检查产品的状态是否为“ 准备提交” 。 3.检查您的xcode设置并启用应用内购买 。 现在,您已完成ios端配置。 所以让我们去安卓。 在Playstore中为Android设置应用内购买。 如上面的屏幕截图所述,您需要先创建具有结算权限的APK,然后再设置商家帐户,然后才能创建应用内商品。 完成后,您可以创建被管理产品,如下面的屏幕截图所示。 而已。 现在,您可以转到自己的本地项目,并按照自述文件中的说明包含我们的模块。 集成flutter_inapp_purchase的摘要。 安装依赖 –依存关系: flutter_inapp_purchase:^ 0.3.3 –颤振包得到 导入并使用它。 – https://pub.dartlang.org/packages/flutter_inapp_purchase#-readme-tab- 如有任何问题,请写下问题。 谢谢。 Flutter Pub是一个中等规模的出版物,旨在为您带来有关该伟大技术的最新,令人惊叹的资源,例如文章,视频,代码,播客等,以教您如何使用它构建漂亮的应用程序。 您可以在Facebook,Twitter和Medium上找到我们,或者在此处了解有关我们的更多信息。 我们很想联系! 如果您是有兴趣为我们写作的作家,那么可以按照这些指南进行操作。

使用Flutter进行跨平台移动应用程序开发— Xamarin — React Native:以性能为中心的比较

上周四(2017年8月),我荣幸地在弗吉尼亚州麦克莱恩市的Capital One的iOS峰会上发表了演讲。 这是我第三次参加会议,也是我第二次有机会上台。 场地是一个令人印象深刻的礼堂,组织无可挑剔,听众充满活力和开朗。 我参加了许多有趣的演讲,与来自全国各地的热情软件工程师会面并交流了想法。 我没有演讲视频,但我将分享摘要和幻灯片。 开始了。 移动应用程序开发已经超出了我们最疯狂的梦想。 据估计,全球有20亿部智能手机,其中99%以上运行iOS或Android。 为了吸引更多用户,开发人员需要同时针对这两个平台。 不幸的是,出于多种原因,这样做远非易事。 开发人员必须学习两种语言(在iOS上以前是Objective-C,但现在是Swift;在Android上Kotlin变得比Java势头强劲)和两种平台。 通常,还需要两个平台团队。 这种方法既缓慢又昂贵。 很难调整iOS和Android功能的发布时间表。 至少,App Store审核过程使及时发布iOS更具挑战性。 很难在任何一个平台上提供令人愉悦的体验,甚至更难重复两次。 更糟糕的是,如果并且当需要支持网络时(不幸的是有时是事后的想法),难度将成倍增加。 以前,我们已经看到了跨平台的解决方案,但是它们要么在性能上折衷,要么达到设计期望。 Google,Facebook和Microsoft一直在努力工作,我认为他们现在拥有值得再次关注的解决方案。 我想探索三种流行的框架:Flutter,Xamarin和React Native,解释它们的含义,工作方式,并以性能为重点将它们相互比较。 我的希望是,阅读本文后,您会被启发去检查它们,并足够了解,以便在您的脑海中制定出哪种技术可能是满足您需求的正确选择。 让我们从Flutter开始。 这是由Google开发的开源移动应用SDK。 它为开发人员提供了一种简单而又高效的方法,可以在Android和iOS上构建和部署美观,高性能的移动应用程序。 它的独特之处在于它既不使用Web视图也不使用iOS / Android UI组件,但仍使用其自己的呈现引擎以本机方式绘制所有内容。 Flutter团队没有重新发明轮子,而是对Google内部的项目进行了广泛的研究,并在合理的范围内重复使用了许多现有代码。 他们从Chrome,WebKit,Android中获取了相关内容,并构建了一个苗条的C ++引擎。 他们选择使用Dart构建其余框架。 该框架实现动画,绘画,手势,渲染,并提供Material Design组件的实现以及稀疏的iOS主题组件库。 在iOS上,C ++引擎是使用LLVM编译的,而Dart代码是AOT(提前)编译成本地代码的。 在Android上,C ++引擎使用Android NDK(本机开发套件)进行编译,并且Dart代码在Dart VM(虚拟机)上运行,后者生成JIT(即时)编译的优化本机代码。 实施JIT编译的系统会连续分析正在执行的代码,识别出可能加速的部分,并将这些代码段转换为设备的CPU指令集。 转换后的代码称为本机代码,它直接在CPU上执行,而不是在VM上运行。 Flutter的特定于平台的API支持不依赖于代码生成,而是依赖于灵活的消息传递系统。 应用程序的Flutter部分(客户端)通过平台通道将消息发送到应用程序的iOS或Android部分(主机)。 主机在平台通道上侦听并接收这些消息。 然后,它使用本机编程语言调用任意数量的特定于平台的API,并将响应发送回客户端。 有关典型Flutter应用程序的内存,CPU和GPU利用率的性能讨论,请参考幻灯片。 有趣的是,我在运行这些测试时发现了内存泄漏问题。 我还没有机会向Flutter提交错误,但我将在接下来的几天内提交。 让我们进入列表中的下一个框架Xamarin。 Xamarin是Microsoft开发的一种开源技术,用于使用C#来构建iOS,Android和Windows Phone […]