| So a bit different from the other comments. We're a wearable company which of course pairs with an app. We built iOS first because that's what most of our users have, though the team is mostly on Android. We built our logic in Rust, so that compiles cross platform. It's really just the UI layer that is per platform. Though I had initially written our first demo in React-Native, the team wanted to go with native UI. Lately we've been talking about moving the timeline for our Android app up because we can get AI to help using the iOS app as a foundation. I haven't seen anything really new and compelling in iOS/Android land. The promise of right once run anywhere continues to be a promise, and the bluetooth libraries across different devices (particularly in Android land) has me concerned. |
I work on the Android side for a company that develops an external bluetooth device (not a wearable, but similar enough) and the bluetooth library situation has certainly been an issue to be concerned about.
Using the default Android bluetooth SDK "raw" is fraught with potential problems, at the very least you need some sort of added message-queue-like system built on top since it does none of this for you. You also have to contend with a lot of strange device specific issues (of the type "works fine on 99% of Android devices, this one Samsung device has a driver quirk we need to work around", etc).
Things looked pretty good with the Jetpack androidx.bluetooth library as a higher level abstraction, but Google suddenly deprecated it and stopped working on it before it left alpha.
After lots of investigations and iterations I ended up using Nordic Semiconductor's 2.0 Kotlin BLE Library, which is technically also still in alpha release, but is much more stable than that designation suggests.
https://github.com/nordicsemi/Kotlin-BLE-Library
After having messed with all of the options, I highly recommend Nordic's library as a solid basis for using Bluetooth in modern Android/Kotlin, but in your specific situation I'm not sure if bridging it to Rust would be less or more painful than having an LLM generate a Rust wrapper and message queue system over the raw android.bluetooth library.