Aplikacja Dashcam została zaprojektowana z myślą o integracji z AAOS i zapewnia kierowcom możliwość nagrywania filmów w celu zwiększenia bezpieczeństwa. Ten przewodnik zawiera wymagania techniczne, kroki integracji i sprawdzone metody, które pomogą Ci w udanym wdrożeniu.
Wymagania wstępne
Zanim przejdziesz dalej, upewnij się, że są spełnione te warunki wstępne:
Pakiet SDK:
- Wymagana jest wersja 31 lub nowsza pakietu SDK.
Sprzęt:
- Aparaty EVS lub Camera2 dostępne w Androidzie AOSP.
- Do nagrywania filmów musi być dostępne wystarczające miejsce na wewnętrznej pamięci lub pamięci zewnętrznej.
Wymagania dotyczące oprogramowania:
- Nieobsługiwana pomoc. Więcej informacji znajdziesz w artykule [GA4] Aplikacje z nieopakowanych danych.
- Uprawnienia Dashcam wymaga uprawnień systemowych.
Pobieranie kodu źródłowego
Kod źródłowy można znaleźć w wyszukiwarce kodu Androida:
Kod źródłowy jest dostępny w tych 3 modułach:
- Usługa Dashcam. strumieniowanie, nagrywanie i uruchamianie logiki;
- Menedżer Dashcam Łączy się z usługą Dashcam i udostępnia klientom stabilne interfejs API.
- Aplikacja Dashcam. Przykładowa aplikacja Dashcam korzystająca z Dashcam Manager API
Tworzenie wideorejestratora
Użyj Soong lub Gradle do skompilowania Dashcam.
Soong
Przed kompilacją za pomocą Soong wyczyść katalogi .cxx
.
W Soong:
mma DashcamService DashcamManager-lib DashcamApp
Pliki APK znajdują się w folderze out/target/product/[lunch-target]/system/priv-app/
Gradle
W Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
Pliki APK znajdują się w folderze out/aaos-apps-gradle-build/
Szczegółowe instrukcje kompilowania Dashcam za pomocą Gradle znajdziesz w pliku README
.
Uprawnienia
Usługa Dashcam i aplikacja Dashcam wymagają kilku uprawnień systemowych.
Najprostszym sposobem przyznania tych uprawnień jest uwzględnienie ich w gotowym szablonie za pomocą Blueprint lub Make.
W planie:
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
W sekcji Make:
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 \
Utwórz plik uprawnień o nazwie allowed_privapp_com.android.car.dashcam.xml
:
<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>
Dodaj uprawnienia z pliku manifestu do pliku uprawnień.
Więcej informacji znajdziesz w artykule o wstępnie utworzonych obrazach systemowych.
Instalowanie z nieoficjalnego źródła
Plik z uprawnieniami można też zainstalować ręcznie. Użyj tej metody, gdy wstępnie skonfigurowana kamera samochodowa nie jest skonfigurowana.
Użyj pliku uprawnień utworzonego wcześniej w sekcji z gotowymi rozwiązaniami:
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
Konfigurowanie nakładek
Usługa Dashcam ma konfiguracje nakładkowe.
Konfiguracja usługi
dashcam-service/res/values/config.xml
Ten plik zawiera konfiguracje usługi:
allow_internal_storage
Zezwalanie na nagrywanie w pamięci wewnętrznejsave_location
Nazwa katalogu, w którym mają być zapisywane nagrania. Domyślnie: dashcammax_storage_mb
Ile miejsca na dane ma wykorzystywać wideorejestratormax_age_days
Jak długo plik ma być przechowywany przed przycięciemboot_startup_enabled
Uruchomienie usługi wideorejestratora po uruchomieniu urządzenianotifications_on
Pokaż powiadomienia po rozpoczęciu nagrywanianative_recorder
Używanie interfejsów NDK, domyślnie interfejsy Javanative_renderer
Używanie interfejsów NDK, domyślnie interfejsy Javadefault_app_component
Domyślna aplikacja rejestratora jazdy, która ma dostęp do wszystkich nagrań i do wszystkich zdarzeńrecording_module
ComponentName implementacji IRecordingModulestreaming_module
ComponentName implementacji IRecordingModuletrigger_module
ComponentName implementacji IRecordingModule
Konfigurowanie reguły
Aby uruchomić konfigurację, uruchom:
dashcam-service/src/assets/config.xml
Ten plik zawiera konfiguracje wyzwalaczy nagrywania. Konfiguracja reguły składa się z 2 części:
Identyfikator reklamy przed filmem. Identyfikator aparatu (EVs lub Camera2) w zależności od tego, co jest obsługiwane.
prerollLengthMs
Długość wstępu, który ma być przechowywany wraz z każdym zdarzeniem.
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
Ten przykład pokazuje kamerę o identyfikatorze 0 z 10-sekundową reklamą przed filmem.
name
Unikalna nazwa regułycamera
Identyfikator kamery (EVs lub Camera2 w zależności od tego, co jest obsługiwane)sensorPropertyID
Identyfikator czujnikadescription
Opis reguły wyświetlany w interfejsierecordingLengthMs
Czas trwania nagrywania po zdarzeniu w milisekundach.sensorType
Typ czujnika. Dostępne opcje toVHAL
lubSENSOR_MANAGER
sensorValueType
Typ danych generowanych przez czujnik. Opcje toINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
iBOOLEAN, STRING
.thresholdType
Jak ocenić wartość czujnika. Opcje:AVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
iPEAK_HOLD
thresholdValue
Wartość, z którą porównać wartość czujnika przy danym typie proguthresholdExtra
Dodatkowa wartość wymagana w przypadku niektórych typów progów, takich jak zakres w przypadkuAVERAGE
triggerCooldown
Czas oczekiwania przed wywołaniem kolejnego zdarzenia tego typu w milisekundach.
<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>
Ten przykład pokazuje czujnik VHAL, który zwraca wartości całkowite, gdzie porównujemy równość z wartością progową. Gdy warunek równości jest spełniony, wyzwalacz rejestruje w kamerach 1 i 2.
<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"/>
Ten przykład pokazuje czujnik VHAL, który zwraca wartości zmiennoprzecinkowe. Średnią z różnych próbek porównuje się z wartością progową. Zakres próbki jest ustawiony w thresholdExtra
Moduły
Usługa Dashcam składa się z 3 modułów:
Stream zawiera logikę obsługi strumieni z kamer.
Recording zawiera logikę obsługi nagrań.
Wyzwalacz zawiera logikę wyzwalania nagrywania na podstawie danych z czujników. Interfejsy API modułów są zdefiniowane w odpowiednich interfejsach
IStreamModule
,IRecorderModule
iITriggerModule
oraz udostępniane interfejsowi DashcamManager za pomocąDashcamServiceAPI
.
Moduły nakładek
Usługa Dashcam używa właściwości dashcam-service/res/values/config.xml
do określenia, gdzie znajdują się implementacje modułu. Dla każdego modułu udostępniamy domyślne implementacje. Każdy moduł można jednak nałożyć, ustawiając jego komponent w odpowiedniej wartości konfiguracji.
Ustaw nazwę komponentu implementacji OEM o nazwie
IRecorderModule
narecording_module
Ustaw nazwę komponentu OEM
IStreamModule
na nazwę modułu strumieniowego.Ustaw nazwę komponentu implementacji OEM o nazwie
ITriggerModule
natrigger_module
Podczas działania usługa Dashcam tworzy instancję nazwy komponentu ustawionej w
config.xml
dla każdego modułu.
Przewodnik dla deweloperów aplikacji
Dashcam to gotowe do wdrożenia i dostosowywalne rozwiązanie do rejestrowania obrazu z przodu pojazdu. Wideorejestrator
korzysta z interfejsów Dashcam Manager API do komunikacji z Dashcam service
. Interfejs DashcamManager API znajdziesz na stronie IDashcamManager
. Każda aplikacja z wymaganymi uprawnieniami może korzystać z Menedżera wideorejestratora.
Uprawnienia
Obsługiwane są Camera2 i EV.
Gotowe
Najprostszym sposobem przyznania tych uprawnień jest uwzględnienie ich w gotowym szablonie za pomocą Blueprint lub Make.
OverlayUI
Aplikację można dostosować za pomocą nakładek zasobów w czasie działania. Więcej informacji znajdziesz w artykule Nakładki zasobów w czasie wykonywania. Aby zobaczyć listę elementów, które można nakładać, otwórz plik overlayable.xml.
Rozszerzanie reguł
Korzystając z funkcji DashcamManager.addTrigger()
, możesz rozszerzyć działanie wyzwalaczy na bieżącą sesję. Dodane przez Ciebie reguły będą obowiązywać tylko w bieżącej sesji.
Autostart
Nagrywanie automatyczne nie jest obsługiwane. Można jednak uruchomić onBoot
za pomocą wywołania DashcamManager.startRecording()
Sprawdzone metody
Miejsce na dane Zdecydowanie zalecamy użycie zewnętrznej pamięci wymiennej.
Interfejs użytkownika. Zaprojektuj interfejs aplikacji Dashcam tak, aby był intuicyjny i przyjazny dla użytkownika, a jednocześnie zgodny ze wskazówkami dotyczącymi AAOS.
Optymalizacja skuteczności. Zoptymalizuj wydajność aplikacji, aby zminimalizować wykorzystanie zasobów i zapewnić płynne działanie w AAOS.
Rozwiązywanie problemów
Problemy z połączeniem kamery EVS lub Camera2 muszą być obsługiwane i dostępne w AAOS IVI.
Błędy miejsca na dane. Sprawdzanie dostępnego miejsca na dane i zarządzanie nagraniami. Zdecydowanie zalecamy korzystanie z pamięci zewnętrznej, ponieważ używanie pamięci wewnętrznej może spowodować przedwczesne zużycie pamięci.