Android Wrapper 输出说明
该目录会在执行 pnpm build:android 后被复制到 dist/android/wrapper,用于交付给 Android 原生宿主工程。
目录内容
../maven:brownfield AAR 及其依赖对应的 Maven 仓库wrapper/:对外暴露DuooomiBleManager和DuooomiBleRuntime的 Android Library 模块
宿主 App 接入步骤
- 将
dist/android/maven配置为宿主工程可访问的 Maven 仓库。 - 将
dist/android/wrapper作为 composite build 引入,或者直接把wrapper模块复制到宿主工程。 - 在宿主 App 的一个长期存在的容器里挂载 Brownfield 对应的 React Native View。
- 运行时启动后,通过
runtime.manager调用蓝牙能力。
最小使用示例
val runtime = DuooomiBleRuntime()
runtime.start(container = rootView) { context ->
createReactNativeView(context)
}
lifecycleScope.launch {
val result = runtime.manager.connect(deviceId = "device-id")
Log.d("DuooomiBle", result.toString())
}
如果是扫描,仍然沿用监听方式:
runtime.manager.onDiscoveredDevicesChange = { devices ->
Log.d("DuooomiBle", devices.toString())
}
runtime.manager.scan()
如果宿主需要先初始化 Brownfield Host
val runtime = DuooomiBleRuntime()
runtime.start(
container = rootView,
initializeHost = {
initializeBrownfieldHost()
}
) { context ->
createReactNativeView(context)
}
说明
DuooomiBleRuntime负责挂载隐藏的 RN 容器并启动 JS 运行时DuooomiBleManager的大部分命令方法为suspend,例如connect、bind、transferFilescan/stopScan仍然保持事件监听方式DuooomiBleManager负责发送expo-brownfield消息和订阅BrownfieldStatecreateReactNativeView(context)需要由宿主工程提供,因为不同宿主的 Brownfield 接入方式可能不同
如果没有先调用 DuooomiBleRuntime.start(...),那么 JS 入口不会真正启动,scan、connect 等调用也不会生效。