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
Kaynak kodunu Android Code Search'te şu adreste bulabilirsiniz:
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'dan derlemeden önce .cxx
dizinlerini temizlediğinizden emin olun.
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"],
}
Make'te:
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/CarCatApp/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">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
Manifest'ten izinleri izin dosyasına ekleyin.
Daha fazla bilgi için sistem görüntüsüne önceden oluşturulmuş bölümüne bakın.
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 yapılar 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
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:
allow_internal_storage
Kayıtların dahili depolama birimine kaydedilmesine izin versave_location
Kayıtların kaydedileceği dizin adı. Varsayılan olarak dashcam değerine ayarlanır.max_storage_mb
Dashcam'in kullanmasına izin verilecek depolama alanı miktarımax_age_days
Dosyaların budanmadan önce ne kadar süre saklanması gerekir?boot_startup_enabled
Cihaz açılırken Dashcam hizmetinin başlatılmasınotifications_on
Kayıt başladığında bildirimleri gösternative_recorder
NDK API'lerini kullanın, varsayılan olarak Java API'leri kullanılırnative_renderer
NDK API'lerini kullanın, varsayılan olarak Java API'leri kullanılırdefault_app_component
Varsayılan araç kamerası uygulaması. Bu uygulama, genel kayıt erişimine ve genel tetikleyici erişimine sahiptir.recording_module
IRecordingModule uygulamasının ComponentName özelliğistreaming_module
IRecordingModule uygulamasının ComponentName özelliğitrigger_module
IRecordingModule uygulamasının ComponentName özelliği
Tetikleyici yapılandırma
Yapılandırmayı tetiklemek için şu komutu çalıştırın:
dashcam-service/src/assets/config.xml
Bu dosya, kayıt tetikleyicilerinin yapılandırmalarını içerir. Tetikleyici yapılandırması iki bölümden oluşur:
Videodan önce gösterilen reklam kimliği. Desteklenene bağlı olarak kameranın kimliği (EVS veya Camera2).
prerollLengthMs
Her etkinlikle birlikte depolanacak ön reklamın uzunluğu.
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
Bu örnekte, 10 saniyelik videodan önce gösterilen reklam içeren 0 numaralı kamera kimliği gösterilmektedir.
name
Benzersiz tetikleyici adıcamera
Desteklenene bağlı olarak kameranın kimliği (EVS veya Camera2)sensorPropertyID
Sensörün kimliğidescription
Kullanıcı arayüzünde gösterilen tetikleyicinin açıklamasırecordingLengthMs
Kaydedilecek etkinliğin milisaniye cinsinden süresi.sensorType
Hangi sensör türü. SeçeneklerVHAL
veyaSENSOR_MANAGER
'dur.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ğeri nasıl değerlendirilir? SeçeneklerAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
vePEAK_HOLD
'tır.thresholdValue
Sensör değerinin, eşik türüyle karşılaştırılacağı değerthresholdExtra
AVERAGE
için aralık gibi bazı eşik türleri için ek değer gerekirtriggerCooldown
Bu türde başka bir etkinlik tetiklemeden önce milisaniye cinsinden bekleme süresi.
<EventTriggers>
<EventTrigger
name="AEB"
camera="1 2"
sensorPropertyID="289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorType="VHAL"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
Bu örnekte, eşittir koşulunu eşik değerle karşılaştırdığımızda tam sayı değerleri üreten bir VHAL sensörü gösterilmektedir. Eşitlik koşulu karşılandığında 1 ve 2 numaralı kameralarda kayıt yapan bir tetikleyici etkinleştirilir.
<EventTrigger
name="SPEED"
camera="1 2 3 4"
sensorPropertyID="291504648"
description="Over speed"
recordingLengthMs="10000"
sensorType="VHAL"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="1000"
triggerCooldown="2000"/>
Bu örnekte, bir dizi örnekteki ortalamayı eşik değere göre değerlendirdiğimiz, kayan nokta değerleri üreten bir VHAL sensörü gösterilmektedir. Örnek aralığı thresholdExtra
olarak ayarlandı
Modüller
Dashcam Hizmeti üç modülden oluşur:
Stream, kameralardan gelen yayınları 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
üzerinden DashcamManager'a gösterilir.
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ğlarız. Ancak her modül, bileşeni ilgili yapılandırma değerine ayarlanarak örtüşebilir.
IRecorderModule
OEM uygulama bileşeninin adınırecording_module
olarak ayarlamaIStreamModule
OEM uygulama bileşeninin adını akış modülü olarak ayarlayın.ITriggerModule
OEM uygulama bileşeninin adınıtrigger_module
olarak ayarlamaDashcam 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. DashcamManager API'yi IDashcamManager
adresinde bulabilirsiniz. Gerekli izinlere sahip tüm uygulamalar Dashcam Yöneticisi'ni kullanabilir.
İzinler
Camera2 ve EVS desteklenir.
Hazır sistem
Bu izinleri vermenin en kolay yolu, Blueprint veya Make'i kullanarak önceden oluşturulmuş kuruluma eklemektir.
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.