关于android:Flutter-不一样的跨平台解决方案

1次阅读

共计 5742 个字符,预计需要花费 15 分钟才能阅读完成。

本文次要介绍 Flutter 相干的货色,包含 Fuchsia、Dart、Flutter 个性、装置以及整体架构等内容。

简介

Flutter 作为谷歌最近推出的跨平台开发框架,一经推出便吸引了不少留神。对于 Flutter,目前咱们晓得它是一个跨平台开发框架。然而它自身并不止于此,例如 Fuchsia、Dart 等,咱们也都须要去理解。

Fuchsia

说到 Flutter,相对绕不开 Fuchsia,这个是谷歌开发的一款全新的操作系统,GitHub 地址以及 Google source 主页。Fuchsia 内核是 Magenta Kernel,一个基于 LittleKernel 的我的项目。该零碎与 Android 相比,无论是存储器还是内存之类的硬件要求都大幅升高,外界推论是一款面向物联网的零碎。笔者倒是没有查到谷歌开发这款操作系统的目标,如果有通晓的,也烦请告知。

就像很多博客主说的那样,如果只是取代 Android,那无疑是一种很不好的做法。任何技术的推动,都得靠背地的商业驱动,尤其是这种波及到手机厂商利益的技术。

Flutter

Flutter 是 Fuchsia 的开发框架,是一套挪动 UI 框架,能够疾速在 iOS、Android 以及 Fuchsia 上构建高质量的原生用户界面。目前 Flutter 是完全免费、开源的,GitHub 地址。其官网编程语言为 Dart,也是一门全新的语言。所以说,上手老本比拟高,对于挪动端开发人员,语言以及框架都是全新的,整个技术栈的积攒也都得从头开始。

能够看下其官网介绍的个性:

  • 疾速开发:Flutter 的热重载能够疾速地进行测试、构建 UI、增加性能并更快地修复谬误。
  • 富裕表现力,丑陋的用户界面:自带的 Material Design 和 Cupertino(iOS 格调)widget、丰盛的 motion API、平滑而天然的滑动成果。
  • 响应式框架:应用 Flutter 的古代、响应式框架,和一系列根底 widget,轻松构建您的用户界面。
  • 拜访本地性能和 SDK:Flutter 能够复用现有的 Java、Swift 或 ObjC 代码,拜访 iOS 和 Android 上的原生零碎性能和零碎 SDK。
  • 对立的利用开发体验:Flutter 领有丰盛的工具和库,能够帮忙开发者轻松地同时在 iOS 和 Android 零碎中实现想法和创意。
  • 原生性能:Flutter 蕴含了许多外围的 widget,如滚动、导航、图标和字体等,这些都能够在 iOS 和 Android 上达到原生利用一样的性能。

其实从官网个性来看,惟一有点吸引力的就是对立的利用开发体验。一套代码运行在多个平台,做到真正的跨平台。像热加载,目前 Android 开发自身就反对了,响应式框架以及拜访本地性能和 SDK,对于 Native 来说,自身并没有多大的吸引。至于丑陋的用户界面,国内的商业我的项目,哪一个会去依照 Material Design 去设计。

跨平台自身,往往意味着性能受损,通用性解决不了的问题,又得回到 Native 去实现。所以这些因素也是跨平台从挪动端诞生之初就开始提,到当初也没有被很好解决的一个起因。至于谷歌可能做到什么水平,或者说开发者该放弃什么期许,我感觉都不好说,或者谷歌解决了一个多年的难题,或者又像被谷歌放弃掉的其余我的项目一样。抛开商业层面,对于技术人员,咱们更多的是应该去关注它的思维,谷歌是如何去解决这些理论存在很久的问题的,至于技术自身的倒退,这个是集体开发者无奈去左右的,技术的更迭,放弃一种学习的状态,而后致力锻炼身体,就可能保障不被淘汰掉。

Dart

Dart 是谷歌开发的计算机编程语言,于 2011 年 10 月份公布,能够被用于 web、服务器、挪动端和物联网等畛域的开发。Flutter 采纳 Dart,起因很多,抛开商业层面的 Java 版权问题,单纯从技术层面:

  • Dart 是 AOT(Ahead Of Time)编译的,编译成疾速、可预测的本地代码,使 Flutter 简直都能够应用 Dart 编写;
  • Dart 也能够 JIT(Just In Time)编译,开发周期快;
  • Dart 能够更轻松地创立以 60fps 运行的晦涩动画和转场;
  • Dart 使 Flutter 不须要独自的申明式布局语言;
  • Dart 容易学习,具备动态和动静语言用户都相熟的个性。

Dart 最后设计是为了取代 JavaScript 成为 web 开发的首选语言,最初的后果可想而知,到 Dart 2 的公布,专一于改善构建客户端应用程序的体验,能够看出定位的转变。用过 Java、Kotlin 的人,能够很快的上手 Dart。

一门语言的成败,抛开背地的商业推动,我想很重要的一点在于其生态,生态的好坏,次要包含开发者以及第三方库的数目,目前看,Dart 的生态还是比拟差。对于集体开发者,能够依据情绪来抉择,然而对于商业利用,有更简单的考量规范。Dart 背地有谷歌的推动,能倒退到什么水平,还得看其商业运作能力了。

配置

此局部针对 Mac 平台,Windows 平台的装置配置,Linux 平台的装置配置。因为笔者次要做挪动端开发,如果想应用 Flutter 进行 iOS 和 Android 全平台的开发,环境也倡议是 Mac 平台,毕竟 iOS 只能在 Mac 下进行模仿调试。

装置 Flutter

git clone -b beta https://github.com/flutter/flutter.git
export PUB_HOSTED_URL=https://pub.flutter-io.cn // 国内用户须要设置
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn // 国内用户须要设置
export PATH=`pwd`/flutter/bin:$PATH

iOS 设置

brew update
brew install --HEAD libimobiledevice
brew install ideviceinstaller ios-deploy cocoapods
pod setup

Android 设置

下载 Android Studio,装置 Flutter 插件,会将 Dart 插件也一起装置。

体验 Flutter

IDE 倡议抉择 Android Studio,装置了 Flutter 插件后,Flutter 的开发跟 Android 开发相似,附带三种模版工程、断点调试等。

在 Android Studio 外面新建一个 Flutter Application 的我的项目,抉择模拟器或者间接连贯真机运行,就能够看到一个简略的 Flutter 利用了,能够在 Android 和 iOS 不同平台下看看差别。

Flutter 架构

Flutter 是一款挪动应用程序 SDK,一份代码能够同时生成 iOS 和 Android 两个高性能、高保真的应用程序。

Flutter 对于挪动开发人员,最引诱的能力是其齐全的跨平台个性,不同于 RN 这种一处学到处写,它是一处写到出跑,然而他跟其余的跨平台有何区别呢?

跨平台解决方案

市面上的跨平台解决方案,能够大抵归结为两类:

  • 应用平台反对的 web 技术:这些解决方案基本上加载了应用程序中的挪动浏览器,并在该浏览器中执行所有的逻辑,例如 PhoneGap。
  • 本地跨平台:程序员编写的代码主动转换为 Native 代码,这种形式的长处是近乎原生的性能,例如 RN、Weex、Xamarin 等。

这些计划是否真正的解决了跨平台问题呢?从目前的情况来看,很显然是没有的,因为它们都始终逃不开性能、包大小、流畅性、内存、平台个性等问题。

RN 独自拧进去说,是因为它们并不是谋求的一次写到处跑,FB 本人也晓得不事实,所以把口号改成一次学到处写,去思考平台的个性,去思考这个被跨平台计划常常疏忽的问题。然而 RN 也并没有被宽泛的接收,从阿里开始应用到放弃,外面的很多坑都绕不过来。写一次到处跑的确很迷人,从企业角度讲,能够节俭大量的人力,然而却疏忽了一个很根底的问题,不同平台是否心愿如此,苹果是否会违心本人的生态被突破,不同平台的个性是否应该被归为统一。

Flutter 的跨平台解决方案

下面简略说了传统跨平台解决方案,咱们再回过头看看 Flutter 的解决方案,Flutter 跨平台最外围的局部,是它的高性能渲染引擎(Flutter Engine)。Flutter 不应用浏览器技术,也不应用 Native 的原生控件,它应用本人的渲染引擎来绘制 widget。

说到 widget,就要说一句 Flutter 的 所有皆为 widget理念。widget 是 Flutter 应用程序用户界面的根本构建块。每个 widget 都是用户界面一部分的不可变申明。与其余将视图、控制器、布局和其余属性拆散的框架不同,Flutter 具备统一的对立对象模型:widget。在更新 widget 的时候,框架可能更加的高效。

对于 Android 平台,Flutter 引擎的 C /C++ 代码是由 NDK 编译,在 iOS 平台,则是由 LLVM 编译,两个平台的 Dart 代码都是 AOT 编译为本地代码,Flutter 应用程序应用本机指令集运行。

Flutter 正是是通过应用雷同的渲染器、框架和一组 widget,来同时构建 iOS 和 Android 利用,而无需保护两套独立的代码库。

Flutter 将 UI 组件和渲染器从平台挪动到应用程序中,这使得它们能够自定义和可扩大。Flutter 惟一要求零碎提供的是 canvas,以便定制的 UI 组件能够呈现在设施的屏幕上。

Flutter 框架

Flutter 框架是一个分层的构造,每个层都建设在前一层之上。

框架没什么可介绍的(次要是具体介绍我也没找到啥材料,大写的难堪),看着很简略,就分为两个局部,Framework 和 Engine 局部,其中 Framework 提供了各种根底的组件库,Engine 局部渲染各种 widget,两者独特作用,使得运行性能高效稳固。

Flutter 调研

生态

在 Flutter 官网的 Pub 平台上,纯 Flutter Package 大略有两千多个,基本上常见的库还是都有的,例如网络、图片、音视频播放等等。然而对于目前 Android 以及 iOS 的生态,还是远远的有余的,对于一些简单的 UI 或者一些不是特地通用的性能,就得本人去实现。

包大小

依据官网的介绍,一个最小的 Android 版本的 Flutter 利用。release 版本大小约 6.7MB,其中外围引擎大概 3.3MB,框架 + 利用程序代码大概是 1.25MB,LICENSE 文件(蕴含在 app.flx 中)是 55k,必须的 Java 代码.dex 为 40k,并且约有 2.1MB 的 ICU 数据。思考到目前网络环境,包大小的减少,还也在能够承受的范畴。

Crash

iOS 运行官网的例子,会有时候 crash 掉,因而咱们将一个开源的 Flutter 利用增加了 Bugly 上报,在 Android 平台进行了众测。

参加人次大略 150 人左右,启动次数大略 500 次左右,没有呈现一次 Crash 数据上报,因为 app 很简略,并不能阐明很多问题,然而众测用户反馈了约 12 条信息,其中 1 条是相似于 ANR,无奈操作,其余的局部则是卡顿相干的反馈。

流畅性

将官网的例子发给测试同学,让在 iOS 以及 Android 平台的不同机子上运行了下。在 iOS 上基本上晦涩运行,没有呈现卡顿的景象,在 Android 局部设施上,呈现了卡顿的景象。

因为没有简单的例子,其实这个流畅性的测试,意义不是特地大,官网简略的控件展现 demo 程序,自身就很简略,然而在 Android 上还是呈现了不少问题,只能阐明整体还有十分大的优化空间。

编写复杂程度

试着照着一张设计稿进行了简略的纯布局代码工作,首次接触用起来还是比较复杂,尤其是那恐怖的嵌套层级,对代码保护来说相对是个问题,而且因为 Flutter 的 widget 机制,很多组件只反对最根本的操作,例如一些扩大的属性,都得本人去实现,况且当初组件库还不是十分的丰盛。代码量也比拟多,整个代码大略有 500 行左右,还只是不波及到一些交互以及数据绑定等。

从运行成果看,还是比拟的不错,两者还原的成果都挺不错的。

论断

如果是集体而言,我感觉能够放心大胆的去学习尝试,独立开发 app,能够写一套代码,在多个平台运行公布。

如果是商业团队,这个就要自行取舍,目前而言,Flutter 生态还是十分的不欠缺,相干的材料也非常少。目前处于 beta 3 阶段,多久能到 release,是否到 release,都是个未知数,而且,用 Flutter,最大的危险,就是我的项目整体的不可把控,一旦呈现一些坑,如果能填好,那还行,如果波及到无奈解决的问题,就只能放弃。因而看本人团队人力以及工夫合理安排比拟适合。目前看阿里的咸鱼团队在钻研 Flutter。

如果单纯从 Flutter 自身可能解决的问题的方面登程,应用 Flutter 的确可能产生肯定的收益,节俭开发成本,如果思考到目前坑比拟多的情况,加上踩坑的工夫,可能就无奈去评估了。

总体来说,Flutter 的确是一个比拟不错的货色,如果谷歌可能把它倒退的比较完善,对于集体以及小团队来说,的确是个福音。

后话

笔者新建了一个 flutter 学习相干的我的项目,github 地址,外面蕴含了笔者写的对于 flutter 学习相干的一些文章,前期也会定期更新,也会上传一些学习 demo,欢送大家关注。

参考

  1. Flutter 中文网
  2. Google 轻轻开发的全新操作系统 Fuchsia 被发现了!
  3. 为什么 Flutter 会抉择 Dart?
  4. Flutter 教程(二) 理解 Dart 语言
  5. 为什么挪动端跨平台开发不靠谱?
  6. 为什么说 Flutter 是革命性的?

相干教程

Android 根底系列教程:

Android 根底课程 U - 小结_哔哩哔哩_bilibili

Android 根底课程 UI- 布局_哔哩哔哩_bilibili

Android 根底课程 UI- 控件_哔哩哔哩_bilibili

Android 根底课程 UI- 动画_哔哩哔哩_bilibili

Android 根底课程 -activity 的应用_哔哩哔哩_bilibili

Android 根底课程 -Fragment 应用办法_哔哩哔哩_bilibili

Android 根底课程 - 热修复 / 热更新技术原理_哔哩哔哩_bilibili

本文转自 https://juejin.cn/post/6844903607280599054,如有侵权,请分割删除。

正文完
 0