如何创建可用于Android与Swift项目的Dart蓝牙服务包?
可行方案及实现指南
方案1:封装为Flutter Plugin,通过原生嵌入调用
这是最直接的落地方式,利用Flutter的原生嵌入能力,让Android/iOS原生APP集成你的Dart蓝牙服务逻辑。
实现步骤
创建Flutter Plugin项目
执行命令初始化plugin模板:flutter create --template=plugin --platforms=android,ios ble_service_plugin将你现有的蓝牙服务代码(数据打包、AES加密、BLE通信逻辑)迁移到plugin的
lib目录下,暴露核心方法供原生调用。定义MethodChannel实现跨端通信
在Dart层创建MethodChannel,处理原生端的调用请求:class BleService { static const MethodChannel _channel = MethodChannel('ble_service_channel'); // 初始化BLE服务 static Future<bool> init() async { return await _channel.invokeMethod('init_ble'); } // 发送加密后的数据到指定设备 static Future<String> sendEncryptedData(String deviceId, Uint8List rawData) async { return await _channel.invokeMethod('send_encrypted_data', { 'device_id': deviceId, 'raw_data': rawData, }); } }同时在Android和iOS端实现MethodChannel的方法处理逻辑,转发调用到你的Dart服务(注:flutter_blue_plus的原生实现已由插件本身处理,无需重复编写)。
原生APP集成Flutter模块
- Android端示例:
// 初始化FlutterEngine并缓存 val flutterEngine = FlutterEngine(context) flutterEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) FlutterEngineCache.getInstance().put("ble_service_engine", flutterEngine) // 通过MethodChannel调用Dart方法 val channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "ble_service_channel") channel.invokeMethod("init_ble", null, object : MethodChannel.Result { override fun success(result: Any?) { // 处理初始化成功逻辑 } override fun error(errorCode: String, errorMessage: String?, errorDetails: Any?) { // 处理错误 } override fun notImplemented() {} }) - iOS端示例:
// 初始化FlutterEngine并缓存 let flutterEngine = FlutterEngine(name: "ble_service_engine") flutterEngine.run() FlutterEngineCache.shared().set(flutterEngine, forKey: "ble_service_engine") // 通过MethodChannel调用Dart方法 let channel = FlutterMethodChannel(name: "ble_service_channel", binaryMessenger: flutterEngine.binaryMessenger) channel.invokeMethod("init_ble", arguments: nil) { result in guard let success = result as? Bool else { return } // 处理初始化成功逻辑 }
- Android端示例:
方案2:编译为原生框架(依赖Flutter运行时)
通过Flutter官方命令生成原生可用的框架,供原生APP直接依赖:
- Android:执行
flutter build aar生成AAR包,添加到原生项目的依赖中 - iOS:执行
flutter build ios-framework生成XCFramework,集成到Xcode项目中
这种方式本质还是依赖Flutter运行时,但可以省去手动创建plugin的步骤,直接将你的蓝牙服务代码作为Flutter模块编译分发。
关键注意事项
- 由于依赖
flutter_blue_plus,原生APP必须集成Flutter运行时环境,无法完全脱离Flutter独立运行 - 确保AES加密等纯业务逻辑与Flutter UI完全解耦,只保留核心服务代码
内容的提问来源于stack exchange,提问作者OmerTokmak
相关产品推荐
相关产品推荐

