概述

#

如果您针对 Flutter 引擎的 Java 嵌入编写 Java JUnit 测试(例如 Robolectric 测试)并使用了 FlutterMain.setIsRunningInRobolectricTest(true) API,请将其替换为以下内容

Java
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
        new FlutterInjector.Builder()
            .setFlutterLoader(new FlutterLoader(mockFlutterJNI))
            .build());

这种情况应该非常罕见。

背景

#

FlutterMain 类本身正在被弃用,并被 FlutterInjector 类取代。FlutterMain 类使用了许多静态变量和函数,这使得测试变得困难。FlutterMain.setIsRunningInRobolectricTest() 是一种临时静态机制,允许测试在宿主机器上的 JVM 上运行,而无需加载 libflutter.so 原生库(这在宿主机器上无法完成)。

现在,Flutter 的 Android/Java 引擎嵌入中测试所需的所有依赖注入都已移至 FlutterInjector 类,而非一次性解决方案。

FlutterInjector 类中,setFlutterLoader() Builder 函数允许控制 FlutterLoader 类如何定位和加载 libflutter.so 库。

变更说明

#

引擎提交移除了 FlutterMain.setIsRunningInRobolectricTest() 测试函数;以下提交添加了 FlutterInjector 类以辅助测试。PR 20473 进一步重构了 FlutterLoaderFlutterJNI,以支持额外的模拟和测试。

以支持额外的模拟/测试。

迁移指南

#

迁移前的代码

Java
FlutterMain.setIsRunningInRobolectricTest(true);

迁移后的代码

Java
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
        new FlutterInjector.Builder()
            .setFlutterLoader(new FlutterLoader(mockFlutterJNI))
            .build());

时间线

#

版本中发布:1.22.0-2.0.pre.133
稳定版本:2.0.0