डीबग करने की पाबंदी वाले कंट्रोलर के लिए इंटिग्रेशन गाइड

AAOS डीबगिंग पाबंदी कंट्रोलर को इंटिग्रेट करने के लिए, इस पेज पर दिए गए निर्देशों का पालन करें (डीआरसी).

पहला डायग्राम. डीआरसी ऐप्लिकेशन का उदाहरण.

भवन निर्माण

डीआरसी की वास्तुकला को इमेज 2 में दिखाया गया है. लाल रंग में आउटलाइन किए गए कॉम्पोनेंट (टोकन जारी करने वाले और डीआरसी) में रेफ़रंस फ़ाइलों को लागू करने के तरीके दिए गए हैं, जिन्हें अपनी पसंद के मुताबिक बनाया जा सकता है.

दूसरा डायग्राम. डीआरसी का आर्किटेक्चर.

डीआरसी क्या है?

कार की मुख्य यूनिट में डीआरसी ऐप्लिकेशन शामिल है (इसका रेफ़रंस, यहां देखें packages/apps/Car/DebuggingRestrictionController). पहचान ऐप्लिकेशन में ये शामिल हैं टोकन जारी करने वाले से ऐक्सेस टोकन पाने, टोकन की पुष्टि करने, और इसके बाद, टोकन में बताए गए तरीके से डीबग करने की पाबंदी में बदलाव करना होगा. लॉजिक में ये शामिल हैं इनमें उपयोगकर्ता अनुभव से जुड़े बुनियादी एलिमेंट मौजूद होते हैं, जिन्हें कार की तरफ़ लगाया जा सकता है.

टोकन जारी करने वाला क्या है?

यह एक ऐसी वेब सेवा है जो क्रिप्टोग्राफ़िक तरीके से साइन किए गए ऐक्सेस टोकन जारी करती है (रेफ़रंस देखें packages/apps/Car/DebuggingRestrictionController/server में लागू किया गया है). रेफ़रंस वेब सेवा, डिप्लॉय किया जा सकने वाला Firebase क्लाउड फ़ंक्शन है. ज़्यादा जानने के लिए, यहां देखें Cloud Functions: Firebase).

ज़रूरी शर्तें

रेफ़रंस फ़ाइलों को लागू करने से पहले, इन टास्क को पूरा करें.

साइनिंग ऐक्सेस टोकन के लिए सर्टिफ़िकेट तैयार करना

टोकन जारी करने वाली कंपनी, ऐक्सेस टोकन के तौर पर JSON वेब सिग्नेचर (JWS) जनरेट करती है. सबसे बेहतर साथ काम करता है, तो रेफ़रंस जारी करने वाला, सिर्फ़ RS256 एल्गोरिदम (SHA256 के साथ आरएसए सिग्नेचर) के साथ काम करता है. डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाने के लिए, सिर्फ़ एक सर्टिफ़िकेट के बजाय, कई सर्टिफ़िकेट की चेन का इस्तेमाल करें ऐक्सेस टोकन. किसी सामान्य सर्टिफ़िकेट चेन में एक रूट CA सर्टिफ़िकेट होना चाहिए, इंटरमीडिएट CA सर्टिफ़िकेट और असली इकाई का सर्टिफ़िकेट.

JWS टोकन पर हस्ताक्षर करने वाला एंड-इकाई सर्टिफ़िकेट, स्टैंडर्ड TLS से अलग नहीं होता प्रमाणपत्र. आप DigiCert जैसे सार्वजनिक CA से सर्टिफ़िकेट खरीद सकते हैं या खुद हस्ताक्षर किए हुए रूट CA सर्टिफ़िकेट या हार्डवेयर सुरक्षा मॉड्यूल का इस्तेमाल करके, अपने सर्टिफ़िकेट की चेन को स्टोर करें. असली इकाई का सर्टिफ़िकेट, X509v3 सर्टिफ़िकेट होना चाहिए, जिसमें विषय के अन्य नाम वाला सर्टिफ़िकेट हो (SAN) एक्सटेंशन. SAN एक्सटेंशन में, टोकन का आइडेंटिफ़ायर (उदाहरण के लिए, होस्टनेम) होता है जारी करने वाला. आखिर में, आरएसए सर्टिफ़िकेट को EC सर्टिफ़िकेट की जगह प्राथमिकता दी जानी चाहिए, क्योंकि टोकन जारी करने वाला, सिर्फ़ RS256 के साथ काम करता है.

Google, खुद हस्ताक्षर किए हुए सर्टिफ़िकेट जनरेट करने के लिए एक शेल स्क्रिप्ट देता है packages/apps/Car/DebuggingRestrictionController/server/genkey.sh.

Firebase सेट अप करना

रेफ़रंस टोकन जारी करने वाली कंपनी, इसका इस्तेमाल करती है Firebase से पुष्टि करने की सुविधा और Firebase Cloud Function.

अपना Firebase खाता सेट अप करने के लिए:

  1. Firebase प्रोजेक्ट बनाने के लिए, यहां देखें Firebase को इससे जोड़ें आपका Android प्रोजेक्ट.
  2. Firebase की पुष्टि करने वाले कुछ टूल चालू करने के लिए, यहां देखें मैं कहाँ मदद करूँ क्या Firebase से पुष्टि करने की प्रोसेस शुरू करनी है?.
  3. Firebase Cloud में कोई खाली फ़ंक्शन जोड़ने के लिए, यहां देखें डाउनलोड करें शुरू हो गया.
  4. अगर पहले से ऐसा नहीं किया गया है, तो उसे इकट्ठा करने और बनाने के लिए Node.js, एनपीएम, और Firebase टूल इंस्टॉल करें टोकन जारी करने वाले को डिप्लॉय कर सकता है.

डीआरसी ऐप्लिकेशन को इंटिग्रेट करें

यह डीआरसी ऐप्लिकेशन यहां मौजूद है packages/apps/Car/DebuggingRestrictionController. ऐप्लिकेशन को बनाया जा सकता है बंडल, एओएसपी में सूंग के साथ या Gradle के साथ अनबंडल किया गया.

बंडल किया गया बिल्ड

बंडल किया गया ऐप्लिकेशन बनाने के लिए:

  1. applicationId, projectId, और apiKey कॉपी करें google-services.json से लेकर packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java. ऐसा करने से DRC ऐप्लिकेशन को Firebase से सही तरीके से कनेक्ट करने में मदद मिलती है.
  2. इन स्थिरांकों को इसमें अपडेट करें packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java:
    • TOKEN_USES_SELF_SIGNED_CA बताता है कि खुद हस्ताक्षर किए हुए रूट CA सर्टिफ़िकेट इस्तेमाल किया गया. अगर यह नीति चालू की जाती है, तो डीआरसी ऐप्लिकेशन सिर्फ़ PEM कोड में बदले गए रूट CA सर्टिफ़िकेट पर भरोसा करता है, जो इसमें बताया गया है ROOT_CA_CERT.
    • Firebase क्लाउड फ़ंक्शन का नाम TOKEN_ISSUER_API_NAME है और यह ऐसा होना चाहिए उस क्लाउड फ़ंक्शन से मैच करें जिसे आपने Firebase कंसोल में पहले बनाया था.
    • TOKEN_ISSUER_HOSTNAME असली इकाई का सर्टिफ़िकेट, जो ऐक्सेस टोकन पर साइन करेगा.
    • 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 का इस्तेमाल करते हैं.

अनबंडल किए गए बिल्ड को बनाने के लिए:

  1. पुष्टि करें कि आपने Android SDK इंस्टॉल किया है.
  2. ऐप्लिकेशन की रूट डायरेक्ट्री में, local.properties नाम की टेक्स्ट फ़ाइल बनाएं.
  3. Android SDK टूल की जगह की जानकारी सेट करें:
     sdk.dir=path/to/android/sdk
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  4. Firebase सेट अप करने के लिए, google-services.json को यहां कॉपी करें packages/apps/Car/DebuggingRestrictionController/app. Gradle, फ़ाइल को पार्स करता है और बाक़ी चीज़ें अपने-आप सेट अप हो जाती हैं.
  5. एनवायरमेंट वैरिएबल तय करें. बंडल किए गए बिल्ड की तरह ही, आपको यह जानकारी देनी होगी:
    • $TOKEN_USES_SELF_SIGNED_CA: सही या गलत;
    • $ROOT_CA_CERT: PEM-एन्कोडेड रूट CA सर्टिफ़िकेट का पाथ;
    • $TOKEN_ISSUER_API_NAME: Firebase Cloud फ़ंक्शन का नाम;
    • $TOKEN_ISSUER_HOST_NAME: सर्टिफ़िकेट में SAN;
    • $DRC_TEST_EMAIL और $DRC_TEST_EMAIL: जांच के लिए क्रेडेंशियल खाता, केवल डीबग बिल्ड.
  6. Gradle के साथ ऐप्लिकेशन बनाने के लिए, इस तरह का निर्देश चलाएं:
    $ ./gradlew build
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

टोकन जारी करने वाले बैंक को इंटिग्रेट करें

रेफ़रंस टोकन जारी करने वाला, Node.js में लागू किया गया Firebase Cloud Function है. इस फ़ंक्शन को सिर्फ़ वही उपयोगकर्ता कॉल कर सकता है जिसके पास पुष्टि की गई है. ऐप्लिकेशन को डिप्लॉय करने से पहले, आपको इसे सेट करना होगा JWS टोकन पर साइन करने के लिए इस्तेमाल होने वाले निजी पासकोड और सर्टिफ़िकेट की जानकारी भी सेट अप कर सकते हैं.

  1. 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"
    }
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

    सर्टिफ़िकेट, असली इकाई के सर्टिफ़िकेट पहले और रूट सीए सर्टिफ़िकेट के हिसाब से ऑर्डर किए जाते हैं आखिर में. खत्म होने की अवधि कस्टमाइज़ की जा सकती है और अगर जारी किए गए टोकन को डीआरसी ऐप्लिकेशन में पाने और इस्तेमाल करने में कुछ समय लगता है. टोकन निरस्त करना समर्थित नहीं है.

  2. Firebase में कॉन्फ़िगरेशन अपलोड करें:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. Firebase क्लाउड फ़ंक्शन को डिप्लॉय करें:
  5. $ firebase deploy --only functions
    
  6. टोकन जारी करने वाले बैंक या कंपनी को मैनेज और मॉनिटर करने के लिए, यहां जाएं मैनेज करें फ़ंक्शन डिप्लॉयमेंट और रनटाइम के विकल्पों की जानकारी.

डिफ़ॉल्ट पाबंदियां सेट करना

पहली बार बूट करने से पहले, डिफ़ॉल्ट पाबंदियां लागू की जा सकती हैं. स्टैटिक रिसॉर्स की मदद से ऐसा करें ओवरले कर सकता है. पाबंदियां क्रम के हिसाब से भी हो सकती हैं अलग-अलग तरह के उपयोगकर्ताओं पर लागू होते हैं. अलग-अलग तरह के उपयोगकर्ताओं के बारे में जानने के लिए, देखें कई उपयोगकर्ताओं के लिए सहायता.

हेडलेस सिस्टम यूज़र के लिए, डिफ़ॉल्ट पाबंदी को इसकी मदद से कॉन्फ़िगर किया जा सकता है config_defaultFirstUserRestrictions स्ट्रिंग-अरे इसमें frameworks/base/core/res/res/values/config.xml. यह पाबंदी सेट करना यह पाबंदी हटाए जाने तक, 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>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है