ডিবাগিং রেস্ট্রিকশন কন্ট্রোলার ইন্টিগ্রেশন গাইড

AAOS ডিবাগিং সীমাবদ্ধতা কন্ট্রোলার (DRC) সংহত করতে এই পৃষ্ঠার নির্দেশাবলী ব্যবহার করুন।

চিত্র 1. DRC অ্যাপের উদাহরণ।

স্থাপত্য

DRC আর্কিটেকচারটি চিত্র 2-এ চিত্রিত করা হয়েছে। লাল রঙে বর্ণিত উপাদান (টোকেন প্রদানকারী এবং DRC) এর সাথে রেফারেন্স বাস্তবায়ন রয়েছে যা আপনি কাস্টমাইজ করতে পারেন।

চিত্র 2. DRC আর্কিটেকচার।

DRC কি?

গাড়ির প্রধান ইউনিটে DRC অ্যাপ রয়েছে ( packages/apps/Car/DebuggingRestrictionController রেফারেন্স বাস্তবায়ন দেখুন)। রেফারেন্স অ্যাপটিতে টোকেন ইস্যুকারীর কাছ থেকে একটি অ্যাক্সেস টোকেন গ্রহণ, টোকেন যাচাইকরণ এবং তারপর টোকেনে উল্লেখিত ডিবাগিং সীমাবদ্ধতা পরিবর্তনগুলি প্রয়োগ করার যুক্তি অন্তর্ভুক্ত রয়েছে। যুক্তিতে গাড়ির পাশের মৌলিক UX উপাদানগুলি অন্তর্ভুক্ত রয়েছে।

টোকেন প্রদানকারী কি?

এটি একটি ওয়েব পরিষেবা যা ক্রিপ্টোগ্রাফিকভাবে স্বাক্ষরিত অ্যাক্সেস টোকেন ইস্যু করে ( packages/apps/Car/DebuggingRestrictionController/server রেফারেন্স বাস্তবায়ন দেখুন)। রেফারেন্স ওয়েব সার্ভিস হল একটি স্থাপনযোগ্য Firebase ক্লাউড ফাংশন (আরো জানতে, Firebase এর জন্য ক্লাউড ফাংশন দেখুন)।

পূর্বশর্ত

আপনি একটি রেফারেন্স বাস্তবায়ন স্থাপন করার আগে, নিম্নলিখিত কাজগুলি সম্পূর্ণ করতে ভুলবেন না।

অ্যাক্সেস টোকেন স্বাক্ষর করার জন্য শংসাপত্র প্রস্তুত করুন

টোকেন প্রদানকারী অ্যাক্সেস টোকেন হিসাবে JSON ওয়েব স্বাক্ষর (JWS) তৈরি করে। সর্বোত্তম সামঞ্জস্যের জন্য, রেফারেন্স প্রদানকারী শুধুমাত্র RS256 অ্যালগরিদম সমর্থন করে (SHA256 এর সাথে RSA স্বাক্ষর)। কী ঘূর্ণন সহজতর করার জন্য, অ্যাক্সেস টোকেনগুলিতে স্বাক্ষর করতে একটি একক শংসাপত্রের পরিবর্তে একটি শংসাপত্র চেইন ব্যবহার করুন৷ একটি সাধারণ শংসাপত্র শৃঙ্খলে একটি রুট CA শংসাপত্র, একটি মধ্যবর্তী CA শংসাপত্র এবং একটি শেষ-সত্তা শংসাপত্র থাকা উচিত।

JWS টোকেনগুলিতে স্বাক্ষরকারী শেষ-সত্তা শংসাপত্রটি একটি আদর্শ TLS শংসাপত্রের চেয়ে আলাদা নয়। আপনি হয় DigiCert এর মতো পাবলিক CA থেকে একটি শংসাপত্র ক্রয় করতে পারেন বা স্ব-স্বাক্ষরিত রুট CA শংসাপত্র বা হার্ডওয়্যার নিরাপত্তা মডিউল ব্যবহার করে আপনার নিজস্ব শংসাপত্র চেইন বজায় রাখতে পারেন৷ শেষ-সত্তা শংসাপত্রটি একটি বিষয় বিকল্প নাম (SAN) এক্সটেনশন সহ একটি X509v3 শংসাপত্র হওয়া উচিত। SAN এক্সটেনশনে টোকেন প্রদানকারীর একটি শনাক্তকারী (উদাহরণস্বরূপ, হোস্টনাম) থাকে। সবশেষে, EC সার্টিফিকেটের চেয়ে RSA শংসাপত্রগুলিকে অগ্রাধিকার দেওয়া উচিত কারণ টোকেন প্রদানকারী শুধুমাত্র RS256 সমর্থন করে৷

Google packages/apps/Car/DebuggingRestrictionController/server/genkey.sh এ স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করার জন্য একটি শেল স্ক্রিপ্ট প্রদান করে।

Firebase সেট আপ করুন

রেফারেন্স টোকেন প্রদানকারী Firebase প্রমাণীকরণ এবং Firebase ক্লাউড ফাংশন ব্যবহার করে।

আপনার Firebase অ্যাকাউন্ট সেট আপ করতে:

  1. একটি ফায়ারবেস প্রকল্প তৈরি করতে, আপনার Android প্রকল্পে Firebase যোগ করুন দেখুন।
  2. কিছু ফায়ারবেস প্রমাণীকরণ সক্ষম করতে, দেখুন আমি ফায়ারবেস প্রমাণীকরণ কোথায় শুরু করব? .
  3. একটি খালি ফায়ারবেস ক্লাউড ফাংশন যোগ করতে, শুরু করুন দেখুন।
  4. যদি ইতিমধ্যে না হয়ে থাকে, তাহলে টোকেন ইস্যুকারীকে কম্পাইল ও স্থাপন করতে Node.js , NPM এবং Firebase টুল ইনস্টল করুন।

DRC অ্যাপ একত্রিত করুন

রেফারেন্স DRC অ্যাপটি packages/apps/Car/DebuggingRestrictionController অবস্থিত। অ্যাপটি Soong- এর সাথে AOSP-এ বান্ডিল করে বা Gradle- এর সাথে আনবান্ডেড করা যেতে পারে।

বান্ডিল বিল্ড

একটি বান্ডিল অ্যাপ তৈরি করতে:

  1. google-services.json থেকে applicationId , projectId , এবং apiKey packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java এ কপি করুন। এটি করলে DRC অ্যাপ সঠিকভাবে Firebase এর সাথে সংযোগ করতে সক্ষম হয়।
  2. packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java তে এই ধ্রুবকগুলি আপডেট করুন :
    • TOKEN_USES_SELF_SIGNED_CA স্ব-স্বাক্ষরিত রুট CA শংসাপত্র ব্যবহার করা হলে তা নির্দেশ করে৷ সক্ষম হলে, DRC অ্যাপটি শুধুমাত্র ROOT_CA_CERT এ নির্দিষ্ট করা PEM-এনকোড করা রুট CA শংসাপত্রকে বিশ্বাস করে।
    • TOKEN_ISSUER_API_NAME হল Firebase ক্লাউড ফাংশনের নাম এবং এটি আপনার আগে Firebase কনসোলে তৈরি করা ক্লাউড ফাংশনের সাথে মেলে৷
    • TOKEN_ISSUER_HOSTNAME শেষ-সত্তা শংসাপত্রের বিষয় বিকল্প নামের সাথে মিলিত হওয়া উচিত যা অ্যাক্সেস টোকেনগুলিতে স্বাক্ষর করবে৷
    • DRC_TEST_EMAIL এবং DRC_TEST_PASSWORD হল একটি ঐচ্ছিক পরীক্ষার অ্যাকাউন্টের জন্য শংসাপত্র, যদি আপনি ইমেল/পাসওয়ার্ড সাইন-ইন সক্ষম করে থাকেন তাহলে Firebase-এ যেগুলি পূর্ব-বিধান করা যেতে পারে৷ এগুলি শুধুমাত্র যন্ত্রযুক্ত পরীক্ষার জন্য ব্যবহৃত হয়।

অ্যাপটি এখন আপনার Firebase অ্যাকাউন্ট এবং আপনার সার্টিফিকেট ব্যবহার করার জন্য কনফিগার করা হয়েছে। অ্যান্ড্রয়েড 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 : ফায়ারবেস ক্লাউড ফাংশনের নাম;
    • $TOKEN_ISSUER_HOST_NAME : শংসাপত্রে SAN;
    • $DRC_TEST_EMAIL এবং $DRC_TEST_EMAI L: একটি পরীক্ষার অ্যাকাউন্টের জন্য শংসাপত্র, শুধুমাত্র ডিবাগ বিল্ড।
  6. Gradle দিয়ে অ্যাপ তৈরি করতে, এইরকম একটি কমান্ড চালান:
    $ ./gradlew build
    

টোকেন প্রদানকারীকে একত্রিত করুন

রেফারেন্স টোকেন ইস্যুকারী হল একটি Firebase ক্লাউড ফাংশন যা Node.js এ প্রয়োগ করা হয়েছে। ফাংশন শুধুমাত্র একটি প্রমাণীকৃত ব্যবহারকারী দ্বারা কল করা যেতে পারে. অ্যাপটি স্থাপন করার আগে, আপনাকে অবশ্যই 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"
    }
    

    শংসাপত্রগুলি প্রথমে শেষ-সত্তা শংসাপত্র এবং শেষে রুট CA শংসাপত্রের সাথে অর্ডার করা হয়৷ মেয়াদ শেষ হওয়ার সময়কাল কাস্টমাইজ করা যায় এবং একটি দীর্ঘ সময়ের জন্য সেট করা যেতে পারে যদি একটি জারি করা টোকেন একটি DRC অ্যাপ দ্বারা গ্রহণ এবং গ্রহণ করার আগে কিছু সময় নেয়। টোকেন প্রত্যাহার সমর্থিত নয়।

  2. Firebase এ কনফিগারেশন আপলোড করুন:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. ফায়ারবেস ক্লাউড ফাংশন স্থাপন করুন:
  5. $ firebase deploy --only functions
    
  6. আপনার টোকেন প্রদানকারীকে পরিচালনা এবং নিরীক্ষণ করতে, ফাংশন স্থাপনা এবং রানটাইম বিকল্পগুলি পরিচালনা করুন দেখুন।

ডিফল্ট সীমাবদ্ধতা সেট করুন

ডিফল্ট সীমাবদ্ধতা প্রথম বুট আগে প্রয়োগ করা যেতে পারে. অ্যান্ড্রয়েড ফ্রেমওয়ার্কের ডিফল্টগুলি ওভাররাইড করতে স্ট্যাটিক রিসোর্স ওভারলেগুলির সাথে এটি করুন৷ বিধিনিষেধ যথাক্রমে বিভিন্ন ধরনের ব্যবহারকারীদের উপর প্রয়োগ করা যেতে পারে। বিভিন্ন ধরনের ব্যবহারকারী সম্পর্কে জানতে, মাল্টি-ইউজার সাপোর্ট দেখুন।

হেডলেস সিস্টেম ব্যবহারকারীর জন্য ডিফল্ট সীমাবদ্ধতা frameworks/base/core/res/res/values/config.xmlconfig_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>