当前位置: 首页 > news >正文

Flutter module 是如何被原生 Android 项目通过 Gradle 引入的

下面我将详细讲解 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打开摄像头、支付、导航等
原生 → FlutterMethodChannel返回原生结果给 Flutter
原生 → FlutterEventChannel蓝牙监听、位置更新等

🧭 三、总结推荐使用路径

场景推荐方式
项目中只用一个 Flutter 页面使用 flutter_module + include_flutter.groovy
多个 App 共用 Flutter UIflutter build aar 生成 AAR 离线包
高频原生 ↔ Flutter 通信需求配置 MethodChannel / EventChannel
http://www.lryc.cn/news/606080.html

相关文章:

  • Flutter Chen Generator - yaml配置使用
  • 原生安卓与flutter混编的实现
  • 是否需要买一个fpga开发板?
  • 嵌入式硬件学习(十)—— LED驱动+杂项设备驱动
  • 【Unity】实现小地图
  • TDengine 中 TDgp 中添加算法模型(异常检测)
  • 【大模型理论篇】跨语言AdaCOT
  • Flutter 页面跳转及传参总结
  • 8.2-使用字符串存储 UTF-8 编码文本
  • RAG:让AI更聪明的“外接大脑“ | AI小知识
  • ECMAScript2023(ES14)新特性
  • C# 基于halcon的视觉工作流-章27-带色中线
  • HTM 5 的离线储存的使用和原理
  • JavaEE初阶1.0
  • 认知绞肉机:个体实践视域下认知暴力与元认知升维的活体实验研究
  • 今日做题练习
  • 记录自己使用gitee和jenkins
  • PHP 核心特性全解析:从实战技巧到高级应用(2)
  • 按键精灵iOS工具元素命令SetText:自动化输入的终极解决方案
  • .NET Core部署服务器
  • Linux网络-------3.应⽤层协议HTTP
  • Java 大视界 -- Java 大数据在智能交通公交客流预测与线路优化中的深度实践(15 城验证,年省 2.1 亿)(373)
  • 快速搭建Node.js服务指南
  • 前端核心技术Node.js(四)——express框架
  • 8,FreeRTOS时间片调度
  • RPA-重塑企业自动化流程的智能引擎
  • 《能碳宝》AI辅助开发系统方案
  • 免费语音识别(ASR)服务深度指南​
  • 深入解析域名并发请求限制与HTTP/2多路复用技术
  • 电脑远程关机的重要性