| BlueZ for Android |
| ***************** |
| |
| Since Android 4.2 there exists a well standardized HAL interface that the |
| Bluetooth stack is expected to provide and which enables the easy replacement |
| of the stack of choice on Android. Android BlueZ is intended as a drop-in |
| replacement to Android provided Bluetooth stack. |
| |
| More details about BlueZ for Android architecture and components can be found |
| in android/hal-apc-api.txt file. |
| |
| =============================== |
| Building and running on Android |
| =============================== |
| |
| Build requirements |
| ================== |
| |
| - GLib - Android 4.2 or later don't provide GLib and one must provide it in |
| 'external/bluetooth/glib' folder of Android tree. Sample Android GLib port |
| is available at https://code.google.com/p/android-bluez.glib/ |
| |
| - Bionic support - BlueZ requires signalfd and timerfd APIs to be provided |
| by libc library. Currently only 'master' branch available at |
| https://android.googlesource.com/platform/bionic provides all required |
| functionality and running BlueZ on older branch requires backporting missing |
| features. Sample Bionic for Android on Intel Architecture (Android-IA) with all |
| required features backported is available at |
| https://code.google.com/p/android-bluez.bionic/ |
| |
| Runtime requirements |
| ==================== |
| |
| BlueZ HAL library requires 'bluetoothd' service to be available on Android |
| system. This can be done by defining service in init.rc file of targeted board: |
| |
| service bluetoothd /system/bin/logwrapper /system/bin/bluetoothd |
| class main |
| group bluetooth net_admin |
| disabled |
| oneshot |
| |
| It is required that bluetooth user could start and stop bluetoothd service by |
| setting 'ctl.start' or 'ctl.stop' property. This can be achieved by |
| whitelisting bluetooth user and bluetoothd service in init source code. |
| |
| Required Android init system modifications can be found at |
| https://code.google.com/p/android-bluez.system-core/ |
| |
| Downloading and building |
| ======================== |
| |
| Building for Android requires full Android AOSP source tree. Sample Android-IA |
| tree with all required components present is available at |
| http://code.google.com/p/android-bluez/ |
| |
| Downloading: |
| repo init -u https://code.google.com/p/android-bluez.manifest/ -m topics/bluez |
| repo sync |
| |
| Build for Intel ultrabook: |
| 'source build/envsetup.sh' |
| 'lunch core_mesa-eng' |
| 'make allimages -j8' |
| |
| After full build is done it is possible to rebuild only BlueZ: |
| 'cd external/bluetooth/bluez/android/' |
| 'mm' (or 'mm -B' to force rebuilding of all files) |
| 'adb sync' to update target device. |
| |
| ============================= |
| Building and running on Linux |
| ============================= |
| |
| It is possible to build and test BlueZ for Android daemon on Linux (eg. PC). |
| Simply follow instructions available at README file in BlueZ top directory. |
| Android daemon binary is located at android/bluetoothd. See next section on |
| how to test Android daemon on Linux. |
| |
| ============ |
| Testing tool |
| ============ |
| |
| BT HAL test tools located in android/haltest is provided for HAL level testing |
| of both Android daemon and HAL library. Start it with '-n' parameter and type |
| 'bluetooth init' in prompt to initialize HAL library. Running without parameter |
| will make haltest try to initialize all services after start. On Android |
| required bluetoothd service will be started automatically. On Linux it is |
| required to start android/bluetoothd manually before init command timeout or |
| use provided android/system-emulator, which takes care of launching daemon |
| automatically on HAL library initialization. To deinitialize HAL library and |
| stop daemon type 'bluetooth cleanup'. Type 'help' for more information. Tab |
| completion is also supported. |