Android versions of BASS and the add-ons can be found on the BASS webpage.
The libraries include support for Java code (via BASS classes), as well as native code (via the usual BASS headers). The Java API follows the C/C++ API as much as possible, but there are some unavoidable differences, mainly in parameter/return types. The BASS classes are included in source form (eg. BASS.JAVA file), so you can see exactly what's what in there. Java versions of the DSPTEST/FXTEST/LIVESPEC/NETRADIO/PLUGINS/RECTEST/SPECTRUM and MIDITEST examples are included (along with Android Studio projects) to demonstrate things. Note the add-on JAVA files (containing an add-on's class) are only needed when calling the add-on's functions (as in MIDITEST), not when using the plugin system (as in PLUGINS).
BASS can use any of Android's AAudio, OpenSL ES, and AudioTrack APIs for output. By default, AAudio is used on Android 8.1 and above, and OpenSL ES on older Android versions. AudioTrack output is also available via the BASS_DEVICE_AUDIOTRACK flag. AAudio can be disabled (in favour of OpenSL ES) by setting the BASS_CONFIG_ANDROID_AAUDIO config option to 0. AAudio can also be enabled on Android 8.0 by setting that to 1 but some devices have a problem with it. The BASS_CONFIG_DEV_BUFFER config option determines the device/output buffer size used by BASS. That currently defaults to 40ms. When AudioTrack output is used, the buffer size will always be at least the length given by the AudioTrack.getMinBufferSize function. BASS_Init will default to using the device's native sample rate (as reported by AudioTrack.getNativeOutputSampleRate) rather than the rate provided in the "freq" parameter, but that can be overridden via the BASS_DEVICE_FREQ flag. High resolution output is supported on Android 5, while older Android versions are limited to 16-bit output. 16-bit output can be forced via the BASS_DEVICE_16BITS flag.
With Android 5 or above, BASS can make use of Android's built-in codecs. Different devices will have different codecs available, but AAC and FLAC will generally be supported by all. Other formats that may be supported include ALAC/APE/MIDI/OPUS. BASS will still read APE/ID3/ID3V2/MP4 tags and make them available via the usual tag options, but other tag types (eg. OGG) won't be available when using the OS's codecs. The MediaMetadataExtractor class could be used to get tags in that case. When an Android codec is used by a stream, its "ctype" will be set to BASS_CTYPE_STREAM_AM. The BASS_TAG_AM_MIME tag gives the MIME type of the file, and the BASS_TAG_AM_NAME tag gives the name of the decoder that's being used. It appears that some decoders set the MIME type to "audio/raw" rather than the actual file format. The file extension could be used to infer the file format in that case, or the MediaMetadataExtractor class could be used. BASS will handle the reading of AAC/ADTS data, but other file formats will be handled by Android and so will not be supported with custom file routines, ie. BASS_StreamCreateFileUser. As on other platforms, any BASS add-ons that are loaded via BASS_PluginLoad will have priority over the OS's codecs. The use of Android's codecs can be disabled via the BASS_CONFIG_AM_DISABLE config option.
For convenience, the stream/sample/music creation functions include support for assets, via an "Asset" class. For example, a stream could be created from a "music.ogg" asset like this...
stream = BASS.BASS_StreamCreateFile(new BASS.Asset(getAssets(), "music.ogg"), 0, 0, 0);
The stream/sample/music creation functions also include support for the ParcelFileDescriptor class, which can be used to access scoped storage. BASS will close the file descriptor when it is time to do so (eg. when a stream is freed), so you do not need to do that.
BASS will attempt to use the system's SSL libraries (OpenSSL or BoringSSL) to support HTTPS URLs, but that is not possible for apps that target Android 7 (API level 24) or above. Apps that target a lower Android version will still work on Android 7. A BASS_SSL add-on (based on OpenSSL) is available to add HTTPS support for apps that do target Android 7 or above. It can also be used with lower Android versions if wanted (it has priority over the system's SSL libraries). No additional code is required to enable it; simply put the BASS_SSL library alongside the BASS library.
When using ProGuard to obfuscate your Java code, the BASS classes should be left alone, like this:
-keep class com.un4seen.bass.** {*;}