05_Flutter跨平台初探

Flutter跨平台初探

    Flutter一路了解下来,令人欣喜又赞叹。它可以跨越6个平台,从桌面操作系统Windows、Linux、Mac OS,到Web开发,再到移动操作系统IOS、Android。跨越的广度,前所未有。这让人想起Java那句名言:"Write only once,Run anywhere"。在桌面操作系统上,Java基本实现了它的豪言壮语。但自从sun被oracle收购后,并没有再进一步。而Flutter似乎开启了新的跨平台纪元。虽然从目前来看,各种生态还有待发展,性能也有待提高,但前途星光灿烂,迸发着万丈光芒。本文将重点从Android平台的视角出发进行一些介绍。

(1)综述

    Flutter使用Dart作为开发语言。Dart是一个现代的、静态编译的、面向对象的程序设计语言。语法风格和Java非常的相似,比Kotlin更像Java多了。但这里对它不再过多介绍。
    Flutter其实是一个2D UI框架。在底层,它通过libflutter.so库来绘制界面。它并不使用Android 的View体系。Flutter的界面核心类是FlutterView,继承自SurfaceView,通过native的方式进行UI绘制。Flutter只使用一个FlutterActivity,并管理着所有的路由(页面)。触摸事件、手势处理、消息传递,都由Flutter自己管理。它不使用xml这种构建UI的方式,而是通过Dart语言来描述Widget树。它的国际化有很大的缺陷,官方目前推荐在代码中用static final字符串来处理,可以说是一种非常糟糕的方式。也听说有第三方dart库可以解决这个问题,但并未深入了解,这里就暂不多说。

(2)主要目录结构

    Flutter Project可以通过flutter相关命令来创建,也可以通过AndroidStudio或者IDEA来创建。下面是它的主要目录:

  • android:一个android Project主目录;
  • ios:一个ios Project主目录,可以通过mac Xcode打开;
  • linux:linux平台目录;
  • macos:mac os平台目录;
  • web:web平台目录;
  • windows:windows平台目录;
  • lib:跨平台的精髓,UI绘制、跨平台代码等都在这里。

    lib下是跨平台的内容,其他各个目录是平台相关的内容。从lib这个名称可以看出,它是作为一个库被各个平台使用的。

(3)Flutter 插件

    Flutter插件,是用来解决平台相关问题的一种方案。它是和平台紧密相关的库。在Android平台,插件的代码是由Java或者Kotlin编写的,最终会被打包进apk中。IOS平台也类似。某些和平台相关的功能,如果Flutter不能自己实现,也没有可用的插件,那么需要自己分平台实现。这会涉及到平台与Flutter的通信,它通过MethodChannel来支持。

(4)Flutter限制

    Flutter跨越这么多的平台,有它的限制所在。以下是一些总结:
    可以跨平台的:

  • 2D UI,UI在主线程中更新的(通常都是,SurfaceView、TextureView例外) ;
  • 网络请求、签名加密、Json序列化;
  • 图片、文本资源的处理;
  • 文件操作;
  • 国际化,虽然很糟糕,但也算支持;
  • 基本的动画,如平移、旋转、缩放、Alpha等;
  • 屏幕相关及资源适配;

    不能跨平台的,这里包括需要平台插件的,或者需要和平台相互通信处理的,如下:

  • 跳转到其他App,从其他App跳入;
  • Service、BroadcastReceiver、ContentProvider相关;
  • 危险权限申请处理;
  • WebView相关;
  • JNI相关;
  • 与JS的交互相关;
  • 多媒体相关,如音乐播放、视频播放等;
  • 系统服务相关,如震动、通知等;
  • 数据库操作相关;
  • 需要在子线程中更新UI的,如SurfaceView、TextureView,使用场景如地图展示等;
  • 3D相关;
  • 访问SD卡非本App对应目录;

    如果有非常成熟的插件,其实也算可以跨平台。毕竟,不需要自己在各自平台加以实现,只需添加依赖项即可。这上面所列不能跨平台的,严格来说并不准确。但受时间精力所限,对各种插件了解不多,姑且这么列出来吧。如果没有插件可以使用,那么就需要自己编写可通信的平台代码。

(5)Flutter遗憾

    要统一这么多的平台,自然并非易事。尤其是这些平台已经发展了很多年,相当的成熟,各方面在某种程度上都达到了极致。所以不可避免地,Flutter有一些遗憾,如下:

  • 需要把Flutter各种库,如so库、插件库、dart库,放入最终的包中,使得App变得很大。一个仅仅展示HelloWorld的App,安装完后,要占据将近180M的空间;
  • 任何一个使用Flutter开发的App,上面所列举的库,都被包含其中。如果安装20个,那么最少可能有180 * 20 M的空间被消耗,很多库都是重复的,并且重复20次。如果有更多App,占据的空间更大,重复次数更多。
  • 性能问题。一个展示HelloWorld的App,冷启动的时间,Android 真机大概7-8s(7年前的机器,android系统7.0),IOS真机(iphone Xs max,最新系统16.0.2)大概5-6s。和原生App相比,差距实在太大了。这正是核心问题所在。而它又没办法避免,因为各种库需要被加载,尤其是flutter的so库(30M+)。

    综上,在一些性能要求不高的场景,可以使用;对于性能要求高的,目前没法满足。
    Over !

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容