AAOS Hata Ayıklama Kısıtlama Denetleyicisi'ni (DRC) entegre etmek için bu sayfadaki talimatları kullanın.
Şekil 1. DRC uygulaması örneği.
Mimari
DRC mimarisi Şekil 2'de gösterilmiştir. Kırmızıyla belirtilen bileşenler (jeton veren ve DRC), özelleştirebileceğiniz referans uygulamaları içerir.
Şekil 2. DRC mimarisi.
DRC nedir?
Araç ana birimi, DRC uygulamasını içerir (packages/apps/Car/DebuggingRestrictionController
'teki referans uygulamaya bakın). Referans uygulama, jeton verenden erişim jetonu alma, jetonu doğrulama ve ardından jetonda belirtildiği şekilde hata ayıklama kısıtlaması değişikliklerini uygulama mantığını içerir. Mantık, araç tarafındaki temel kullanıcı deneyimi öğelerini içerir.
Jeton veren nedir?
Bu, kriptografik olarak imzalanmış erişim jetonları veren bir web hizmetidir (packages/apps/Car/DebuggingRestrictionController/server
'teki referans uygulamaya bakın). Referans web hizmeti, dağıtılabilir bir Firebase Cloud işlevidir (daha fazla bilgi için Cloud Functions for Firebase başlıklı makaleyi inceleyin).
Ön koşullar
Referans uygulamayı dağıtmadan önce aşağıdaki görevleri tamamladığınızdan emin olun.
Erişim jetonlarını imzalamak için sertifikalar hazırlama
Jeton veren, erişim jetonları olarak JSON Web Signature'lar (JWS) oluşturur. Referans veren, optimum uyumluluk için yalnızca RS256 algoritmasını (SHA256 ile RSA imzaları) destekler. Anahtar rotasyonunu kolaylaştırmak için erişim jetonlarını imzalamak üzere tek bir sertifika yerine 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 jetonlarını imzalayan son varlık sertifikası, standart bir TLS sertifikasından farklı değildir. DigiCert gibi herkese açık CA'lardan sertifika satın alabilir veya kendinden imzalı kök CA sertifikaları ya da donanım güvenlik modülleri kullanarak kendi sertifika zincirinizi yönetebilirsiniz. Son varlık sertifikası, Özne Alternatif Adı (SAN) uzantısı içeren bir X509v3 sertifikası olmalıdır. SAN uzantısı, jetonun yayıncısının tanımlayıcısını (ör. ana makine adı) içerir. Son olarak, jeton sağlayıcı yalnızca RS256'yı desteklediği için EC sertifikalarına kıyasla RSA sertifikaları tercih edilmelidir.
Google, packages/apps/Car/DebuggingRestrictionController/server/genkey.sh
'te kendinden imzalı sertifika oluşturmak için bir kabuk komut dosyası sağlar.
Firebase'i ayarlama
Referans jetonu veren, Firebase Authentication ve Firebase Cloud Function'ı kullanır.
Firebase hesabınızı ayarlamak için:
- Firebase projesi oluşturmak için Firebase'i Android projenize ekleme başlıklı makaleyi inceleyin.
- Bazı Firebase kimlik doğrulayıcılarını etkinleştirmek için Firebase Authentication'ı kullanmaya nereden başlamalıyım? başlıklı makaleyi inceleyin.
- Boş bir Firebase Cloud Functions işlevi eklemek için Başlangıç bölümüne bakın.
- Henüz yapmadıysanız jeton sağlayıcıyı derlemek ve dağıtmak için
Node.js
, NPM ve Firebase araçlarını yükleyin.
DRC uygulamasını entegre etme
Referans DRC uygulaması packages/apps/Car/DebuggingRestrictionController
'te bulunur. Uygulama, Soong ile AOSP'de paket halinde veya Gradle ile paketsiz derlenebilir.
Paketlenmiş derleme
Paketlenmiş uygulama oluşturmak için:
google-services.json
'dakiapplicationId
,projectId
veapiKey
dosyalarınıpackages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
'e kopyalayın. Bu işlem, DRC uygulamasının Firebase'e doğru şekilde bağlanmasını sağlar.packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
'te şu sabitleri güncelleyin:TOKEN_USES_SELF_SIGNED_CA
, kendinden imzalı kök CA sertifikalarının kullanılıp kullanılmadığını gösterir. Etkinleştirilirse DRC uygulaması yalnızcaROOT_CA_CERT
içinde belirtilen PEM kodlu kök CA sertifikasına güvenir.TOKEN_ISSUER_API_NAME
, Firebase Cloud işlevinin adıdır ve daha önce Firebase Console'da oluşturduğunuz Cloud işleviyle eşleşmelidir.TOKEN_ISSUER_HOSTNAME
, erişim jetonlarını imzalayacak olan son öğe sertifikasındaki Konu Alternatif Adı ile eşleşmelidir.DRC_TEST_EMAIL
veDRC_TEST_PASSWORD
, e-posta/şifre ile oturum açma özelliğini etkinleştirdiyseniz Firebase'de önceden hazırlanabilen isteğe bağlı bir test hesabının kimlik bilgileridir. Bunlar yalnızca enstrümante edilmiş 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 sonraki sürümlerde imtiyazlı izin izin verilenler listesine ekleme işlemini ayarlamanız gerekir.
İzin verilenler listesi en az android.permission.MANAGE_USERS
öğe içermelidir. Örnek:
<permissions> <privapp-permissions package="com.android.car.debuggingrestrictioncontroller"> <permission name="android.permission.INTERNET"/> <permission name="android.permission.MANAGE_USERS"/> </privapp-permissions> </permissions>
Paketlenmemiş derleme
Paketlenmemiş DRC derlemeleri, uygulamayı derlemek için Gradle'ı kullanır.
Paketlenmemiş bir derleme oluşturmak için:
- Android SDK'yı yüklediğinizi onaylayın.
- Uygulamanın kök dizininde
local.properties
adlı bir metin dosyası oluşturun. - Android SDK'sının yerini ayarlayın:
sdk.dir=path/to/android/sdk
- Firebase'i ayarlamak için
google-services.json
'üpackages/apps/Car/DebuggingRestrictionController/app
'e kopyalayın. Gradle dosyayı ayrıştırır ve geri kalanını otomatik olarak ayarlar. - Ortam değişkenlerini tanımlayın. Paketlenmiş derlemelerde olduğu gibi şunları belirtmeniz gerekir:
$TOKEN_USES_SELF_SIGNED_CA
: true veya false;$ROOT_CA_CERT
: PEM kodlu kök CA sertifikasının yolu;$TOKEN_ISSUER_API_NAME
: Firebase Cloud işlevinin adı;$TOKEN_ISSUER_HOST_NAME
: Sertifikada SAN;$DRC_TEST_EMAIL
ve$DRC_TEST_EMAI
L: test hesabı için kimlik bilgileri, yalnızca hata ayıklama derlemeleri.
- Uygulamayı Gradle ile derlemek için aşağıdaki gibi bir komut çalıştırın:
$ ./gradlew build
Jeton sağlayıcıyı entegre etme
Referans jetonu veren, Node.js
'te uygulanan bir Firebase Cloud Functions işlevidir.
İşlev yalnızca kimliği doğrulanmış bir kullanıcı tarafından çağrılabilir. Uygulamayı dağıtmadan önce JWS jetonlarını imzalamak için kullanılan özel anahtarı ve sertifikaları ayarlamanız gerekir.
- Bir JSON dosyasını aşağıdaki içeriklerle doldurun:
{ "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. Süre sonu, özelleştirilebilir. Dağıtılan bir jetonun bir DRC uygulaması tarafından alınıp kullanılabilmesi biraz zaman alıyorsa süre sonu daha uzun bir süreye ayarlanabilir. Jeton iptal etme işlemi desteklenmez.
- Yapılandırmayı Firebase'e yükleyin:
- Firebase Cloud işlevini dağıtın:
- Jeton sağlayıcınızı yönetmek ve izlemek için İşlev dağıtımını ve çalışma zamanı seçeneklerini yönetme başlıklı makaleyi inceleyin.
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
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 yer paylaşımlarıyla yapın. Kısıtlamalar, farklı kullanıcı türlerine göre uygulanabilir. Farklı kullanıcı türleri hakkında bilgi edinmek için Çok Kullanıcılı Destek başlıklı makaleyi inceleyin.
Başsız sistem kullanıcısı için varsayılan kısıtlama, frameworks/base/core/res/res/values/config.xml
içindeki config_defaultFirstUserRestrictions
dize dizisiyle yapılandırılabilir. Bu kısıtlamayı ayarladığınızda, kısıtlama kaldırılana kadar Android Debug Bridge (ADB) otomatik olarak devre dışı bırakılır. Örneğin:
<string-array translatable="false" name="config_defaultFirstUserRestrictions"> <item>no_debugging_features</item> </string-array>
Normal kullanıcılar (ör. sürücüler ve yolcular) ve misafirler için varsayılan kısıtlamalar frameworks/base/core/res/res/xml/config_user_types.xml
'de yapılandırılabilir. Her kullanıcı türü için varsayılan kısıtlamaları ayarlamak üzere 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>