Dashcam uygulaması, AAOS ile entegre olacak şekilde tasarlanmıştır. Böylece sürücülere daha fazla güvenlik için video kaydı özellikleri sunar. Bu kılavuzda, başarılı bir uygulama sağlamak için teknik koşullar, entegrasyon adımları ve en iyi uygulamalar özetlenmiştir.
Ön koşullar
Devam etmeden önce aşağıdaki ön koşulların karşılandığından emin olun:
SDK:
- SDK 31 veya daha yeni bir sürüm gerekir.
Donanım:
- AAOS'ta kullanılabilen EVS veya Camera2 kameralar.
- Video kayıtları için yeterli dahili depolama alanı veya çıkarılabilir harici depolama desteği
bulunmalıdır.
Yazılım gereksinimleri:
- Paket dışı destek Daha fazla bilgi edinmek için Bağımsız Uygulamalar başlıklı makaleyi inceleyin.
- İzinler. Dashcam için sistem izinleri gerekir.
Kaynak kodunu alma
Dashcam, AAOS'un paketten çıkarılmış uygulamalarının bir parçasıdır. Paketten çıkarılan koda göz atmak için Kodu inceleme bölümüne bakın.
Android Code Search ile kaynak koduna göz atın.
Kaynak kod, aşağıdaki üç modülde sağlanır:
- Dashcam Hizmeti. Yayınlama, kayıt ve tetikleme mantığı.
- Dashcam Yöneticisi Dashcam Hizmeti'ne bağlanır ve istemcilere kararlı bir API sunar
- Dashcam uygulaması. Dashcam Yöneticisi API'sini kullanan referans Dashcam uygulaması
Dashcam'i oluşturma
Dashcam'i derlemek için Soong veya Gradle'i kullanın.
Soong
Soong'da:
mma DashcamService DashcamManager-lib DashcamApp
APK'lar out/target/product/[lunch-target]/system/priv-app/ konumundadır
Gradle
Gradle'de:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
APK'lar out/aaos-apps-gradle-build/ konumundadır
Dashcam'i Gradle ile derlemeyle ilgili ayrıntılı talimatlar README dosyasında verilmiştir.
İzinler
Dashcam Hizmeti ve Dashcam uygulaması için çeşitli sistem izinleri gerekir.
Bu izinleri vermenin en kolay yolu, Blueprint veya Make'i kullanarak önceden oluşturulmuş bir kuruluma dahil etmektir.
Blueprint'te:
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
prebuilt_etc {
name: "allowed_privapp_com.android.car.dashcam",
sub_dir: "default-permissions",
src: "allowed_privapp_com.android.car.dashcam.xml",
filename_from_src: true,
}
Make'te:
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/Dashcam/allowed_privapp_com.android.car.dashcam:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.android.car.dashcam.xml \
allowed_privapp_com.android.car.dashcam.xml adlı bir izin dosyası oluşturun:
<permissions>
<privapp-permissions package="com.android.car.dashcam.service">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
Manifest'ten izinleri izin dosyasına ekleyin.
Dashcam'i kullanmadan önce AAOS Kamera'da gösterildiği gibi Dashcam Hizmeti'ne Camera2 izinlerini önceden verin.
Önceden verilmiş izinler dosyasını, izin dosyasıyla aynı şekilde Blueprint veya Make dosyasına ekleyin.
pre-grant-permissions-com.android.car.dashcam.xml'te:
<exceptions>
<exception package="com.android.car.dashcam.service">
<permission name="android.permission.CAMERA" fixed="false" />
<permission name="android.permission.SYSTEM_CAMERA" fixed="false" />
<permission name="android.permission.CAMERA_HEADLESS_SYSTEM_USER" fixed="false" />
</exception>
</exceptions>
Android.bp'te:
...
required["pre-grant-permissions-com.android.car.dashcaml"]
...
prebuilt_etc {
name: "pre-grant-permissions-com.android.car.dashcaml",
sub_dir: "default-permissions",
src: "pre-grant-permissions-com.android.car.dashcam.xml",
filename_from_src: true,
}
Daha fazla bilgi için Ön derlemeyi sistem görüntüsüne entegre etme ve İzin verilenler listesi ekleme başlıklı makaleleri inceleyin.
Başka cihazdan yükleme
İzin dosyası, harici olarak da yüklenebilir. Önceden oluşturulmuş araç kamerası yapılandırılmamışsa bu yöntemi kullanın.
Daha önce hazır sürümler bölümünde oluşturulan izin dosyasını kullanarak şunları çalıştırın:
adb root
adb remount
adb push allowed_privapp_com.android.car.dashcam.xml /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
adb shell chmod 644 /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
Önceden izin verme izinleri dosyasını etc/default-permissions/'e benzer şekilde ekleyin.
Yer paylaşımlarını yapılandırma
Dashcam hizmetinin yer paylaşımlı yapılandırmaları vardır.
Hizmet yapılandırması
dashcam-service/res/values/config.xml
Bu dosya, hizmetle ilgili yapılandırmaları içerir:
config_file/assetsiçindeki tetikleyici yapılandırma dosyasının adıallow_internal_storageKayıtların dahili depolama alanına kaydedilmesine izin verboot_startup_enabledCihaz açılırken Dashcam hizmetinin başlatılmasınotifications_onKayıt başladığında bildirimleri gösterdefault_app_componentGenel kayıt erişimi ve genel tetikleyici erişimi olan varsayılan araç kamerası uygulamasırecording_moduleIRecordingModuleuygulamasının ComponentNamestreaming_moduleIStreamingModuleuygulamasının ComponentNametrigger_moduleITriggerModuleuygulamasının ComponentName
Tetikleyici yapılandırması
Kayıt tetikleyicilerini yapılandırmak için aşağıdakilerin kopyasını oluşturun:
dashcam-service/src/assets/config.xml
ve bunu assets dizinine ekleyin. Hizmet yapılandırma dosyasının config_file öğesinde bu dosyayı işaretleyin.
Tetikleyici yapılandırması depolama alanı, kamera ve tetikleyici bölümlerinden oluşur:
Depolama
Depolama yapılandırması aşağıdaki öğeleri içerir:
maxStorageUsagePercentKayıtları kırpmadan önce araç kamerasının kullandığı maksimum kullanılabilir depolama alanı yüzdesi.maxStorageUsageMegabytesKayıtları kırpmadan önce araç kamerasının kullandığı maksimum depolama alanı miktarı (megabayt cinsinden).maxAgeHoursBeforePruneBir kaydın kırpılmasından önceki maksimum saat sayısı. Depolama alanı sınırları karşılanırsa kayıtlar daha önce de kırpılabilir.
Kamera
Kamera yapılandırmasında aşağıdaki öğeler bulunur:
Kamera kimliği. Kamera ön ekini içeren kamera kimliği.
prerollLengthMsHer etkinlikle birlikte depolanacak ön reklamın uzunluğu.widthKamera tarafından döndürülen arabelleğin isteğe bağlı genişliği.heightKamera tarafından döndürülen arabelleğin isteğe bağlı yüksekliği.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
Bu örnekte, 1080p'de 10 saniyelik ön reklam içeren kamera kimliği EVS:1 ve 10 saniyelik ön reklam ile varsayılan genişlik ve yükseklik içeren kamera kimliği Camera2:1 gösterilmektedir.
Tetikleyici
Tetikleyici yapılandırması, aşağıdakiler tarafından tanımlanan tetikleyicilerin listesinden oluşur:
nameBenzersiz tetikleyici adı.camerasKameraların kimlikleri.sensorPropertyIDSensör grubunun ön eklendiği sensörün kimliği. Önek seçenekleriVHALveyaSENSOR_MANAGER'tür.descriptionKullanıcı arayüzünde gösterilen tetikleyicinin açıklaması.recordingLengthMsKaydedilecek etkinliğin milisaniye cinsinden süresi.sensorValueTypeSensör tarafından üretilen veri türü. Seçenekler şunlardır:INT,INT_ARRAY,FLOAT,FLOAT_ARRAYveBOOLEAN, STRING.thresholdTypeSensör değerininthresholdValue'a göre nasıl değerlendirileceği. Seçenekler şunlardır:AVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKvePEAK_HOLD.thresholdValueSensör değeriyle karşılaştırılan değer.thresholdExtraAVERAGEiçin aralık gibi bazı eşik türleri için ek değer gerekir.triggerCooldownBu türde başka bir etkinlik tetiklenmeden önce milisaniye cinsinden bekleme süresi.
<EventTriggers>
<EventTrigger
name="AEB"
cameras="EVS:1, EVS:2"
sensorPropertyID="VHAL:289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
Bu örnekte, TriggerModule'ün tam sayı değerleri üreten bir VHAL sensörünü izlediği bir tetikleyici gösterilmektedir.
TriggerModule, eşitliği eşik değerle karşılaştırır. Eşitlik koşulu karşılandığında bir tetikleyici, 1 ve 2 numaralı EVS kameralarında kayıt yapar.
<EventTrigger
name="SPEED"
cameras="Camera2:0, Camera2:1, Camera2:2, Camera2:3"
sensorPropertyID="VHAL:291504648"
description="Over speed"
recordingLengthMs="10000"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="10"
triggerCooldown="2000"/>
Bu örnekte, TriggerModule'ün kayan nokta değerleri üreten bir VHAL sensörünü izlediği bir tetikleyici gösterilmektedir.
TriggerModule, 10 örnek aralığındaki sensör ortalamasını 20.0 eşik değeriyle karşılaştırır.
Örnek aralığı thresholdExtra olarak ayarlanmıştır. Yeni bir etkinlik yalnızca triggerCooldown parametresinde ayarlandığı şekilde 2000 milisaniyede bir tetiklenebilir.
Modüller
Dashcam Hizmeti üç modülden oluşur:
Stream, kameralardan gelen akışları işleme mantığını içerir.
Kayıt, kayıtları işleme mantığını içerir.
Tetikleyici, sensör verilerinden kayıt tetikleme mantığını içerir. Modül API'leri, ilgili arayüzlerinde (
IStreamModule,IRecorderModuleveITriggerModule) tanımlanır veDashcamServiceAPIaracılığıylaDashcamManager'e sunulur.
Yer paylaşımlı modüller
Dashcam Hizmeti, modül uygulamalarını nerede bulacağını belirlemek için dashcam-service/res/values/config.xml özelliğini kullanır. Her modül için varsayılan uygulamalar sağlanır. Ancak her modül, bileşeni ilgili yapılandırma değerine ayarlanarak örtüşebilir.
Aşağıdakilerin OEM uygulama bileşeni adını ayarlayın:
IRecorderModule-recording_moduleIStreamModule-streaming_moduleITriggerModule-trigger_module
Dashcam hizmeti, çalışma zamanında her modül için config.xml içinde ayarlanan bileşen adını örneklendirir.
Uygulama geliştirici kılavuzu
Dashcam, üretime hazır ve özelleştirilebilir bir araç kamerası çözümüdür. Araç içi kamera, Dashcam service ile iletişim kurmak için Dashcam Manager API'lerini kullanır. Dashcam Manager API'yi IDashcamManager adresinde bulabilirsiniz. Gerekli izinlere sahip tüm uygulamalar Dashcam Yöneticisi'ni kullanabilir.
OverlayUI
Uygulama, çalışma zamanında kaynak yer paylaşımlarıyla özelleştirilebilir. Daha fazla bilgi için Çalışma zamanında kaynak yer paylaşımları başlıklı makaleyi inceleyin. Yerleştirilebilir öğelerin listesini görmek için overlayable.xml dosyasını inceleyin.
Tetikleyicileri uzatma
Tetikleyiciler, DashcamManager#addTrigger() çağrısı yapılarak geçerli oturum için uzatılabilir. Eklenen tetikleyiciler yalnızca mevcut oturumda devam eder.
Otomatik başlatma
Otomatik kayıt başlatma desteklenmez. Ancak manuel tetikleyici, DashcamManager.startRecording() çağrısı ile onBoot başlatılabilir.
En iyi uygulamalar
Depolama alanı. Harici çıkarılabilir depolama alanı kullanmanızı önemle tavsiye ederiz.
Kullanıcı deneyimi. Dashcam uygulamasının kullanıcı arayüzünü, AAOS tasarım yönergelerine uygun şekilde sezgisel ve kullanıcı dostu olacak şekilde tasarlayın.
Performans optimizasyonu. Kaynak kullanımını en aza indirmek ve AAOS'te sorunsuz çalışma sağlamak için uygulamanın performansını optimize edin.
Sorun giderme
Kamera Bağlantısı Sorunları EVS veya Camera2, AAOS IVI'de desteklenmeli ve kullanılabilir olmalıdır.
Depolama alanı hataları. Kullanılabilir depolama alanını doğrulayın ve kayıtları yönetin. Dahili depolama alanını kullanmak, depolama alanının erken yıpranmasına neden olabileceğinden harici depolama alanı kullanılması önemle tavsiye edilir.