You might look at Codename One. They ported Cordova's BLE library, which is probably slow because it runs on the device's browser as I understand. Codename One takes code you write in Java, and then builds native Android and iOS application files. It's statically compiled, so it doesn't break when the browser is updated and probably runs faster also.
In general, BLE on Android has some challenges. There are a number of workarounds needed and you have to write some code to handle checking the Android API level and then calling different methods for scanning the device depending on the API level. Also, I think starting with level 23, you need to gain some permission from the user at runtime, not ahead of time like it used to be. On devices not running API level 23, you can't do that or it will crash (I've heard, I haven't gotten this far yet and still target API 21).
Good luck whichever way you choose!