एंड्रॉइड एक डिफ़ॉल्ट ब्लूटूथ स्टैक प्रदान करता है जो क्लासिक ब्लूटूथ और ब्लूटूथ लो एनर्जी दोनों का समर्थन करता है। ब्लूटूथ का उपयोग करके, एंड्रॉइड डिवाइस आस-पास के ब्लूटूथ डिवाइस के साथ डेटा भेजने और प्राप्त करने के लिए व्यक्तिगत क्षेत्र नेटवर्क बना सकते हैं।
एंड्रॉइड 4.3 और बाद में, एंड्रॉइड ब्लूटूथ स्टैक ब्लूटूथ लो एनर्जी (बीएलई) को लागू करने की क्षमता प्रदान करता है। बीएलई एपीआई का पूरी तरह से लाभ उठाने के लिए, एंड्रॉइड ब्लूटूथ एचसीआई आवश्यकताओं का पालन करें। योग्य चिपसेट वाले एंड्रॉइड डिवाइस या तो क्लासिक ब्लूटूथ या क्लासिक ब्लूटूथ और बीएलई दोनों को लागू कर सकते हैं। BLE पुराने ब्लूटूथ चिपसेट के साथ पीछे से संगत नहीं है।
एंड्रॉइड 8.0 में, देशी ब्लूटूथ स्टैक ब्लूटूथ 5 के लिए पूरी तरह से योग्य है। उपलब्ध ब्लूटूथ 5 सुविधाओं का उपयोग करने के लिए, डिवाइस में ब्लूटूथ 5 योग्य चिपसेट होना आवश्यक है।
एंड्रॉइड आर्किटेक्चर
एक ब्लूटूथ एप्लिकेशन बाइंडर के माध्यम से ब्लूटूथ प्रक्रिया के साथ संचार करता है। ब्लूटूथ प्रक्रिया ब्लूटूथ स्टैक के साथ संचार करने के लिए जेएनआई का उपयोग करती है और डेवलपर्स को विभिन्न ब्लूटूथ प्रोफाइल तक पहुंच प्रदान करती है। यह चित्र ब्लूटूथ स्टैक की सामान्य संरचना दिखाता है:
- अनुप्रयोग ढाँचा
- एप्लिकेशन फ्रेमवर्क स्तर पर एप्लिकेशन कोड होता है, जो ब्लूटूथ हार्डवेयर के साथ इंटरैक्ट करने के लिए android.bluetooth API का उपयोग करता है। आंतरिक रूप से, यह कोड बाइंडर आईपीसी तंत्र के माध्यम से ब्लूटूथ प्रक्रिया को कॉल करता है।
- ब्लूटूथ एप्लिकेशन
-
packages/modules/Bluetooth/android/app
में स्थित ब्लूटूथ एप्लिकेशन को एंड्रॉइड ऐप के रूप में पैक किया गया है और एंड्रॉइड फ्रेमवर्क परत पर ब्लूटूथ प्रोफाइल लागू करता है। यह ऐप जेएनआई के माध्यम से मूल ब्लूटूथ स्टैक में कॉल करता है। - जेएनआई
- android.bluetooth से संबद्ध JNI कोड
packages/modules/Bluetooth/android/app/jni
में स्थित है। जब कुछ ब्लूटूथ ऑपरेशन होते हैं, जैसे डिवाइस की खोज की जाती है, तो जेएनआई कोड ब्लूटूथ स्टैक में कॉल करता है। - ब्लूटूथ स्टैक
- डिफ़ॉल्ट ब्लूटूथ स्टैक AOSP में प्रदान किया गया है और
packages/modules/Bluetooth/system
में स्थित है। स्टैक सामान्य ब्लूटूथ एचएएल को लागू करता है और इसे एक्सटेंशन और कॉन्फ़िगरेशन परिवर्तनों के साथ अनुकूलित करता है। - विक्रेता कार्यान्वयन
- विक्रेता डिवाइस हार्डवेयर इंटरफ़ेस डिज़ाइन लैंग्वेज (HIDL) का उपयोग करके ब्लूटूथ स्टैक के साथ इंटरैक्ट करते हैं।
छिपाना
HIDL ब्लूटूथ स्टैक और विक्रेता कार्यान्वयन के बीच इंटरफ़ेस को परिभाषित करता है। ब्लूटूथ एचआईडीएल फ़ाइलें उत्पन्न करने के लिए, ब्लूटूथ इंटरफ़ेस फ़ाइलों को एचआईडीएल जेनरेशन टूल में पास करें। इंटरफ़ेस फ़ाइलें hardware/interfaces/bluetooth
में स्थित हैं।
ब्लूटूथ स्टैक विकास
एंड्रॉइड ब्लूटूथ स्टैक पूरी तरह से योग्य ब्लूटूथ स्टैक है। योग्यता सूची QDID 169365 के अंतर्गत ब्लूटूथ SIG वेबसाइट पर है।
कोर ब्लूटूथ स्टैक packages/modules/Bluetooth
में रहता है। AOSP में विकास होता है, और योगदान का स्वागत है।
Android 7.x और पहले का आर्किटेक्चर
एक ब्लूटूथ सिस्टम सेवा जेएनआई के माध्यम से ब्लूटूथ स्टैक के साथ और बाइंडर आईपीसी के माध्यम से अनुप्रयोगों के साथ संचार करती है। सिस्टम सेवा डेवलपर्स को विभिन्न ब्लूटूथ प्रोफाइल तक पहुंच प्रदान करती है। यह चित्र ब्लूटूथ स्टैक की सामान्य संरचना दिखाता है:
- अनुप्रयोग ढाँचा
- एप्लिकेशन फ्रेमवर्क स्तर पर एप्लिकेशन कोड होता है, जो ब्लूटूथ हार्डवेयर के साथ इंटरैक्ट करने के लिए android.bluetooth API का उपयोग करता है। आंतरिक रूप से, यह कोड बाइंडर आईपीसी तंत्र के माध्यम से ब्लूटूथ प्रक्रिया को कॉल करता है।
- ब्लूटूथ सिस्टम सेवा
- ब्लूटूथ सिस्टम सेवा,
packages/apps/Bluetooth
में स्थित है, एक एंड्रॉइड ऐप के रूप में पैक की गई है और एंड्रॉइड फ्रेमवर्क परत पर ब्लूटूथ सेवा और प्रोफाइल को लागू करती है। यह ऐप जेएनआई के माध्यम से एचएएल परत में कॉल करता है। - जेएनआई
- android.bluetooth से संबद्ध JNI कोड
packages/apps/Bluetooth/jni
में स्थित है। जेएनआई कोड एचएएल परत में कॉल करता है और कुछ ब्लूटूथ ऑपरेशन होने पर एचएएल से कॉलबैक प्राप्त करता है, जैसे कि डिवाइस की खोज होने पर। - एचएएल
- हार्डवेयर एब्स्ट्रैक्शन परत उस मानक इंटरफ़ेस को परिभाषित करती है जिसमें android.bluetooth API और ब्लूटूथ प्रक्रिया कॉल करती है और जिसे आपको अपने ब्लूटूथ हार्डवेयर को सही ढंग से कार्य करने के लिए लागू करना होगा। ब्लूटूथ HAL के लिए हेडर फ़ाइल
hardware/libhardware/include/hardware/bluetooth.h
है। इसके अतिरिक्त, सभीhardware/libhardware/include/hardware/bt_*.h
फ़ाइलों की समीक्षा करें। - ब्लूटूथ स्टैक
- डिफ़ॉल्ट ब्लूटूथ स्टैक आपके लिए प्रदान किया गया है और
system/bt
में स्थित है। स्टैक सामान्य ब्लूटूथ एचएएल को लागू करता है और इसे एक्सटेंशन और कॉन्फ़िगरेशन परिवर्तनों के साथ अनुकूलित करता है। - विक्रेता एक्सटेंशन
- ट्रेसिंग के लिए कस्टम एक्सटेंशन और HCI परत जोड़ने के लिए, आप एक libbt-विक्रेता मॉड्यूल बना सकते हैं और इन घटकों को निर्दिष्ट कर सकते हैं।
एचएएल का कार्यान्वयन
ब्लूटूथ HAL /hardware/libhardware/include/hardware/bluetooth.h
में स्थित है। bluetooth.h
फ़ाइल में ब्लूटूथ स्टैक के लिए मूल इंटरफ़ेस शामिल है, और आपको इसके कार्यों को लागू करना होगा।
प्रोफ़ाइल-विशिष्ट फ़ाइलें उसी निर्देशिका में स्थित हैं। विवरण के लिए, एचएएल फ़ाइल संदर्भ देखें।