Flutter 是 谷歌 最近推出的全新跨平台移动应用框架,可以说是一个相当有前途的技术。然而像很多跨平台框架一样,Flutter也有其局限性,例如不便的兼容性,这也使得许多企业开发团队对 Flutter 持有一定的保留态度,尤其是已经有了较成熟 安卓 原生应用的时候。
但 Flutter 与 安卓 原生应用之间并非完全不能兼容,而是能实现混合开发。下面将以常常出现在大家视野里的实现方法来简要介绍 Flutter 与 安卓 原生混合开发的实现原理
Flutter 提供了一种叫做 FlutterView 的组件,这是一个继承自 View 的组件,可以在 安卓 原生应用中嵌入一个 Flutter 页。FlutterView 的核心代码量较小,一般不需要修改,只需注入 Flutter 页即可。
Flutter 页是一个完整的独立应用,可以在 Flutter 中实现各种 UI 控件,数据处理和逻辑功能等。为了将 Flutter 页插入到 安卓 应用中,Flutter提供了两种方法Embedding V1 和 Embedding V2。
Embedding V1
Embedding V1 是一种最简单的嵌入方法,而且兼容 安卓 4.1 以上版本,可以使用官方提供的库来实现。具体实现步骤如下
1. 在 安卓 原生应用的布局文件中添加 FlutterView 组件
安卓:id=@+id/flutter,view
安卓:layout,width=match,parent
安卓:layout,height=match,parent />
2. 在 安卓 原生应用的 Activity 中添加 FlutterEngine
FlutterEngine flutterEngine = new FlutterEngine(this);
flutterEngine.getDartExecutor().executeDartEntrypoint(
DartExecutor.DartEntrypoint.createDefault());
3. 将 FlutterEngine 与 FlutterView 组件关联起来
flutterView = findViewById(R.id.flutter,view);
flutterView.attachToFlutterEngine(flutterEngine);
嵌入之后,就可以在 安卓 原生应用中展示 Flutter 页了。
Embedding V2
Embedding V2 是新的嵌入方法,提供了更好的扩展性和稳定性,不过需要使用官方提供的插件,对原有代码侵入性较大。具体实现步骤如下
1. 在 安卓 原生应用的布局文件中添加 FlutterFragment 组件
安卓:id=@+id/flutter,fragment
安卓:name=io.flutter.embedding.安卓.FlutterFragment
安卓:layout,width=match,parent
安卓:layout,height=match,parent
app:flutterEmbedding=2 />
2. 在 安卓 原生应用的 Activity 中通过 FlutterFragment 得到 FlutterEngine 的实例
FlutterFragment flutterFragment = getSupportFragmentManager()
.findFragmentById(R.id.flutter,fragment);
FlutterEngine flutterEngine = flutterFragment.getFlutterEngine();
3. 将 FlutterEngine 与 FlutterFragment 组件关联起来
flutterFragment.attachToFlutterEngine(flutterEngine);
这样就可以在 安卓 原生应用中展示 Flutter 页了。
总的来说Flutter 与 安卓 原生混合开发是完全可行的,同时开发者可以自由选择使用 Embedding V1 或 Embedding V2 实现嵌入。在混合开发过程中,开发者可以加快并完全发挥 Flutter 的优势,如热重载、跨平台运行等,同时也可以保留原有的 安卓 原生应用的特征,兼顾两者的长处。