Flutter module 是如何被原生 Android 项目通过 Gradle 引入的
场景推荐方式项目中只用一个 Flutter 页面使用多个 App 共用 Flutter UI用生成 AAR 离线包高频原生 ↔ Flutter 通信需求配置 MethodChannel / EventChannel。
·
下面我将详细讲解 Flutter module 是如何被原生 Android 项目通过 Gradle 引入的,包括 include_flutter.groovy 的原理和作用。这有助于你深刻理解 Flutter 与原生集成的机制。
📦 一、flutter build aar:生成可复用的 Flutter 离线原生包(AAR)
🔧 用法:
cd flutter_module/
flutter build aar
📁 输出内容:
在 build/ 目录中生成结构如下的 AAR:
build/host/outputs/repo/
└── com/example/flutter_module/
└── flutter_module/
└── 1.0.0/
├── flutter_module-1.0.0.aar ← 主 AAR 包
├── flutter_module-1.0.0.pom ← Maven 配置
✅ 用法说明:
- 你可以将 AAR 上传到私有 Maven 仓库(如 Nexus、Jitpack、阿里云仓库)
- 或直接在原生项目中用
flatDir引入本地依赖:
repositories {
flatDir {
dirs '../flutter_module/build/host/outputs/repo'
}
}
dependencies {
implementation(name: 'flutter_module-1.0.0', ext: 'aar')
}
🧠 优势:
- 原生项目中无需包含整个 Flutter 工程,只需使用预编译的 AAR
- 更适合团队多人协作、多个 App 共享 Flutter UI 组件场景
- 提升 Gradle 构建效率,避免冗余依赖
🔌 二、Flutter 与原生的通信机制:MethodChannel、EventChannel
1️⃣ MethodChannel:Flutter 主动调用原生功能(或原生响应 Flutter 请求)
示例:
Flutter 端调用:
const platform = MethodChannel('com.example.channel');
Future<void> getBatteryLevel() async {
final level = await platform.invokeMethod('getBatteryLevel');
print("Battery level: $level");
}
Android 原生响应:
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.channel")
.setMethodCallHandler { call, result ->
if (call.method == "getBatteryLevel") {
val level = getBatteryLevel()
result.success(level)
} else {
result.notImplemented()
}
}
2️⃣ EventChannel:用于发送原生持续性事件到 Flutter(如传感器、蓝牙等)
原生端推送事件:
val eventChannel = EventChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.event")
eventChannel.setStreamHandler(object : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, events: EventChannel.EventSink) {
startBluetoothScan { data -> events.success(data) }
}
override fun onCancel(arguments: Any?) {
stopScan()
}
})
Flutter 接收:
const eventChannel = EventChannel('com.example.event');
eventChannel.receiveBroadcastStream().listen((data) {
print("接收到原生事件:$data");
});
💡 通信场景举例:
| 通信方向 | 使用方式 | 典型应用 |
|---|---|---|
| Flutter → 原生 | MethodChannel |
打开摄像头、支付、导航等 |
| 原生 → Flutter | MethodChannel |
返回原生结果给 Flutter |
| 原生 → Flutter | EventChannel |
蓝牙监听、位置更新等 |
🧭 三、总结推荐使用路径
| 场景 | 推荐方式 |
|---|---|
| 项目中只用一个 Flutter 页面 | 使用 flutter_module + include_flutter.groovy |
| 多个 App 共用 Flutter UI | 用 flutter build aar 生成 AAR 离线包 |
| 高频原生 ↔ Flutter 通信需求 | 配置 MethodChannel / EventChannel |
更多推荐

所有评论(0)