Infotainment, HMI & AAOS

AAOS Application Integration Guide

A practical engineering model for integrating applications into Android Automotive OS, connecting vehicle-facing behavior through Car APIs and Vehicle HAL, and separating application logic from cockpit presentation.

Engineering model

How Infotainment, HMI & AAOS fits together

AAOS application integration is the coordination of application behavior, platform services, vehicle-facing interfaces, and user-interface technology inside an infotainment system. An application may consume Car APIs, depend on Vehicle HAL data through the AAOS platform, or operate as a system app when deeper platform integration is required. The main engineering challenge is keeping these boundaries explicit so that state, availability, lifecycle behavior, and presentation can be tested independently.

Core concepts

The parts of a practical Infotainment, HMI & AAOS setup

01

AAOS application boundary

AAOS provides the runtime and platform context in which an application operates. Defining what belongs in the application, what belongs in platform integration, and what belongs in the interface prevents vehicle-specific behavior from spreading through the whole design.

02

Vehicle-facing access

Car APIs provide the application-facing model for vehicle functions, while Vehicle HAL connects those vehicle properties to the surrounding vehicle networks and services. The distinction matters because application behavior depends on both API semantics and the availability of the underlying property.

03

Platform integration level

A normal application and a system app have different integration responsibilities. Choosing the least privileged boundary that satisfies the function reduces coupling to AOSP implementation details and makes behavior easier to test.

04

Presentation separation

Qt and QML provide an alternative presentation stack for graphical and embedded applications. Keeping presentation state separate from vehicle-facing state allows the same behavior to be reasoned about without tying it to a particular cockpit interface.

05

Application and projection coexistence

AAOS applications operate alongside Android Auto and Apple CarPlay. Integration must define which experience owns a display or function at a given time and how the application behaves when another experience is active.

Establish the integration boundary

Start by identifying which behavior is application logic, which behavior is supplied by AAOS, and which behavior depends on vehicle-facing services.

An AAOS application should have a clear boundary around its user-facing behavior and its use of Car APIs. Vehicle-specific data should enter through a defined interface rather than being interpreted independently in every screen or feature. If the application requires behavior unavailable through its normal interface, evaluate whether a system app or an AOSP-level change is actually necessary instead of assuming that deeper integration is the default.

  • Treat Car APIs as the application-facing contract for vehicle-related behavior.
  • Keep conversion, validation, and availability handling outside presentation code.
  • Document which behavior depends on Vehicle HAL data and which behavior remains available without it.
  • Choose a system app boundary only when the required integration cannot be implemented at the ordinary application boundary.

Trace vehicle data through the stack

Reason from the application request or observation back through Car APIs and Vehicle HAL rather than treating a missing value as an application-only defect.

  1. 01

    Define the application expectation

    State what the application needs to observe or change, including the expected value, update behavior, and behavior when the value is unavailable.

  2. 02

    Check the Car APIs boundary

    Confirm that the application is using the intended Car APIs and that its state model distinguishes a valid value from an unavailable or not-yet-updated value.

  3. 03

    Inspect the Vehicle HAL dependency

    Determine whether the corresponding vehicle property is supplied through Vehicle HAL and whether the integration exposes the required updates to AAOS.

  4. 04

    Compare observed and expected transitions

    Exercise changes in a controlled sequence and compare application state, Car APIs behavior, and Vehicle HAL updates instead of checking only the final screen.

  5. 05

    Localize the fault domain

    Use the first boundary where expected behavior diverges to separate application logic, platform integration, and vehicle-facing availability concerns.

LayerPrimary responsibilityUseful diagnostic question
ApplicationInterpret data and present behaviorDid the application model the value and unavailable states correctly?
Car APIsExpose vehicle-facing behavior to the applicationDoes the application-facing interface report the expected state and updates?
Vehicle HALConnect AAOS vehicle properties to vehicle networks and servicesIs the required property present and changing as expected?
User interfaceRender current application stateDoes the interface reflect state transitions without becoming the source of truth?

Choose an application and UI strategy

The implementation language and presentation framework should follow the boundary being integrated, not obscure it.

Kotlin is suited to AAOS application code, while C++ is relevant where systems or embedded application behavior requires it. Qt and QML provide a separate route for graphical and embedded interfaces. The important design decision is not merely the language: it is whether vehicle-facing state, application state, and rendered state remain distinguishable when the interface changes.

  • Use Kotlin when the application is primarily implemented within the AAOS application model.
  • Use C++ when the application or embedded component needs systems-oriented behavior already defined for that boundary.
  • Use Qt and QML when a declarative graphical interface is part of the selected integration architecture.
  • Keep vehicle-facing access behind a small application-facing component regardless of the presentation technology.
  • Make unavailable, stale, and changing values explicit in the application state model.

Integrate with AOSP and system app boundaries

Deeper platform integration can solve real requirements, but it also increases coupling and expands the surface that must be tested.

AOSP is the platform codebase used as a basis for device systems. When an application must operate as a system app or requires platform behavior beyond ordinary Car APIs, the change should be isolated and documented as a platform dependency. Keep the application-facing contract stable where possible so that application behavior can be tested without requiring every test to exercise the full AOSP integration.

  1. 01

    State the missing capability

    Describe the behavior that cannot be implemented through the existing application boundary or Car APIs.

  2. 02

    Locate the narrowest platform boundary

    Identify whether the requirement belongs in the application, a system app, Vehicle HAL, or another AOSP integration point.

  3. 03

    Define the observable contract

    Specify inputs, outputs, state transitions, and unavailable behavior at the boundary before changing implementation details.

  4. 04

    Exercise both sides of the boundary

    Test the application with controlled boundary behavior and test the platform integration against expected vehicle-facing transitions.

Handle coexistence with Android Auto and Apple CarPlay

Projection experiences add another integration condition: the application may not always own the visible cockpit experience.

Android Auto and Apple CarPlay should be treated as separate experiences that can affect which interface is visible or active. The application should define its behavior when focus changes, when its interface is not visible, and when vehicle-facing state continues to change while another experience is active. These cases belong in the application state model rather than being handled only as screen-level events.

ConditionApplication concernExpected engineering treatment
Application visibleCurrent state is presented to the userRender the latest valid state and make unavailable state explicit.
Android Auto activeThe application may not own the visible experienceKeep internal state coherent and avoid assuming that visibility means continued user interaction.
Apple CarPlay activeThe application may coexist with a different visible experienceDefine behavior for loss of visibility and restoration without resetting unrelated state.
Vehicle value unavailableThe application cannot rely on a current vehicle valueRepresent unavailability directly and avoid presenting an inferred value as current.

Test and debug the integration chain

Testing should prove behavior at each boundary, not only confirm that an application launches or a screen appears.

  1. 01

    Test application state independently

    Exercise valid, changing, and unavailable values without depending on a complete vehicle integration.

  2. 02

    Test Car APIs interactions

    Verify that application requests and observations use the intended Car APIs behavior and preserve the distinction between current and unavailable state.

  3. 03

    Test Vehicle HAL transitions

    Exercise the vehicle-facing property path and compare updates with the application-facing result.

  4. 04

    Test lifecycle and visibility changes

    Repeat the same state cases when the application becomes visible, loses visibility, and resumes alongside Android Auto or Apple CarPlay.

  5. 05

    Test the selected UI path

    Confirm that Qt and QML or the chosen AAOS interface renders transitions consistently without owning vehicle-data interpretation.

  6. 06

    Debug from the earliest mismatch

    Record the first layer that diverges from the expected sequence; avoid changing presentation code when the mismatch originates in Vehicle HAL or Car APIs.

  • Test steady state and transitions; a correct final value can hide a missed update.
  • Test unavailable behavior explicitly rather than treating it as an exceptional screen condition.
  • Separate application defects from Vehicle HAL availability and Car APIs behavior.
  • Repeat tests across ordinary application and system app boundaries when both are part of the architecture.

Review integration readiness

A compact review can expose architectural gaps before they become difficult to diagnose in the full cockpit system.

Review areaEvidence to inspectFailure signal
Boundary definitionA stated path between application, Car APIs, and Vehicle HALThe same vehicle behavior is implemented in multiple layers.
State modelDefined valid, changing, and unavailable statesThe interface displays a default value as if it were current.
Platform dependencyA documented reason for AOSP or system app integrationPlatform access is used without a specific missing capability.
Presentation separationUI code consumes application state through a defined boundaryQML or another interface directly determines vehicle-data validity.
Coexistence behaviorCases for Android Auto and Apple CarPlay are exercisedVisibility changes reset or corrupt unrelated application state.
Diagnostic sequenceExpected transitions are recorded across layersDebugging starts with screen changes before checking the first failing boundary.

Engineering pitfalls

Common mistakes

  1. Treating Vehicle HAL as an application API

    Vehicle HAL connects AAOS vehicle properties to vehicle networks and services; it is not automatically the complete application-facing contract. The application should reason through Car APIs and verify how the property is exposed.

  2. Using a default value for unavailable data

    A default can look like a valid vehicle value. Model unavailability explicitly so the interface does not present an assumption as current state.

  3. Making the UI the state owner

    When QML or another presentation layer owns vehicle-data interpretation, state becomes duplicated and difficult to test. Keep interpretation in application logic and let the interface render it.

  4. Assuming a system app solves integration

    A system app changes the integration boundary but does not define the required behavior. First identify the missing capability and its observable contract.

  5. Testing only the final screen

    A correct final screen can hide missed updates, incorrect lifecycle handling, or a broken Vehicle HAL path. Test transitions across the application, Car APIs, and Vehicle HAL boundaries.

  6. Ignoring projection coexistence

    Android Auto and Apple CarPlay can change which experience is visible. Applications need explicit behavior for visibility changes and restoration rather than assuming continuous ownership of the cockpit.

FAQ

Infotainment, HMI & AAOS questions

What is the practical difference between Car APIs and Vehicle HAL?
Car APIs are the application-facing way to use vehicle-related behavior in AAOS. Vehicle HAL connects AAOS vehicle properties to vehicle networks and services, so a problem may exist in the application, the Car APIs path, or the underlying Vehicle HAL availability.
When should an AAOS application be a system app?
Use a system app boundary only when the required behavior cannot be implemented through the ordinary application boundary and available Car APIs. The decision should follow a specific missing capability, not a general assumption that deeper access is better.
How should an application represent an unavailable vehicle value?
Represent unavailability as an explicit application state and define how the interface displays it. Do not replace it with a default that could be mistaken for a current vehicle value.
Can Qt and QML be used with AAOS application integration?
Qt and QML can form the graphical and embedded presentation path when that architecture is selected. The application should still keep vehicle-facing access and state interpretation behind a defined boundary rather than placing them in QML.
How should Android Auto and Apple CarPlay affect application design?
Treat them as coexistence conditions that can change which experience is visible or active. Define behavior for loss of visibility, continued vehicle-state changes, and restoration without assuming that the application always owns the cockpit experience.

Engineering support

Discuss an Infotainment, HMI & AAOS Project

Need a focused AAOS integration review, implementation plan, or debugging workflow? An independent automotive software engineer can help structure the application, Car APIs, Vehicle HAL, and UI boundaries around the behavior your team needs to test.