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。