Integration flows  |  Android Open Source Project Skip to main content Docs What's new? Release notes Latest security bulletins Latest Compatibility Definition Document (CDD) Site updates Getting Started About Start Download Builds Test Create Contribute Community Tools, build, and related reference Security Overview Bulletins Features Testing Best Practices Core Topics Architecture Audio Camera Connectivity Data Display Fonts Graphics Interaction Media Performance Permissions Power Runtime Settings Storage Tests Updates Virtualization Compatibility Compatibility Definition Document (CDD) Compatibility Test Suite (CTS) Android Devices Cuttlefish Enterprise TV Automotive Overview Software Defined Vehicle In-vehicle Infotainment Release Details Reference HIDL HAL Trade Federation Security Test Suite Android Code Search / English Deutsch Español – América Latina Français Indonesia Italiano Polski Português – Brasil Tiếng Việt Türkçe Русский עברית العربيّة فارسی हिंदी বাংলা ภาษาไทย 中文 – 简体 中文 – 繁體 日本語 한국어 Sign in Documentation What's New? Getting Started Security Core Topics Compatibility Android Devices Automotive Reference Docs More What's New? Getting Started Security Core Topics Compatibility Android Devices Automotive Reference Android Code Search Overview What's new? What is Android Automotive? Terminology Software defined vehicle Overview Terminology Get started Overview Development environment Local development Cloud development Overview Organization setup Code location Download, build, and run IDE setup Access GitHub repositories Understand AAOS SDV System architecture SDV architecture Key concepts Logical architecture Service bundle naming conventions Configure the Orchestrator Service bundle identity Time sync Health monitoring Quality of service scheduling Control vehicle and power management Security concepts Authorization Overview Deployment Authorization policy Enforcement Debug permissions violations VM-level authorization policy VM identity and attestation Overview SDV profile for DICE vvmconfig and vvmtruststore Mesh status and provisioning Device trust Update concepts Service bundle updates A/B system updates Update Manager OEM AB partition updates Develop SDV services Quick start: Create and execute SDV service bundles Vehicle Services IDL (VSIDL) Overview Define messages and RPC services Define service architecture Generate middleware Implement business logic Build and deploy service bundles Automatic catalog updates and LSP integration Language specification SDV VSIDL compatibility guidelines VSIDL Provider for reflection Service bundle metadata Core code samples Handle suspend and resume Work with Automotive Services Overview Configuration and calibration Diagnostics User preferences architecture and implementation guide Asynchronous Rust Platform integration guides SDV Core integration Integration guide Guest system (VM image) requirements SDV Core bootloader APEX signing SDV Media integration Overview SDV Media requirements Graphics rendering on SDV Media SDV Media: Manage displays Use cameras SDV on hardware SDV on QNX QVM sample configurations QVM sample configuration for SDV Core QVM sample configuration for SDV Media QVM sample configuration for SDV IVI VM identity and attestation SDV bootloader Android HLOS CDI handover Configure identity for native services SOME/IP integration guide Overview Write a SOME/IP mapping file Write a SOME/IP type definition Implement the SOME/IP stack Integrate SOME/IP with SDV Optimize performance Use the SDV Gateway on IVI The Generic Kernel Image (GKI) project Partition layout Test, debug, and verify performance Debug SDV Troubleshoot middleware API failures Use tracing to gain insights into system performance SELinux policies for device tests Detect security violations SDV system tests SDV Test Framework library SDV system test creation Solution guides Display Safety Overview Get started Code structure DriverUI HAR camera view HAR platform abstraction layer HAR graphics pipeline Audio chimes Performance tracing for HAR Safety design toolchain Telemetry Overview SDK Overview Rust telemetry client library Overview Rust telemetry client library API Configurable Publisher Registry library Java protobuf descriptor generator tool Metrics Configuration Generator Overview Deployment Vehicle signal catalogs API reference Metrics configuration concepts Data sources Configurable Publisher Registry Metrics configuration generation request JSON format Cloud Telemetry Simulation Overview Deployment guide User guide In-vehicle Infotainment Overview Guidelines for development Car service feature control App compat Car display compatibility Audio Overview Audio focus Car audio configuration Configurable audio policy engine Audio control HAL Multi-zone audio routing Car audio plugin service Volume management Connect an input device in AAOS Microphone input Audio power management Manage audio resources during suspend Audio configuration AAOS flags Windowing with Scalable UI Overview Implement advanced windowing Consider the app ecosystem Maximize test compliance with WindowManager invariants Configure advanced windowing Configure a panel Configure a variant Configure a transition Configure an event Configure an action Implement heads up notification panels Customize system bars Integrate Setup Wizard Camera Overview Android Camera Service Overview Enable multi-client cameras Extended View System Overview Event and frame notification mechanism Program camera control parameters Changes to camera and system configuration Frame metadata Automotive display proxy service Multi-camera support Vehicle camera HAL Migrate to Camera2 Overview Migrate to Camera2 Camera2 API mapping Car framework core Car Settings Overview Add Car Settings Rearrange Car Settings Distraction optimization in Car Settings Car Settings search indexing Dual pane customization Preference subtitles Customize status bar system icons Connectivity Configure internal Ethernet networks Bluetooth Per-application network selection (PANS) Maintain hotspots between driving sessions Device management for Automotive Displays and input Overview Monitor status Key input Instrument Cluster API OEM custom inputs Multi-Display Communications API Automotive Window Layering Driver distraction Driver distraction guidelines Car User Experience Restrictions rules Consume car driving state and UX restrictions Flash wear management Location Automotive location bypass allowlist policy Automotive Location Bypass API Get coarse location Notifications Overview Set up notifications Heads-up notifications Notification access and notification listener policy Throttle and suppress notifications Performance analysis Power Overview Power policy Power management Manage boot time Garage Mode Radio Overview Broadcast radio HAL Radio control implementation Set up remote access Rotary controller Overview Develop apps Develop apps without the Car UI library Integration guide for OEMs Security Overview Secure developer options Enable MACsec for Ethernet features Debug Restriction Controller integration guide Use vehicle bound file encryption Manufacturer guide for long-term Android security Vehicle system isolation OTA updates System UI Implement the System UI SystemUIOverlayWindow management system SystemUIOverlayWindow codelab Time Overview Configure AAOS time sources Automatic time detection Time zone options Location time zone detection Unbundled apps Overview Release notes Integrate unbundled apps AOSP host integration guide Integrate the AOSP host Media apps with Car App Library OEM design tokens Control Center reference app Overview Customize the reference app Technical details Integrate AppCards Overview Create an AppCard Configure an AppCard host Try the AppCard codelab App Lock Car Messenger Car UI library Overview Integrate the Car UI library into apps Customize apps Car UI plugins List of packages containing car-ui-lib Add custom fonts Customize Car UI preferences Customize the toolbar with runtime resource overlays Customization options for CarUiListItem Customize CarUiRecyclerView Car UI library release notes Appendix A, work with RROs Appendix B, customization Appendix C, minimum compatible version for Car UI Plugin API Dashcam Dialer Overview Technical details Customization guidelines Global configurable values Toolbar Debug and test Media Overview System components and user flows Implement radio with Media Customize media Implement a media card Integrate deep links to Media apps Users and accounts Multi-user support Foreground and background user system handling Manage users and accounts Remove packages for the system user User HAL properties Vehicle hardware abstraction layer (VHAL) Overview VHAL interface Property configurations Supported system properties Special properties SEAT and STEERING_WHEEL properties ADAS vehicle properties Reference implementation Debug VHAL Use VHAL with the native client HIDL VHAL HIDL VHAL migration guide HIDL VHAL interface Virtualization Overview Architecture Tools Reference platform Voice Voice assistant Tap-to-Read OEM custom inputs Voice interaction integration guide About voice interaction Integration flows App development Fulfill commands Test and debug Watchdog Overview Monitor flash memory usage Collect performance data Monitor system health Development tools Overview Android Virtual Device Android Virtual Device as a development platform Build your own cloud emulator Extend VHAL property descriptions in the emulator Emulator USB passthrough integration guide USB Port Reset API Pixel devices as development platforms System performance tools Testing tools and infrastructure Overview System performance tools User interface frameworks Network simulation Complete Automotive Tests in a Box (CATBox) Enable fuzzers Spectatio Torq Release details Overview Android Automotive 26Q2 Android Automotive 25Q4 Android Automotive 25Q2 Android Automotive 25Q1 Android Automotive 24Q4 Android Automotive 15 Android Automotive 14 QPR1 Android Automotive 14 Android Automotive 13 QPR3 Android Automotive 13 QPR2 Android Automotive 13 QPR1 Android Automotive 13 Android Automotive 12L Android Automotive 12 QPR3 Android Automotive 11 Unbundled apps What's new? Release notes Latest security bulletins Latest Compatibility Definition Document (CDD) Site updates Getting Started About Start Download Builds Test Create Contribute Community Tools, build, and related reference Security Overview Bulletins Features Testing Best Practices Core Topics Architecture Audio Camera Connectivity Data Display Fonts Graphics Interaction Media Performance Permissions Power Runtime Settings Storage Tests Updates Virtualization Compatibility Compatibility Definition Document (CDD) Compatibility Test Suite (CTS) Android Devices Cuttlefish Enterprise TV Automotive Overview Software Defined Vehicle In-vehicle Infotainment Release Details Reference HIDL HAL Trade Federation Security Test Suite Effective in 2026, to align with our trunk stable development model and ensure platform stability for the ecosystem, we will publish source code to AOSP in Q2 and Q4. For building and contributing to AOSP, use android-latest-release. The android-latest-release manifest branch will always reference the most recent release pushed to AOSP. For more information, see Changes to AOSP. AOSP Docs Automotive Integration flows Stay organized with collections Save and categorize content based on your preferences. The selection of the active VIA is done by ManageAssistActivity in CarSettings. This flow is triggered by the PackageInstaller app, as part of the Default apps section of the Settings screen. Figure 1. Default apps on the Settings screen The selected VIA is exposed to the system in two ways: As part of the RolesManager system service By the VoiceInteractionManagerService through the AssistUtils internal API. A list of candidate VIAs can be obtained using RolesManager with the role name android.app.role.ASSISTANT. Hotword triggering Android provides AlwaysOnHotwordDetector as an abstraction on top of the hardware DSP. This provides a convenient way to associate a VoiceInteractionService to a voice model for low energy always-on voice recognition. This is the most common and well known interaction flow, where the user requests to interact with a Voice Application (VA) to initiate a new conversation. Voice sessions started this way are identified with SHOW_SOURCE_ASSIST_GESTURE flag. Figure 2. Hotword triggering Legend. System services appear in light blue, VIA components in green. Note: AlwaysOnHotwordDetector relies on keyphrase enrollment, SoundTrigger HAL and hardware support. These might not be available in all devices. If hotword detection is needed in such cases, these apps might need to capture and process the audio input stream using a native library. Such implementation is outside the scope of this document. PTT triggering This applies to a long or short hardware button press. In AAOS, PTT is handled by CarInputService. In a default implementation, this service handles input events received through the Vehicle HAL, and in the particular case of voice interaction, it applies the following logic to key events: Short PTT events (KeyEvent.KEYCODE_VOICE_ASSIST) are directed to VoiceInteractionManagerService to start a new voice session. Long PTT events are first handed to projection receivers (for example, Android Auto or CarPlay), then to Bluetooth-connected devices, and finally to the local VIA app. Sessions started using this flow are identified with SHOW_SOURCE_PUSH_TO_TALK. Figure 3. PTT triggering To integrate a hardware voice-control button to AAOS, see Automotive Key Input integration. Tap-to-Talk triggering (or software button) Triggering voice interaction from system UI is done using AssistUtil. This is a hidden system API that can only be used by bundled system apps such as the system UI that enables: Interacting with VoiceInteractionManagerService to start voice control sessions. Determine which is the currently selected VIA. To dynamically present the selected VIA app, system UI can use RoleManager and follow changes on the role holder for ROLE_ASSISTANT. An example of how to implement TTT triggering can be found in CarSystemUI, AssistantButton. Figure 4. Tap-to-Talk triggering Voice assistant Tap-to-Read (TTR) In Automotive, notifications posted to the Notification Center identified as INBOX or INBOX_IN_GROUP notifications (for example, SMS messages) include a Play action button, which lets the user have notifications read aloud by the selected VIA and, optionally, to reply by voice. Figure 5. Notifications For more information on how to implement this flow, see Handle messaging commands. Launch VIA from car launcher As any other app, VIAs can include one or more launcher activities on their manifest. It is up to the app developer and the OEM accepting to pre-installing this app to decide what these activities would do. Important. In Automotive, all activities, including system activities, are subject to UX restrictions while driving. If the experience you want to enable from a launcher icon must be available while driving, either add it to the allowlist (if you are an OEM) or annotate the activity with distractionOptimized metadata. For more information, see Driver distraction guidelines. DSP and audio HAL Be sure to review the updated guidelines regarding concurrent always-on audio recording and audio HAL at Concurrent capture. Access to these APIs may have a significant impact on the performance of hotword detection as explained at Responding to hotwords. Permissions Grant system-privileged permissions Given that privileged permission cannot be granted by the user, if a VIA needs any of them, OEMs must preload their APK in their system images, and grant those permissions explicitly in their builds. See Request permissions. To do so, add a privilege allowlist dependency to your project: Android.bp android_app { ... required: ["privapp_allowlist_com.example.myvoicecontrol"], ... } Add the system-privilege allowlist permission file to the yourdata/etc/car folder: vendor/…/data/etc/car/Android.bp prebuilt_etc { name:privapp_allowlist_com.example.myvoicecontrol", sub_dir: "permissions", src: "com.example.myvoicecontrol.xml", filename_from_src: true, } vendor/…/data/etc/car/com.example.myvoicecontrol.xml <?xml version="1.0" encoding="utf-8"?> <permissions> <privapp-permissions package="com.android.car.voicecontrol"> <permission name="android.permission.MEDIA_CONTENT_CONTROL"/> </privapp-permissions> </permissions> Dangerous permissions pre-grants As indicated in Request permissions, VIA requires user consent to access certain functionalities. Some of these permissions are pregranted to the default VoiceInteractionService (see DefaultPermissionGrantPolicy.java). For more information about permissions for default handlers, see Permissions used only in default handlers. It is also possible to pre-grant permissions using the default-permissions.xml configuration file. For details on restrictions regarding pre-granting of permissions, see Section 9 in the Android Compatibility Definition Document (CDD). Important. In all cases, only the default VIA would have these permissions pre-granted. If the system has more than one VIA preloaded, the non-default VIA must explicitly request permissions to the user as part of its setup or during first use. Distribution (pre-install and deploy updates) Pre-installed VIAs must live under /product/priv-apps or /vendor/priv-apps partitions and folders (see more about partitions at Partitions overview and Build product partitions). In the second case, given that the vendor partition could be updated separately from system, apps hosted here won't be able to access @hide system APIs. Depending on the location of the pre-installed apps, updates could be performed as an OTA (see OTA updates) or through app updates from an app store. Customization As mentioned in Automotive-specific concepts, UI/UX consistency and customization are more important in automotive than in any other form factor. For maximum interoperability, the use of the AAOS Car UI library is strongly recommended. This library includes components and resources that can be integrated into automotive apps designed to be customized by OEMs. This way, a single APK can be built in a way such that its UI can be customized to the design of each car model. Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates. Last updated 2026-07-14 UTC. [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-07-14 UTC."],[],[]] Build Android repository Requirements Downloading Preview binaries Factory images Driver binaries Connect @Android on X @AndroidDev on X Android Blog Google Security Blog Platform on Google Groups Building on Google Groups Porting on Google Groups Get help Android Help Center Pixel Help Center www.android.com Google Mobile Services Stack Overflow Issue Tracker About Android Community Legal License Privacy Site feedback Manage cookies English Deutsch Español – América Latina Français Indonesia Italiano Polski Português – Brasil Tiếng Việt Türkçe Русский עברית العربيّة فارسی हिंदी বাংলা ภาษาไทย 中文 – 简体 中文 – 繁體 日本語 한국어