BtlePlugは、Windows 10、MacOS、Linux、iOS、およびAndroidをサポートするAsync Rust Bleライブラリです(Flutterを含む、詳細については以下を参照)。
それは、完全にクロスプラットフォームライブラリを構築することを目的として、さまざまなプラットフォーム(Rumble、Blurmacなど)のために、以前に放棄されたいくつかのライブラリから成長しました。ライブラリがどのように成長したかに興味がある場合は、このブログ投稿で詳細を読むことができます。
BtlePlugは、ホスト/中央モードのみを目的としています。末梢BTLE(つまり、1つに接続する代わりにBluetooth LEデバイスのように振る舞う)に興味がある場合は、BlusterまたはBLE-Peripheral-Rustをチェックしてください。
このライブラリは、Bluetooth 2/Classicをサポートしていません。 BT2/クラシックサポートを追加する計画はありません。
| 特徴 | Windows | macOS / iOS | Linux | アンドロイド |
|---|---|---|---|---|
| アダプターを表示します | x | x | x | x |
| 複数のアダプターを処理します | x | |||
| デバイスを発見します | x | x | x | x |
| └サービスを発見します | x | x | x | x |
| └特性を発見します | x | x | x | x |
| decruptived発見記述子を発見します | x | x | x | x |
| └名前を発見します | x | x | x | x |
| bulenceメーカーデータを発見します | x | x | x | x |
| serviceサービスデータを発見します | x | x | x | x |
| macアドレスを発見します | x | x | x | |
| Gatt Server Connect | x | x | x | x |
| Gatt Server Connectイベント | x | x | x | x |
| Gatt Server切断 | 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を取得します | ||||
| 接続間隔を取得します |
apiモジュール内のいくつかの一般的なタイプでSerdeのSerializeおよびDeserialize実装できるようにするには、 serde機能を使用します。
[ dependencies ]
btleplug = { version = " 0.11 " , features = [ " serde " ] } MacOS Big Sur(11)以降でBluetoothを使用するには、 NSBluetoothAlwaysUsageDescription btleplug含むInfo.plistを使用してバイナリをアプリケーションバンドルにパッケージ化する必要があります。システムの設定→セキュリティとプライバシー→プライバシー→ Bluetoothに移動し、「+」ボタンをクリックし、「ターミナル」(または使用するITERMまたは端末アプリケーション)を選択することで、後者を実行できます。
ハイブリッドラスト/Javaビルドを必要とするため、Android用のBtlePlugにはやや複雑なセットアップが必要です。
ビルドの実行に関するいくつかの情報は、BTLPlugのAndroidサポートのための元の号で利用できます。
ビルドプロセスの簡単な概要:
src/droidplug/javaディレクトリにbtleplugのJava部分を構築し、付属のGradleファイルを使用して、それらをMaven Repoに使用するか、AndroidアプリのJava部分にローカルの実装としてそれを指します。cargo-ndkを使用してビルドすることをお勧めします。 Jnilibsを出力し、アプリの適切な場所に到達することを確認してください。BtlePlugのJavaコードによって生成された.AARファイルはネイティブコードによってのみアクセスされ、デッドコードの削除とリソースの縮小の一部として最適化できるため、BtlePlugを使用する場合、Proguardの最適化が問題になる可能性があります。これを修正するには、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.** { *; }
corebluetoothの実装はmacosとiOS間で共有されるため、iOSのbtleplugは「単に動作する」必要があり、安定しているようです。これがどのように構築されるかは、アプリのセットアップと拘束力のある言語に基づいて異なりますが、サンプルの指示は次のとおりです(ここから取得):
以下にリストされているフラッターシムにもいくつかの例があります。
Flutterを特別にサポートしていませんが、https://github.com/trobanga/flutter_btleplugでテンプレートリポジトリがあります。このテンプレートには、BtlePlugを使用してAndroidとiOSの両方にビルドがあります。
フラッターコンピレーションはプラットフォーム全体で複雑になる傾向があるため、フラッタービルドの問題を助けることはできません。
タウリは具体的にはサポートしていませんが、https://github.com/mnlphlp/tauri-plugin-brecでプラグインがあります。すべてのタウリの質問は、ここに来る前にプラグインのリポジトリに行くべきであることに注意してください。このプロジェクトの開発者はタウリを使用していないため、タウリの問題を助けることはできません。
誰もが異なるBluetoothのニーズを持っているので、BtlePlugがあなたのものに合わない場合は、Rustコミュニティでこれらの他のライブラリを試してください!
BTLEPLUGは、BSD 3節のライセンスの対象であり、MIT/ApacheデュアルライセンスでそれぞれRumble/Blurmacの一部と、それぞれBSD 3-Clauseライセンスでカバーされています。詳細情報と著作権情報については、license.mdを参照してください。