Android는 기본 블루투스와 저전력 블루투스 (BLE)를 모두 지원하는 기본 블루투스 스택을 제공합니다. Android 기기는 블루투스를 사용하여 주변 블루투스 기기와 데이터를 주고받기 위한 개인 영역 네트워크를 만들 수 있습니다.
Android 4.3 이상에서 Android 블루투스 스택은 BLE를 구현할 수 있는 기능을 제공합니다. BLE API를 충분히 사용하려면 Android 블루투스 HCI 요구사항을 따르세요. 적합한 칩셋이 있는 Android 기기는 기본 블루투스 또는 기본 블루투스와 BLE를 모두 구현할 수 있습니다. BLE는 이전 블루투스 칩셋과 하위 호환되지 않습니다.
Android 8.0에서 블루투스 스택은 블루투스 5의 요건을 모두 충족합니다. 제공되는 블루투스 5 기능을 사용하려면 기기에 블루투스 5용 칩셋이 있어야 합니다.
Android 아키텍처
블루투스 앱은 바인더를 통해 블루투스 프로세스와 통신합니다. 블루투스 프로세스는 Java Native Interface (JNI)를 사용하여 블루투스 스택과 통신하며 개발자는 블루투스 프로세스를 통해 다양한 블루투스 프로필에 액세스할 수 있습니다. 다음 다이어그램은 블루투스 스택의 일반적인 구조를 보여줍니다.
그림 1. Android 블루투스 아키텍처
- 앱 프레임워크
- 앱 프레임워크 수준에는
android.bluetooth
API를 사용하여 블루투스 하드웨어와 상호작용하는 앱 코드가 있습니다. 내부적으로 이 코드는 바인더 IPC 메커니즘을 통해 블루투스 프로세스를 호출합니다. - 블루투스 앱
packages/modules/Bluetooth/android/app
에 있는 블루투스 앱은 Android 앱으로 패키징되며 Android 프레임워크 레이어에서 블루투스 프로필을 구현합니다. 이 앱은 JNI를 통해 블루투스 스택을 호출합니다.- JNI
android.bluetooth
와 연결된 JNI 코드는packages/modules/Bluetooth/android/app/jni
에 있습니다. JNI 코드는 기기가 검색될 때와 같이 특정 블루투스 작업이 발생할 때 블루투스 스택을 호출합니다.- 블루투스 스택
- 기본 블루투스 스택은 AOSP에 제공되며
packages/modules/Bluetooth/system
에 있습니다. 스택은 일반 블루투스 HAL을 구현하고 확장 프로그램 및 구성 변경사항을 사용하여 맞춤설정합니다. - 공급업체 구현
- 공급업체 기기는 HAL 인터페이스 정의 언어 (HIDL)를 사용하여 블루투스 스택과 상호작용합니다.
HIDL
HIDL은 블루투스 스택과 공급업체 구현 사이의 인터페이스를 정의합니다. 블루투스 HIDL 파일을 생성하려면 블루투스 인터페이스 파일을 HIDL 생성 도구에 전달하세요. 인터페이스 파일은 hardware/interfaces/bluetooth
에 있습니다.
블루투스 스택 개발
Android 블루투스 스택은 블루투스 자격 요건을 충족하는 스택입니다. 인증 목록은 블루투스 SIG 웹사이트 (로그인 필요)의 QDID 169365에 있습니다.
핵심 블루투스 스택은 packages/modules/Bluetooth
에 있습니다.
개발은 AOSP에서 이루어지며 참여를 환영합니다.