一、概述
大家都知道,Flutter在release环境是以AOT模式运行的,这就决定了我们要做动态化的话无法简单的通过动态下发dart代码执行的。根据Fair团队的前期调研,我们对布局动态化和逻辑动态化的实现采用了两套不同的实现方案,对于布局部分,我们在解析dart源文件之后生成DSL产物下发,然后在端上解析DSL构建布局的方式,逻辑动态化的部分,我们采用的是dart源码转js下发的方式。
整个动态化流程大致如下:
二、整体流程概述
详述具体流程之前,我们先来看看整体的流程,然后再去讲解各个流程的原理细节。
整个流程大致分为两部分:
- 通过fair_ast_gen将源码解析并生成AstMap;
- 通过fair_dsl_gen将AstMap转换成我们需要的Fair DSL。
这里涉及到两个概念,大家需要先了解一下
- AST 全称是Abstract Syntax Tree,中文名为抽象语法树。
- DSL 全称是Domain Specific Language,中文名为领域特定语言。