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