当前位置: 首页 > 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.dtcms.com/a/307863.html

相关文章:

  • .Net + Qdrant 使用Microsoft.ML.OnnxRuntime调用本地大模型实现文本向量化,实现简单RAG
  • Java Spring Boot项目中集成Swagger完整步骤
  • PPOCRLabel部署
  • 通义千问Qwen3-30B-A3B-Thinking-2507技术解析:推理模型的工程实践突破
  • Kafka Streams窗口技术全解析:从理论到电商实时分析实战
  • 解决SparkSQL创建出来的数据库hive中无法识别的问题
  • 嵌入式学习日志————TIM输出比较
  • go goroutine chan 用法
  • tensorflow目标分类:分绍(一)
  • 力扣面试150题--只出现一次的数字II
  • ctfshow-web入门-254-266-反序列化
  • 人工智能之数学基础:频率和概率之间的关系
  • react调用接口渲染数据时,这些表格里的数据是被禁选的
  • 运行图生视频/文生视频(Wan2.X等)的显卡配置总结
  • 如何在 Ubuntu 24.04 或 22.04 LTS Linux 上安装 DaVinci Resolve
  • 图论-最短路 Bellman-Ford算法
  • 8.2-使用字符串存储 UTF-8 编码文本
  • AI对话-SpringAI破局尝试
  • TensorFlow深度学习实战——DeepDream
  • 分布式锁的基本原理和基于lua脚本的实现(Redisson)
  • 异常检测:算法分类及经典模型概览
  • 3.Linux 系统文件类型与文件权限
  • 学习笔记《区块链技术与应用》第三天 网络 难度
  • 力扣 Pandas 挑战(5)---数据分组
  • RabbitMQ 消费者确认 (Ack/Nack) (With Spring Boot)
  • Linux多线程线程控制
  • 专题:2025半导体行业研究报告:从AI芯片到封测突围的生死局|附40+份报告PDF、数据汇总下载
  • virtualbox+UBuntu20.04+内存磁盘扩容
  • Java异常:java.util.NoSuchElementException
  • 【数据结构初阶】--二叉树(六)