Overview
Android Automotive OS (AAOS) extends the standard Android display architecture to handle the complex, multi-screen topologies found in modern vehicles. Unlike a smartphone with one primary screen, a car may feature a center console (IVI: In-Vehicle Infotainment), a digital instrument cluster behind the steering wheel, passenger displays, and rear-seat entertainment screens.
Managing these disparate screens requires stringent safety, security, and performance guarantees, ensuring that critical driving information is never obstructed or delayed by standard infotainment apps.
Multi-Display in the AAOS Context
In AAOS, the vehicle hardware exposes multiple physical displays through the Hardware Composer (HWC). DisplayManagerService maps these to logical displays, but AAOS introduces strict policies on what can be shown on which display.
- Primary Display (Display 0): Typically the center IVI screen. It hosts the main launcher, navigation, media controls, and HVAC (Heating, Ventilation, and Air Conditioning) controls.
- Occupant Zones: AAOS 11+ introduced
CarOccupantZoneManager. This service maps physical displays to specific seats in the car (e.g., Driver, Front Passenger, Rear Left). This ensures audio routing and UI interactions remain isolated per passenger.
Instrument Cluster Display
The digital Instrument Cluster is the most critical display. It must show the speedometer, warning lights (tell-tales), and gear selection with near-zero latency and high reliability.
Architectural Constraints
Because Android is a complex OS subject to potential UI hangs or reboots, safety-critical cluster elements are often handled by an RTOS (Real-Time Operating System) like QNX or a hypervisor running alongside Android.
Android is typically allowed to render a specific "safe zone" on the cluster display, often used for turn-by-turn navigation arrows or media metadata.
Cluster Rendering Flow
- Virtual Display: Android creates a virtual display configured with the resolution of the cluster's allowable rendering zone.
- Navigation App: A mapping app (like Google Maps) draws its secondary UI (turn arrows, distance) onto this virtual display.
- Hardware Compositor / Hypervisor: The output of Android's virtual display is shared (often via a hardware-backed
GraphicBuffer) with the safety-critical RTOS. The RTOS composites Android's layer beneath the safety-critical tell-tales and speedometer overlays before pushing the final frame to the physical panel.
Rear Seat Entertainment (RSE)
Rear Seat Entertainment screens leverage the CarOccupantZoneManager.
- Each RSE screen is an independent logical display.
ActivityManagerenforces that activities launched on a rear-seat display run in their own context.- Audio focus and routing are strictly partitioned. Media playing on the Rear Left screen is routed to the Rear Left headphone jack or Bluetooth channel, completely separate from the driver's IVI audio.
ClusterHomeManager API
To manage the content displayed on the instrument cluster, AAOS provides the ClusterHomeManager API. This allows system apps to communicate with the cluster hardware.
Key Capabilities:
- State Management: Notifies the Android system when the cluster display is ready to receive content.
- Visibility Control: Determines if the cluster is currently showing navigation or media.
- Input Handling: Routes steering wheel button inputs (like D-Pad controls) directly to the activity currently in focus on the cluster display.
Java API Usage Example
System apps interact with the cluster via the Car API:
Car car = Car.createCar(context);
ClusterHomeManager clusterManager = (ClusterHomeManager) car.getCarManager(Car.CLUSTER_HOME_SERVICE);
// Register a callback to listen for cluster state changes
clusterManager.registerClusterStateListener(commandExecutor, new ClusterStateListener() {
@Override
public void onClusterStateChanged(ClusterState state, int changes) {
if ((changes & ClusterHomeManager.CONFIG_DISPLAY_UNBOUND) != 0) {
// The cluster display is available.
// Launch the navigation presentation activity.
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(state.getDisplayId());
startActivity(navigationIntent, options.toBundle());
}
}
});
To view current AAOS occupant zones and display mappings via ADB:
adb shell dumpsys car_service --services CarOccupantZoneService
This dumps the internal state showing which displays and audio zones are mapped to which passenger seats.