技术咨询:能否在Android Kotlin/Java项目中使用Flutter包?
可以在Android Kotlin/Java应用中使用Flutter包吗?
完全可以实现,官方提供了成熟的集成方案,核心思路是将Flutter模块嵌入原生Android项目,以此复用Flutter包的功能。以下是具体实现步骤:
创建Flutter模块
在原生Android项目的同级目录下,执行命令生成Flutter模块:flutter create --template module flutter_module配置原生项目依赖
在原生项目的settings.gradle中添加Flutter模块的引用:setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir.parentFile, 'flutter_module/.android/include_flutter.groovy' ))接着在app模块的
build.gradle中添加依赖:implementation project(':flutter')调用Flutter包功能
分两种场景处理:- 需要UI展示的Flutter包
在Kotlin中启动Flutter页面,复用包的UI功能:val flutterEngine = FlutterEngine(this) flutterEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) FlutterEngineCache.getInstance().put("my_engine", flutterEngine) startActivity( FlutterActivity.withCachedEngine("my_engine").build(this) ) - 纯逻辑类Flutter包
通过MethodChannel实现原生与Flutter的跨端通信,调用包的逻辑功能:
Flutter端代码(在模块的main.dart中):
原生Kotlin代码:import 'package:flutter/services.dart'; import 'package:your_flutter_package/your_flutter_package.dart'; void main() { const MethodChannel channel = MethodChannel('com.your.app/flutter_func'); channel.setMethodCallHandler((call) async { if (call.method == 'invokePackageFunc') { // 调用目标Flutter包的方法 return await YourFlutterPackage.processData(call.arguments); } return null; }); }val channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.your.app/flutter_func") channel.invokeMethod("invokePackageFunc", "传入参数") { result -> // 处理Flutter返回的结果 result?.let { // 业务逻辑处理 } }
- 需要UI展示的Flutter包
关键注意点
- 确保Flutter模块的
pubspec.yaml中已添加目标Flutter包依赖,并执行flutter pub get - 原生项目的
minSdkVersion需与Flutter模块兼容(建议不低于21) - 若Flutter包包含Android原生插件代码,需确认这些代码能被正确集成到原生项目中
- 确保Flutter模块的
内容的提问来源于stack exchange,提问作者Markusbug
相关产品推荐
相关产品推荐

