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
/assets
içindeki tetikleyici yapılandırma dosyasının adıallow_internal_storage
Kayıtların dahili depolama alanına kaydedilmesine izin verboot_startup_enabled
Cihaz açılırken Dashcam hizmetinin başlatılmasınotifications_on
Kayıt başladığında bildirimleri gösterdefault_app_component
Genel kayıt erişimi ve genel tetikleyici erişimi olan varsayılan araç kamerası uygulamasırecording_module
IRecordingModule
uygulamasının ComponentNamestreaming_module
IStreamingModule
uygulamasının ComponentNametrigger_module
ITriggerModule
uygulaması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:
maxStorageUsagePercent
Kayıtları kırpmadan önce araç kamerasının kullandığı maksimum kullanılabilir depolama alanı yüzdesi.maxStorageUsageMegabytes
Kayıtları kırpmadan önce araç kamerasının kullandığı maksimum depolama alanı miktarı (megabayt cinsinden).maxAgeHoursBeforePrune
Bir 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.
prerollLengthMs
Her etkinlikle birlikte depolanacak ön reklamın uzunluğu.width
Kamera tarafından döndürülen arabelleğin isteğe bağlı genişliği.height
Kamera 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:
name
Benzersiz tetikleyici adı.cameras
Kameraların kimlikleri.sensorPropertyID
Sensörün, sensör grubuyla birlikte ön ek olarak eklenen kimliği. Önek seçenekleriVHAL
veyaSENSOR_MANAGER
'tür.description
Kullanıcı arayüzünde gösterilen tetikleyicinin açıklaması.recordingLengthMs
Kaydedilecek etkinliğin milisaniye cinsinden süresi.sensorValueType
Sensör tarafından üretilen veri türü. Seçenekler şunlardır:INT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
veBOOLEAN, STRING
.thresholdType
Sensör değerininthresholdValue
'a göre nasıl değerlendirileceği. Seçenekler şunlardır:AVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
vePEAK_HOLD
.thresholdValue
Sensör değeriyle karşılaştırılan değer.thresholdExtra
AVERAGE
için aralık gibi bazı eşik türleri için ek değer gerekir.triggerCooldown
Bu 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
,IRecorderModule
veITriggerModule
) tanımlanır veDashcamServiceAPI
aracılığıylaDashcamManager
'e sunulur.
Yer paylaşımı modülleri
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_module
IStreamModule
-streaming_module
ITriggerModule
-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 oturum için geçerlidir.
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.