AAOS डिबगिंग रिस्ट्रिक्शन कंट्रोलर (डीआरसी) को इंटिग्रेट करने के लिए, इस पेज पर दिए गए निर्देशों का पालन करें.
पहली इमेज. डीआरसी ऐप्लिकेशन का उदाहरण.
भवन निर्माण
डीआरसी के आर्किटेक्चर की जानकारी, दूसरे चित्र में दी गई है. लाल रंग से हाइलाइट किए गए कॉम्पोनेंट (टोकन जारी करने वाली संस्था और डीआरसी) के साथ रेफ़रंस लागू किए गए हैं. इन्हें पसंद के मुताबिक बनाया जा सकता है.
दूसरी इमेज. डीआरसी आर्किटेक्चर.
डीआरसी क्या है?
कार की हेड यूनिट में डीआरसी ऐप्लिकेशन शामिल होता है (packages/apps/Car/DebuggingRestrictionController
में रेफ़रंस लागू करने का तरीका देखें). रेफ़रंस ऐप्लिकेशन में, टोकन जारी करने वाले से ऐक्सेस टोकन पाने, टोकन की पुष्टि करने, और फिर टोकन में बताई गई गड़बड़ी ठीक करने से जुड़ी पाबंदियों में बदलाव करने का लॉजिक शामिल होता है. इस लॉजिक में, कार के साइड में मौजूद यूज़र एक्सपीरियंस (UX) के बुनियादी एलिमेंट शामिल हैं.
टोकन जारी करने वाला कौन है?
यह एक वेब सेवा है, जो क्रिप्टोग्राफ़िक तरीके से हस्ताक्षर किए गए ऐक्सेस टोकन जारी करती है. packages/apps/Car/DebuggingRestrictionController/server
में रेफ़रंस लागू करने का तरीका देखें. रेफ़रंस वेब सेवा, डिप्लॉय किया जा सकने वाला Firebase Cloud फ़ंक्शन है. ज़्यादा जानने के लिए, Firebase के लिए Cloud Functions देखें.
ज़रूरी शर्तें
रेफ़रंस लागू करने से पहले, ये काम ज़रूर पूरे करें.
ऐक्सेस टोकन पर हस्ताक्षर करने के लिए सर्टिफ़िकेट तैयार करना
टोकन जारी करने वाला, ऐक्सेस टोकन के तौर पर JSON वेब सिग्नेचर (JWS) जनरेट करता है. बेहतर तरीके से काम करने के लिए, रेफ़रंस जारी करने वाली कंपनी सिर्फ़ RS256 एल्गोरिदम (SHA256 के साथ आरएसए हस्ताक्षर) के साथ काम करती है. कुंजी को रोटेट करने की सुविधा के लिए, ऐक्सेस टोकन पर हस्ताक्षर करने के लिए, एक सर्टिफ़िकेट के बजाय सर्टिफ़िकेट चेन का इस्तेमाल करें. आम तौर पर, सर्टिफ़िकेट चेन में रूट सीए सर्टिफ़िकेट, इंटरमीडिएट सीए सर्टिफ़िकेट, और डिजिटल तौर पर साइन किया गया सर्टिफ़िकेट शामिल होता है.
JWS टोकन पर हस्ताक्षर करने वाला, डिजिटल तौर पर साइन किया गया सर्टिफ़िकेट, स्टैंडर्ड TLS सर्टिफ़िकेट से अलग नहीं होता. DigiCert जैसे सार्वजनिक सीए से सर्टिफ़िकेट खरीदा जा सकता है या खुद से हस्ताक्षर किए गए रूट सीए सर्टिफ़िकेट या हार्डवेयर सुरक्षा मॉड्यूल का इस्तेमाल करके, अपनी सर्टिफ़िकेट चेन को मैनेज किया जा सकता है. डिजिटल तौर पर साइन किया गया सर्टिफ़िकेट, X509v3 सर्टिफ़िकेट होना चाहिए. साथ ही, इसमें Subject Alternative Name (SAN) एक्सटेंशन होना चाहिए. एसएएन एक्सटेंशन में, टोकन जारी करने वाले का आइडेंटिफ़ायर (उदाहरण के लिए, होस्टनेम) होता है. आखिर में, ईसी सर्टिफ़िकेट के बजाय आरएसए सर्टिफ़िकेट का इस्तेमाल करना चाहिए, क्योंकि टोकन जारी करने वाला सिर्फ़ RS256 के साथ काम करता है.
Google, packages/apps/Car/DebuggingRestrictionController/server/genkey.sh
में खुद हस्ताक्षर किए गए सर्टिफ़िकेट जनरेट करने के लिए एक शेल स्क्रिप्ट उपलब्ध कराता है.
Firebase सेट अप करना
रेफ़रंस टोकन जारी करने वाला, Firebase Authentication और Firebase Cloud Function का इस्तेमाल करता है.
अपना Firebase खाता सेट अप करने के लिए:
- Firebase प्रोजेक्ट बनाने के लिए, अपने Android प्रोजेक्ट में Firebase जोड़ना लेख पढ़ें.
- Firebase के कुछ पुष्टि करने वाले टूल चालू करने के लिए, मुझे Firebase Authentication का इस्तेमाल कहां से शुरू करना चाहिए? लेख पढ़ें.
- खाली Firebase Cloud फ़ंक्शन जोड़ने के लिए, शुरू करें लेख देखें.
- अगर आपने पहले से ऐसा नहीं किया है, तो
Node.js
, NPM, और Firebase टूल इंस्टॉल करें, ताकि टोकन जारी करने वाले टूल को संकलित और डिप्लॉय किया जा सके.
डीआरसी ऐप्लिकेशन को इंटिग्रेट करना
रेफ़रंस डीआरसी ऐप्लिकेशन packages/apps/Car/DebuggingRestrictionController
में मौजूद है. ऐप्लिकेशन को Soong की मदद से AOSP में बंडल किया जा सकता है या Gradle की मदद से अनबंडल किया जा सकता है.
बंडल किया गया बिल्ड
बंडल किया गया ऐप्लिकेशन बनाने के लिए:
google-services.json
सेapplicationId
,projectId
, औरapiKey
को कॉपी करके,packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
में चिपकाएं. ऐसा करने से, डीआरसी ऐप्लिकेशन को Firebase से सही तरीके से कनेक्ट करने में मदद मिलती है.packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
में इन कॉन्स्टेंट को अपडेट करें:TOKEN_USES_SELF_SIGNED_CA
से पता चलता है कि खुद हस्ताक्षर किए गए रूट सीए सर्टिफ़िकेट का इस्तेमाल किया गया है या नहीं. अगर यह सेटिंग चालू है, तो डीआरसी ऐप्लिकेशन सिर्फ़ROOT_CA_CERT
में बताए गए, PEM-कोड में बदले गए रूट सीए सर्टिफ़िकेट पर भरोसा करता है.TOKEN_ISSUER_API_NAME
, Firebase Cloud फ़ंक्शन का नाम है. यह नाम, Firebase कंसोल में पहले से बनाए गए Cloud फ़ंक्शन से मैच करना चाहिए.TOKEN_ISSUER_HOSTNAME
, एंड-इकाई सर्टिफ़िकेट में मौजूद, Subject Alternative Name से मेल खाना चाहिए.DRC_TEST_EMAIL
औरDRC_TEST_PASSWORD
, जांच के लिए बनाए गए ऐसे खाते के क्रेडेंशियल हैं जो ज़रूरी नहीं है. अगर आपने ईमेल/पासवर्ड से साइन इन करने की सुविधा चालू की है, तो Firebase में पहले से ही इन क्रेडेंशियल का इस्तेमाल किया जा सकता है. इनका इस्तेमाल सिर्फ़ इंस्ट्रूमेंट किए गए टेस्ट के लिए किया जाता है.
अब ऐप्लिकेशन को आपके Firebase खाते और सर्टिफ़िकेट का इस्तेमाल करने के लिए कॉन्फ़िगर कर दिया गया है.
Android 9 और इसके बाद के वर्शन में, आपको खास अनुमति की अनुमति वाली सूची सेट अप करनी होगी.
अनुमति वाली सूची में कम से कम android.permission.MANAGE_USERS
शामिल होने चाहिए. उदाहरण के लिए:
<permissions> <privapp-permissions package="com.android.car.debuggingrestrictioncontroller"> <permission name="android.permission.INTERNET"/> <permission name="android.permission.MANAGE_USERS"/> </privapp-permissions> </permissions>
अनबंड किया गया बिल्ड
अनबंड किए गए डीआरसी बिल्ड, ऐप्लिकेशन को कंपाइल करने के लिए Gradle का इस्तेमाल करते हैं.
अनबंड किया गया बिल्ड बनाने के लिए:
- पुष्टि करें कि आपने Android SDK टूल इंस्टॉल किया है.
- ऐप्लिकेशन की रूट डायरेक्ट्री में,
local.properties
नाम की टेक्स्ट फ़ाइल बनाएं. - Android SDK टूल की जगह सेट करें:
sdk.dir=path/to/android/sdk
- Firebase सेट अप करने के लिए,
google-services.json
कोpackages/apps/Car/DebuggingRestrictionController/app
पर कॉपी करें. Gradle, फ़ाइल को पार्स करता है और बाकी चीज़ों को अपने-आप सेट अप करता है. - एनवायरमेंट वैरिएबल तय करें. बंडल किए गए बिल्ड की तरह ही, आपको यह जानकारी देनी होगी:
$TOKEN_USES_SELF_SIGNED_CA
: सही या गलत;$ROOT_CA_CERT
: PEM कोड में एन्कोड किए गए रूट सीए सर्टिफ़िकेट का पाथ;$TOKEN_ISSUER_API_NAME
: Firebase Cloud फ़ंक्शन का नाम;$TOKEN_ISSUER_HOST_NAME
: सर्टिफ़िकेट में एसएएन;$DRC_TEST_EMAIL
और$DRC_TEST_EMAI
L: टेस्ट खाते के क्रेडेंशियल, सिर्फ़ डीबग बिल्ड के लिए.
- Gradle की मदद से ऐप्लिकेशन बनाने के लिए, यह कमांड चलाएं:
$ ./gradlew build
टोकन जारी करने वाली कंपनी को इंटिग्रेट करना
रेफ़रंस टोकन जारी करने वाला, Node.js
में लागू किया गया Firebase Cloud फ़ंक्शन है.
इस फ़ंक्शन को सिर्फ़ पुष्टि किए गए उपयोगकर्ता ही कॉल कर सकते हैं. ऐप्लिकेशन को डिप्लॉय करने से पहले, आपको JWS टोकन पर हस्ताक्षर करने के लिए इस्तेमाल की जाने वाली निजी कुंजी और सर्टिफ़िकेट सेट अप करने होंगे.
- JSON फ़ाइल में यह कॉन्टेंट डालें:
{ "key": "---BEGIN PRIVATE KEY---\nRSA_PRIVATE_KEY\n-----END PRIVATE KEY-----\n", "certificates.0": "-----BEGIN CERTIFICATE-----\nTOKEN_SIGNING_CERT\n-----END CERTIFICATE-----\n", "certificates.1": "-----BEGIN CERTIFICATE-----\nINTERMEDIATE_CA_CERT\n-----END CERTIFICATE-----\n", "certificates.2": "-----BEGIN CERTIFICATE-----\nROOT_CA_CERT\n-----END CERTIFICATE-----\n", "expiration": "30m", "issuer": "Debugging Access Token Issuer", "audience": "IHU" }
सर्टिफ़िकेट का क्रम इस तरह से तय किया जाता है कि सबसे पहले डिजिटल तौर पर साइन किया गया सर्टिफ़िकेट और आखिर में रूट सीए सर्टिफ़िकेट हो. खत्म होने की अवधि को पसंद के मुताबिक सेट किया जा सकता है. अगर जारी किए गए टोकन को डीआरसी ऐप्लिकेशन से पाने और इस्तेमाल करने में कुछ समय लगता है, तो इसे लंबी अवधि के लिए सेट किया जा सकता है. टोकन को रद्द नहीं किया जा सकता.
- कॉन्फ़िगरेशन को Firebase पर अपलोड करें:
- Firebase Cloud फ़ंक्शन को डिप्लॉय करें:
- टोकन जारी करने वाले को मैनेज और मॉनिटर करने के लिए, फ़ंक्शन डिप्लॉयमेंट और रनटाइम के विकल्प मैनेज करें लेख पढ़ें.
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
डिफ़ॉल्ट पाबंदियां सेट करना
डिफ़ॉल्ट पाबंदियां, पहले बूट से पहले लागू की जा सकती हैं. Android फ़्रेमवर्क में डिफ़ॉल्ट वैल्यू को बदलने के लिए, स्टैटिक रिसॉर्स ओवरले का इस्तेमाल करें. पाबंदियां, अलग-अलग तरह के उपयोगकर्ताओं पर लागू की जा सकती हैं. अलग-अलग तरह के उपयोगकर्ताओं के बारे में जानने के लिए, एक से ज़्यादा उपयोगकर्ताओं के लिए सहायता लेख पढ़ें.
हेडलेस सिस्टम यूज़र के लिए डिफ़ॉल्ट पाबंदी को frameworks/base/core/res/res/values/config.xml
में config_defaultFirstUserRestrictions
स्ट्रिंग-कलेक्शन की मदद से कॉन्फ़िगर किया जा सकता है. यह पाबंदी सेट करने पर, Android डीबग ब्रिज (ADB) अपने-आप बंद हो जाता है. यह पाबंदी तब तक लागू रहती है, जब तक इसे हटाया नहीं जाता. उदाहरण के लिए:
<string-array translatable="false" name="config_defaultFirstUserRestrictions"> <item>no_debugging_features</item> </string-array>
सामान्य उपयोगकर्ताओं (उदाहरण के लिए, ड्राइवर और यात्री) और मेहमानों के लिए, डिफ़ॉल्ट पाबंदियां frameworks/base/core/res/res/xml/config_user_types.xml
में कॉन्फ़िगर की जा सकती हैं. हर तरह के उपयोगकर्ता के लिए डिफ़ॉल्ट पाबंदियां सेट करने के लिए, इन स्ट्रिंग को ओवरले किया जा सकता है. उदाहरण के लिए:
<user-types> <full-type name="android.os.usertype.full.SECONDARY" > <default-restrictions no_debugging_features="true"/> </full-type> <full-type name="android.os.usertype.full.GUEST" > <default-restrictions no_debugging_features="true"/> </full-type> </user-types>