BtlePlug是一个异步Rust BLE库,支持Windows 10,MacOS,Linux,iOS和Android(包括Flutter,有关更多信息,请参见下文)。
它从几个早期的废弃图书馆中生长,用于各种平台(Rumble,Blurmac等),目的是构建一个完全跨平台库。如果您对图书馆的增长感到好奇,则可以在此博客文章中了解更多信息。
BtlePlug仅是主机/中央模式。如果您对外围btle感兴趣(即表现得像蓝牙LE设备,而不是连接到一个设备),请查看Bluster或Ble-fer-feripheral-Rust。
该库不支持蓝牙2/经典。没有计划添加BT2/Classic支持的计划。
| 特征 | 视窗 | MacOS / iOS | Linux | 安卓 |
|---|---|---|---|---|
| 提出适配器 | x | x | x | x |
| 处理多个适配器 | x | |||
| 发现设备 | x | x | x | x |
| └发现服务 | x | x | x | x |
| └发现特征 | x | x | x | x |
| └发现描述符 | x | x | x | x |
| └发现名称 | x | x | x | x |
| └发现制造商数据 | x | x | x | x |
| └发现服务数据 | x | x | x | x |
| └发现MAC地址 | x | x | x | |
| GATT服务器连接 | x | x | x | x |
| GATT服务器连接事件 | x | x | x | x |
| GATT服务器断开连接 | x | x | x | x |
| GATT服务器断开事件 | x | x | x | x |
| 写入特征 | x | x | x | x |
| 从特征中读取 | x | x | x | x |
| 订阅特征 | x | x | x | x |
| 取消订阅特征 | x | x | x | x |
| 获取特征通知事件 | x | x | x | x |
| 读取描述符 | x | x | x | x |
| 写描述符 | x | x | x | x |
| 检索mtu | ||||
| 检索连接间隔 |
要实现SERDE在api模块中某些常见类型上的Serialize和Deserialize ,请使用serde功能。
[ dependencies ]
btleplug = { version = " 0.11 " , features = [ " serde " ] }要在Macos Big Sur(11)或更高版本上使用蓝牙,您需要将二进制文件包装到带有Info.plist应用程序包中,包括NSBluetoothAlwaysUsageDescription ,或(对于命令行应用程序,例如btleplug包含的示例)启用bluetooth persimer的bluetooth persimel。您可以通过转到系统首选项→安全与隐私→蓝牙,单击“+”按钮,然后选择“终端”(或ITERM或您使用的终端应用程序)。
由于需要混合生锈/Java构建,因此Android的Btleplug需要有些复杂的设置。
关于执行构建的一些信息在原始问题中可用于BTLPLUG中的Android支持。
快速概述构建过程:
src/droidplug/java目录中构建BtlePlug的Java部分,然后将其构建到Maven Repo,或者将Android App的Java部分指向本地实现。cargo-ndk构建构建,但构建应尽其所能。输出jnilibs,并确保它们最终位于应用程序中的正确位置。使用BtlePlug时,Proguard优化可能是一个问题,因为BtlePlug中Java代码生成的.AAR文件仅通过本机代码访问,并且可以作为死亡代码删除和资源缩小的一部分进行优化。为了解决此问题,需要对您的build.gradle文件进行更改,并且需要定义Proguard规则。
用于build.gradle:
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs . debug
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android-optimize.txt ' ), ' proguard-rules.pro '
}
}proguard-rules.pro:
#Flutter Wrapper - Only needed if using flutter
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
#btleplug resources
-keep class com.nonpolynomial.** { *; }
-keep class io.github.gedgygedgy.** { *; }
由于MACOS和iOS之间共享了CoreBluetooth实现,因此iOS上的Btleplug应该“工作”,并且似乎是稳定的。如何构建的情况可能会根据您的应用程序设置以及您绑定的语言而有所不同,但是示例说明如下(从此处获取):
下面列出的颤抖垫片中也有一些示例。
虽然我们不具体支持颤动,但在https://github.com/trobanga/flutter_btleplug上有一个模板回购。该模板使用Btleplug为Android和iOS构建。
随着颤抖的汇编趋向于跨平台复杂,我们无能为力地解决扑朔迷离的构建问题。
虽然我们不具体支持Tauri,但在https://github.com/mnlphlp/tauri-plugin-blec上提供了一个插件。请注意,所有Tauri的问题都应该转到插件存储库之前,我们无法解决Tauri问题,因为该项目的开发人员都没有使用Tauri。
每个人都有不同的蓝牙需求,因此,如果Btleplug不适合您,请尝试Rust Community的其他图书馆!
BtlePlug涵盖了BSD 3级差额许可证,其中一些来自MIT/Apache Dual许可证的Rumble/Blurmac的零件分别为BSD 3-判决许可证。有关更多信息和版权信息,请参见License.MD。