1、Flutter 动态化框架-Aion鸣羽 智能信息 Aion框架负责人个人简介周科羽(鸣羽),先后投身于Android插件化、多开、安全等技术领域,20年加入阿里智能信息事业群,负责了Flutter动态化框架-Aion 的从0到1搭建,以及负责了Aion框架从1.0 到 4.0版本的持续迭代。目录Aion 简介技术架构技术难点后续规划Aion简介为什么要做为什么要做FlutterFlutter动态化?动态化?为什么要做Flutter动态化 跨端框架对比FlutterProfile/ReleaseAOTlibapp.so/app.framework端技术跨端框架应用打包,发版ReactNativ
2、eJS Bundle前端技术跨端框架应用打包,上线打包解释执行为什么要做Flutter动态化 收益Flutter+动态化=1.研发测试效率2.快速迭代快速上线3.先上问题快速修复4.Flutter 支撑运营场景Aion简介怎么实现Flutter动态化?怎么实现Flutter动态化 方案对比Flutter动态化1.So 替换2.Snapshot JIT运行3.Web on Flutter4.自定义DSL5.双虚拟机解释执行6.单虚拟机混合执行怎么实现Flutter动态化 Android方案Flutter动态化1.So 替换2.Snapshot JIT运行3.Web on Flutter4.自定义
3、DSL5.双虚拟机解释执行6.单虚拟机混合执行只支持 AndroidDebug Flutter JIT VMRelease Flutter AOT VMlibapp.sosnapshotDart SourceCode怎么实现Flutter动态化 Web on FlutterFlutter动态化1.So 替换2.Snapshot JIT运行3.Web on Flutter4.自定义DSL5.双虚拟机解释执行6.单虚拟机混合执行JS 桥接 Flutter 引擎1.Widget 树桥接2.Render 树桥接3.渲染引擎桥接1.性能比原生差(增加了js engine,依赖ffi 通信)2.脱离Flu
4、tter生态1.前端技术栈 友好怎么实现Flutter动态化 自定义DSLFlutter动态化1.So 替换2.Snapshot JIT运行3.Web on Flutter4.自定义DSL5.双虚拟机解释执行6.单虚拟机混合执行代理类代理函数ProxyWidgetProxyElementProxyRender1.轻量级框架2.引擎Size增长小3.对原生侵入性低1.语法支持不完备(范型问题,类型比较)2.调用受限(局限在代理类和代理函数范围内)3.性能很差(for循环,复杂运算)怎么实现Flutter动态化 双虚拟机Flutter动态化1.So 替换2.Snapshot JIT运行3.Web
5、on Flutter4.自定义DSL5.双虚拟机解释执行6.单虚拟机混合执行增加支持动态加载的VM原生Flutter AOT VM动态化Dart代码非动态化Dart代码字节码1.动态化业务性能差(AOT JIT 解释执行)2.Size 增长巨大(两个libflutter.so)3.动态化业务与非动态化完全无法相互访问4.维护成本高支持双端解释器(类似Java Bytecode)1.支持所有语法、类继承2.支持Flutter生态内的三方库3.对原生框架侵入性低Flutter动态化1.So 替换2.Snapshot JIT运行3.Web on Flutter4.自定义DSL5.双虚拟机解释执行6.
6、单虚拟机混合执行FlutterVM支持解释执行AOT高性能高复杂代码非动态化业务动态化业务支持相互调用字节码1.动态化业务性能差(AOT JIT 解释执行)2.Size 增长巨大(两个libflutter.so)3.动态化业务与非动态化完全无法相互访问4.技术复杂度高1.支持所有语法、类继承2.支持Flutter生态内的三方库怎么实现Flutter动态化 单虚拟机混合执行怎么实现Flutter动态化 方案对比Flutter动态化1.So 替换2.Snapshot JIT运行3.Web on Flutter4.自定义DSL5.双虚拟机解释执行6.单虚拟机混