When you're writing Rust and you want cross-platform support, Android is uniquely peculiar. Many OS functions that we take for granted when developing on desktop platforms are more complicated to access. It's not always a problem. If your code is purely computation or it's using std to do basic things like open a TCP socket or write to a file then this tends to work. Possibly those calls are gated by extra permissions that you have to declare in the app's manifest, but this is easy to do.
The fun begins when you want to use more advanced capabilities of the phone. Libc doesn't include an API for controlling Bluetooth adapters after all, nor does the NDK provide one. This functionality is only available to apps via Android's Java SDK. Also, some features that we normally expect to be available on Linux like NETLINK_ROUTE sockets are difficult to secure and Android blocks native code from using them. Again you have to use a Java API to access that information, where Android has more over say over how it works and what you can see.
It is possible to access these Java-based things from Rust through the power of JNI. From native code you can use a JNI library to instantiate classes and call methods on Java objects from outside the JVM. Java classes can declare methods that will be implemented by native compiled code, enabling them to invoke native code synchronously.