33 个版本

0.11.5 2024年1月10日
0.11.3 2023年11月19日
0.11.0 2023年7月5日
0.10.4 2022年11月27日
0.4.1 2020年3月17日

#14硬件支持

Download history 4662/week @ 2024-04-22 5468/week @ 2024-04-29 4605/week @ 2024-05-06 3541/week @ 2024-05-13 3839/week @ 2024-05-20 3778/week @ 2024-05-27 3025/week @ 2024-06-03 3037/week @ 2024-06-10 3629/week @ 2024-06-17 4918/week @ 2024-06-24 4242/week @ 2024-07-01 4316/week @ 2024-07-08 3066/week @ 2024-07-15 3443/week @ 2024-07-22 3024/week @ 2024-07-29 3021/week @ 2024-08-05

13,080 每月下载量
用于 48 个 Crates (43 个直接使用)

MIT/Apache-2.0/BSD-3-Clause

350KB
7.5K SLoC

包含 (JAR 文件,59KB) gradle-wrapper.jar

btleplug

Crates.io Version docs.rs page Crates.io Downloads Crates.io License

Discord

Github donate button

btleplug 是一个异步 Rust BLE 库,支持 Windows 10、macOS、Linux、iOS 和 Android(包括 Flutter,更多信息见下文)。

btleplug 是从几个早期废弃的针对各种平台的库(如 rumbleblurmac 等)发展而来的,目标是构建一个完全跨平台的库。计划添加对其他平台(如 Android)的支持。

btleplug 仅支持主机/中心模式。如果您对外围 BTLE(即充当蓝牙 LE 设备而不是连接到设备)感兴趣,请查看 bluster

此库不支持蓝牙 2/CLASSIC。没有计划添加 BT2/Classic 支持。

平台状态

  • Linux / Windows / macOS / iOS / Android
    • 设备枚举和特性/服务已实现并工作。
    • 如果您发现任何错误或缺失功能,请提交报告。
  • WASM/WebBluetooth
    • WebBluetooth 是可能的,并且已有 PR,但需要审查。
    • 跟踪问题在这里
    • 请等待基本实现落地后再提交更多问题。

平台功能表

  • X: 完成并发布
  • O: 开发中
  • 空白:未开始
功能 Windows MacOS / iOS Linux Android
启动适配器 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

库功能

序列化/反序列化

为了在 api 模块中的一些常见类型上实现 serde 的 SerializeDeserialize,请使用 serde 功能。

[dependencies]
btleplug = { version = "0.10", features = ["serde"] }

特定平台构建/安装说明

macOS

要在 macOS Big Sur (11) 或更高版本上使用蓝牙,您需要将您的二进制文件打包成一个包含 NSBluetoothAlwaysUsageDescription 的应用程序包,或者(对于如 btleplug 中的示例这样的命令行应用程序)为您的终端启用蓝牙权限。您可以通过进入 系统偏好设置安全性与隐私隐私蓝牙,点击 '+' 按钮,并选择 '终端'(或 iTerm 或您使用的任何终端应用程序)来执行此操作。

Android

由于需要混合 Rust/Java 构建,btleplug for Android 需要一个相当复杂的设置。

有关执行构建的一些信息可在 btlplug 在 Android 上的原始问题 中找到。

构建过程的简要概述

  • 对于 Java,您需要 jni-utils-rs 的 Java 部分,它可以在 Maven 仓库中找到,或者本地(如果本地,则需要检出 btleplug 并更改 gradle 文件)。
  • 您可以选择在 src/droidplug/java 目录中构建 btleplug 的 Java 部分,使用包含的 gradle 文件,并将其放入 Maven 仓库,或者让您的 Android 应用程序的 Java 部分指向该本地实现。
  • 对于 Rust,构建应按常规进行,但我们建议使用 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.** { *; }

iOS

由于 Corebluetooth 实现在 macOS 和 iOS 之间共享,因此 btleplug 在 iOS 上应该“直接使用”,并且看起来很稳定。构建方式可能因您的应用程序设置和您正在绑定到的语言而异,但示例说明如下(此处摘录

  • 编写一个使用 btleplug 并向 C 暴露 FFI API 的 Rust 库(静态)
  • 使用 cbindgen 为该 API 生成 C 头文件
  • 使用 cargo-lipo 构建通用的静态库
  • 将头文件和库拖入您的 Xcode 项目中
  • NSBluetoothAlwaysUsageDescription 添加到您的 Info.plist 文件中

下面列出了 Flutter shim 的一些示例。

Flutter

虽然我们还没有在这个存储库中专门支持 Flutter,但有一个模板存储库可在 https://github.com/trobanga/flutter_btleplug 找到。此模板为 Android 和 iOS 使用 btleplug 提供了构建。

替代库

每个人的蓝牙需求都不同,所以如果 btleplug 不适合您,请尝试这些由 Rust 社区提供的其他库!

  • Bluey - 采用不同 API 方法(不太关注 Bluez)的跨平台 BLE 库
  • Bluer - Linux 上 Bluez 的官方 Rust 接口,由于它仅支持一个平台,因此具有更多功能(我们内部使用 Bluez-async。)

许可证

BTLEPlug遵循BSD 3-Clause许可证,其中部分内容来自Rumble/Blurmac,分别遵循MIT/Apache双许可和BSD 3-Clause许可证。更多信息及版权信息请参阅LICENSE.md文件。

依赖项

~5–46MB
~708K SLoC