Hata Ayıklama Kısıtlama Denetleyicisi Entegrasyon Kılavuzu

AAOS Hata Ayıklama Kısıtlama Denetleyicisini (DRC) entegre etmek için aşağıdaki talimatları kullanın.

Şekil 1. DRC uygulama örneği

Mimari

DRC mimarisi aşağıda gösterilmiştir. Kırmızı ile özetlenen bileşenler (Token Veren ve İlk Çıkış Kısıtlama Denetleyicisi), özelleştirebileceğiniz eşlik eden referans uygulamalarına sahiptir.

Şekil 2. DRC mimarisi

DRC nedir?

Araba kafa ünitesi DRC uygulaması (referans uygulama görmek içeren packages/apps/Car/DebuggingRestrictionController ). Referans uygulaması, Belirteç Veren'den bir erişim belirteci alma, belirteci doğrulama ve ardından belirteçte belirtildiği gibi hata ayıklama kısıtlaması değişikliklerini uygulama mantığını içerir. Mantık, araba tarafında temel UX öğelerini içerir.

Token Veren Nedir?

Bu konular kriptografik (referans uygulanmasını bkz erişim belirteçleri imzalanan bir web hizmetidir packages/apps/Car/DebuggingRestrictionController/server ). Referans web hizmeti (Daha fazla bilgi edinmek görmek için konuşlandırılabilir Firebase Bulut işlevidir Firebase için Bulut İşlevleri ).

Önkoşullar

Bir başvuru uygulamasını dağıtmadan önce aşağıdaki görevleri tamamladığınızdan emin olun.

Erişim belirteçlerini imzalamak için sertifikalar hazırlama

Token Veren, erişim belirteçleri olarak JSON Web Signatures (JWS) oluşturur. Optimum uyumluluk için, referans veren yalnızca RS256 algoritmasını destekler (SHA256 ile RSA imzaları). Anahtar döndürmeyi kolaylaştırmak için erişim belirteçlerini imzalamak için tek bir sertifika yerine bir sertifika zinciri kullanın. Tipik bir sertifika zinciri, bir kök CA sertifikası, bir ara CA sertifikası ve bir son varlık sertifikasından oluşmalıdır.

JWS belirteçlerini imzalayan son varlık sertifikası, standart bir TLS sertifikasından farklı değildir. DigiCert gibi genel CA'lardan bir sertifika satın alabilir veya kendinden imzalı kök CA sertifikaları veya Donanım Güvenlik Modülleri kullanarak kendi sertifika zincirinizi koruyabilirsiniz. Son varlık sertifikası, Konu Alternatif Adı (SAN) uzantısına sahip bir X509v3 sertifikası olmalıdır. SAN uzantısı, belirteç verenin bir tanımlayıcısını (örneğin, ana bilgisayar adı) içerir. Son olarak, belirteç veren kuruluş yalnızca RS256'yı desteklediğinden, RSA sertifikaları EC sertifikalarına tercih edilmelidir.

Google kendinden imzalı sertifikalar üretmek için bir kabuk komut dosyası sağlar packages/apps/Car/DebuggingRestrictionController/server/genkey.sh .

Firebase'i kurma

Referans Simgesi Verenin kullanır Firebase Kimlik ve Firebase Bulut İşlevini .

Firebase hesabınızı kurmak için:

  1. Bir Firebase projesi oluşturmak için, bkz Android projeye Firebase ekleyin .
  2. Bazı Firebase doğrulayıcı etkinleştirmek için bkz Ben Firebase Kimlik Doğrulama ile başlarım Nerede? .
  3. Boş Firebase Bulut işlev eklemek için bkz Başlayın .
  4. Henüz yapılmadıysa, Token Veren'i derlemek ve dağıtmak için Node.js, NPM ve Firebase Tools'u yükleyin.

DRC uygulamasını entegre etme

Referans DRC uygulaması yer almaktadır packages/apps/Car/DebuggingRestrictionController . Uygulamanın ile AOSP gruplanacak inşa edilebilir Soong veya ayrıştırılmış Gradle .

Paketlenmiş yapı

Paketlenmiş bir uygulama oluşturmak için:

  1. Kopya applicationId , projectId ve apiKey gelen google-services.json içine packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java . Bunu yapmak, DRC uygulamasının Firebase'e doğru şekilde bağlanmasını sağlar.
  2. Bu sabitleri güncelleyin packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java :
    • TOKEN_USES_SELF_SIGNED_CA kendinden imzalı kök CA sertifikaları kullanılırsa gösterir. Etkin olduğunda, DRC uygulama ortaklıkları sadece PEM kodlanmış kök CA sertifikası belirtilen ROOT_CA_CERT .
    • TOKEN_ISSUER_API_NAME Firebase Bulut işlevinin adıdır ve Firebase Konsolu önce oluşturduğunuz Bulut fonksiyonunu aynı olmalıdır.
    • TOKEN_ISSUER_HOSTNAME erişim belirteçleri imzalayacak son varlık sertifikasında Konu Alternatif Adı aynı olmalıdır.
    • DRC_TEST_EMAIL ve DRC_TEST_PASSWORD Email / Şifre oturum açma etkinleştirdikten sonra Firebase önceden hazırlığı isteğe bağlı bir test hesabı kimlik bilgileri vardır. Bunlar sadece aletli testler için kullanılır.

Uygulama artık Firebase hesabınızı ve sertifikalarınızı kullanacak şekilde yapılandırılmıştır. Android 9 ve üstü, sen kurmak gerekir İmtiyazlı İzni Allowlisting . AllowList en az içermelidir android.permission.MANAGE_USERS . Örneğin:

<permissions>
  <privapp-permissions package="com.android.car.debuggingrestrictioncontroller">
    <permission name="android.permission.INTERNET"/>
    <permission name="android.permission.MANAGE_USERS"/>
  </privapp-permissions>
</permissions>

Paketlenmemiş Yapı

Paketlenmemiş DRC derlemeleri, uygulamayı derlemek için Gradle'ı kullanır.

Birleştirilmiş bir yapı oluşturmak için:

  1. Android SDK'yı yüklediğinizi onaylayın.
  2. Adlı bir metin dosyası oluşturun local.properties uygulamanın kök dizininde.
  3. Android SDK konumunu ayarlayın:
     sdk.dir=path/to/android/sdk
    
  4. Firebase kurmak için, kopya google-services.json için packages/apps/Car/DebuggingRestrictionController/app . Gradle dosyayı ayrıştırır ve gerisini otomatik olarak ayarlar.
  5. Ortam değişkenlerini tanımlayın. Paketlenmiş yapılarda olduğu gibi, şunları belirtmelisiniz:
    • $TOKEN_USES_SELF_SIGNED_CA : doğru ya da yanlış;
    • $ROOT_CA_CERT : PEM kodlanmış kök CA sertifikasına yolu;
    • $TOKEN_ISSUER_API_NAME : Firebase Bulut işlevinin adı;
    • $TOKEN_ISSUER_HOST_NAME : sertifikada SAN;
    • $DRC_TEST_EMAIL ve $DRC_TEST_EMAI L: bir test hesabı kimlik bilgileri, hata ayıklama yalnızca kurar.
  6. : Gradle ile uygulama oluşturmak için, böyle bir komutu çalıştırmak
    $ ./gradlew build
    

Token Veren'i Entegre Etme

Referans Token Veren, Node.js'de uygulanan bir Firebase Bulut İşlevidir. İşlev yalnızca kimliği doğrulanmış bir kullanıcı tarafından çağrılabilir. Uygulamayı dağıtmadan önce, JWS belirteçlerini imzalamak için kullanılan özel anahtarı ve sertifikaları ayarlamalısınız.

  1. Aşağıdaki içeriğe sahip bir JSON dosyası doldurma:
    {
        "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"
    }
    

    Sertifikalar, önce son varlık sertifikası ve sonunda kök CA sertifikası olacak şekilde sıralanır. Sona erme süresi özelleştirilebilir ve verilen belirtecin bir DRC uygulaması tarafından alınıp tüketilmesi biraz zaman alıyorsa daha uzun bir süreye ayarlanabilir. Belirteç iptali desteklenmez.

  2. Yapılandırmayı Firebase'e yükleyin:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. Firebase Cloud işlevini dağıtın:
  5. $ firebase deploy --only functions
    
  6. Simgenizin, verenin yönetmek ve izlemek için bkz fonksiyonları dağıtım ve çalışma zamanı seçeneklerini yönetin .

Varsayılan kısıtlamaları ayarlama

Varsayılan kısıtlamalar, ilk önyüklemeden önce uygulanabilir. Android çerçevesindeki varsayılanları geçersiz kılmak için bunu statik kaynak bindirmeleri ile yapın. Kısıtlamalar sırasıyla farklı kullanıcı türlerine uygulanabilir. Kullanıcıların farklı türleri hakkında bilgi edinmek için bkz Çoklu Kullanıcı Desteği .

Başsız sistemi kullanıcı için varsayılan kısıtlama ile yapılandırılabilir config_defaultFirstUserRestrictions dize-dizi frameworks/base/core/res/res/values/config.xml . Bu kısıtlamanın ayarlanması, kısıtlama kaldırılana kadar Android Hata Ayıklama Köprüsü'nü (ADB) otomatik olarak devre dışı bırakır, örneğin:

<string-array translatable="false" name="config_defaultFirstUserRestrictions">
  <item>no_debugging_features</item>
</string-array>

Ve misafirler (örneğin, sürücüler ve yolcular için) normal kullanıcılar için varsayılan kısıtlamalar yapılandırılabilir frameworks/base/core/res/res/xml/config_user_types.xml . Sırasıyla her bir kullanıcı türü için varsayılan kısıtlamaları ayarlamak için bu dizeleri üst üste bindirebilirsiniz, örneğin:

<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>