Flutter 引入app调研

本文详细介绍了Flutter的引入原因、系统架构、与原生应用的性能对比、apk大小对比,以及在依赖第三方库和混合开发方案上的考量。Flutter以其跨平台特性、丰富的UI动画和低学习成本受到青睐,但在性能和第三方库支持上存在挑战。
摘要由CSDN通过智能技术生成

一、Flutter简介。

Flutter是Google使用Dart语言开发的移动应用开发框架,使用一套Dart代码就能构建高性能、高保真的iOS和Android应用程序,并且在排版、图标、滚动、点击等方面实现零差异。

Flutter是如何实现跨平台:Flutter能够在iOS和Android上运行起来,依靠的是一个叫Flutter Engine的虚拟机,Flutter Engine是Flutter应用程序的运行环境,开发人员可以通过Flutter框架和API在内部进行交互。

Dart语言学习成本?

dart 语言是学习成本很低,因为无论对于擅长 JS 的前端而言,还是对于掌握 Java\Kotlin\Swift 的客户端而言,Dart 无论怎么看都是“弟弟”。

dart是AOT(Ahead Of Time)编译的,也可以通过JIT(Just In Time)进行编译。

为什么要尝试使用Flutter?

  • 跨平台使用相同的UI和业务逻辑,平台一致性,节省开发时间。
  • 无限接近原生的交互体验
  • 丰富的UI动画
  • 能够很容易与原生进行交互
  • 适用于更多的平台 (Flutter不仅是可以在移动设备上使用,还支持Web端。)

Flutter使用大势所趋

  • 目前Google正在研发Fuchsia OS(与Flutter配合使用),因此Flutter会继续投入研发人员维护和升级,不会中断。
  • 使用Flutter的门槛并不高,因为社区中已经有了很多的人气很高的Android开发人员都在提倡和使用Flutter。
  • 已经有很多大公司在使用,例如:阿里巴巴,微信,Google Ads,Bilibili,快手,哈罗出行,Ford等等,这是Flutter实力的证明。

Flutter系统架构图:

Flutter框架分为三层:Framework层、Engine层和Embedder层。

 

1、 Framework层:由Dart来实现,包含众多安卓Material风格和iOS Cupertino风格的Widgets小部件,还有渲染、动画、绘图和手势等。Framework包含日常开发所需要的大量API,普通应用开发熟悉这些API的使用基本OK了,不过很多特殊场景的控件需要自己根据实际情况进行自定义。

2、 Engine层:由C/C++实现,是Flutter的核心引擎,主要包括Skia图形引擎、Dart运行时环境Dart VM、Text文本渲染引擎等;

3、 Embedder层:主要处理一些平台相关的操作,如渲染Surface设置、本地插件、打包、线程设置等。

框架对比:

 

二、Flutter与native对比有何优势。

优点:

* 简单易学,Dart语言更具优势;

* 混合开发可以快速兼容多个系统,开发周期快,更新发布快 * 跨平台开发,核心代码只需编写一次就可以部署到多个平台,节省开发时间和成本 * 后期运用维护成本低,只需要一个团队就可以维护app的更新迭代; * 原生和web的融合,是新的技术趋势,尤其对经常需要更新的app,如淘宝、大众点评等app,将h5技术应用到原生app里,已经是大的趋势。

缺点

* 脱离不开原生,开发人员需要具备原生(Android、iOS)基础开发能力; * 相对原生来说,性能稍慢。但混合开发已经是未来的发展趋势。

* apk包相对native apk包大小增加。 * 加载缓慢/网络要求高:混合APP数据需要全部从服务器调取,每个页面都需要重新下载,因此打开速度慢,网络占用高,缓冲时间长,容易让用户反感;

三、Flutter App与Native App性能对比以及apk大小对比。

运行性能测试:

1.android原生列表展示3000个textview为例:

a.运行在前台时:

cpu:保持在3%以下

Memory:储存保持在97.6MB

 

b.运行到后台:

cpu:保持在0%

Memory:储存保持在32.8MB

 

2.flutter列表展示3000个textview为例:

a.运行在前台:

cpu:保持在12%左右

Memory:内存保持在142.7MB左右

 

b.flutter app 运行到后台:

cpu:保持在12%左右

Memory:内存保持在94MB左右

 

apk安装包对比:

native与flutter apk对比(编写一个ui效果一模一样的 apk)使用AndroidStudio自带的APK Analyzer进行分析,如下图:

native apk: 3.4MB / classes.dex file 2.3MB

flutter apk: 15.9MB / classes.dex file 128.2KB

 

 

native 与flutter apk大小对比总结:

  • apk 大小 可以明确的看出来,原生的安装包要比 flutter 安装包小约 12.5MB 左右。
  • classes.dex 大小看dex 大小你会不会很奇怪,原生的 classes.dex 竟然比 flutter 版的dex大2MB,这是因为原生的 dex 里引入了 support 库和各种基础控件(ImageView TextView等等),而flutter 的 dex 里面没有support库,也没有原生控件,实际上 flutter 实现了一套自己的控件,包括 Material Design 和 Cupertino(iOS风格的widget)。
  • lib 库 大家可能会发现,我们的 flutter 版 app 多出了一个 lib 库,打开里边是一个 libflutter.so,因为Flutter 引擎是用 C、C++ 来编写的,在 android 上会使用 ndk 编译,在 iOS 上使用 LLVM编译,而我们自己写的 dart 代码会通过 AOT 编译成各个平台的本地代码。

总结:

通过以上的分析,我们可以很明确的得出结论,android 原生在内存、CPU 资源占用方面要低于 flutter,并且安装包的体积也要小于 flutter,所以,不考虑其他因素,单纯从性能角度来说,android 原生肯定是要优于 flutter 的。但 flutter 也有它的优点,比如跨平台的开发、毫秒级的热重载等等,另外跨端开发也逐渐的流行。

四、flutter依赖第三方库可能存在功能不全问题(例如百度地图sdk):

native baidu map sdk支持的功能很多

Android地图SDK | 百度地图API SDK

 

 

flutter baidu sdk插件相对原生sdk功能支持少了很多。

flutter | 百度地图API SDK

 

 

总结:

通过百度第三方库的支持来看,native的baidu sdk功能覆盖全面,而flutter baidu 插件缺少一部分功能,如点聚合、导航、语音助手、工具集等等。如果flutter想使用这些功能,可以在flutter页面上显示出native view 让native sdk来实现缺失的功能。

五、native接入flutter开发方案。

业内绝大部分的App都不可能推倒重来,所以混合工程的方式接入Flutter是目前主流开发模式,下面简单说说业界两种工程管理模式:

 

统一管理模式(不推荐)

  • 优点 :适合全新使用Flutter开发的项目
  • 缺点:后期代码耦合严重,相关工具链耗时大幅增长,导致开发效率低

项目结构:

 

三端分离模式(推荐)

优点

  • 快速实现Flutter功能“热插拔”,降低原生工程的改造成本
  • 可以直接进行Dart代码和原生代码开发调试

项目结构:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值