Flutter AAR(Embedding V2)环境下运行指定Dart命名入口点的正确API咨询及代码示例需求
Flutter AAR(Embedding V2)环境下运行指定Dart命名入口点的正确API咨询及代码示例需求
嗨,这个问题我之前升级Flutter的时候也踩过坑!Embedding V2确实把旧的FlutterMain静态方法都废弃了,换成了更模块化的API,咱们直接说解决方案:
首先你猜的方向没错,FlutterInjector.instance().flutterLoader().findAppBundlePath()就是替代原来FlutterMain.findAppBundlePath()的正确姿势;而DartEntrypoint.createDefault()只能用来创建指向默认main()函数的入口点,如果你要运行自定义的命名入口点(比如你的"fileManager"),得手动构建DartEntrypoint实例才行。
下面是适配Embedding V2的最小可运行代码片段,直接就能用到你的AAR集成场景里,而且是基于缓存的FlutterEngine来执行的:
// 导入必要的Embedding V2类 import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.dart.DartExecutor import io.flutter.embedding.engine.loader.FlutterInjector // 假设你已经有一个提前缓存好的FlutterEngine实例 val cachedFlutterEngine: FlutterEngine = ... // 替换成你的缓存引擎对象 // 1. 获取App Bundle路径(完全替代旧的FlutterMain.findAppBundlePath()) val appBundlePath = FlutterInjector.instance().flutterLoader().findAppBundlePath() // 2. 创建指向自定义命名入口点的DartEntrypoint val customEntrypoint = DartExecutor.DartEntrypoint( appBundlePath, "fileManager" // 你的Dart自定义入口点名称 ) // 3. 在缓存的FlutterEngine上执行这个自定义入口点 cachedFlutterEngine.dartExecutor.executeDartEntrypoint(customEntrypoint)
顺便提醒几个关键细节:
- 你的Dart代码里必须存在对应的命名入口函数,比如在lib目录下要这么写:
void fileManager() { // 这里写你的自定义入口逻辑 runApp(const FileManagerApp()); } - 如果缓存的引擎之前运行过其他入口点,记得根据业务需求判断是否需要重置引擎状态后再执行新入口
- 确保Android项目的依赖配置是基于Embedding V2的,别混进V1的旧依赖
要是你是第一次初始化引擎而非复用缓存,代码结构也类似,只是多一步创建引擎的操作:
val flutterEngine = FlutterEngine(context) // 后续的entrypoint创建和执行和上面的代码一致
这样就能完美解决你之前的静态导入报错问题,顺利运行自定义命名入口点啦~
内容来源于stack exchange
相关产品推荐
相关产品推荐

