← Studio Toriumi

Android Automotive OS · VHAL · GAS

Reading car Android
from the bottom up.

Android Auto and Android Automotive OS share a name and nothing else. The first projects your phone onto a screen in the car. The second is the car's operating system.

Skip that distinction and every document you read afterwards will quietly stop making sense. So let's follow one thing — a vehicle signal — all the way up to the app.

Last updated 2026-09-27 · Sources listed at the end · Public information only

01Separate the two first

More people conflate these than you would expect.

Android AutoAndroid Automotive OS (AAOS)
Runs onYour phoneThe car's head unit
Needs a phone?Yes — plug in and projectNo
Vehicle data?Practically noneYes — HVAC, gear, EV range …
App storePlay on the phonePlay in the car (GAS vehicles)
Who builds itApp developersOEMs / Tier 1s / app developers

AAOS is a platform, built on AOSP. An OEM ships it in a car and builds its own system apps on top. That is why "writing an Android app" and "building a car that runs Android" end up described with the same words.

02The layers — and who owns which

The boundaries in this diagram tend to be organisational boundaries too.

App layer CarLauncher / CarSettings / Car System UI · GAS apps · third-party apps Car framework layer android.car — CarPropertyManager / CarAudioManager / CarUxRestrictionsManager Android framework layer ActivityManager / AudioFlinger — ordinary AOSP VHAL (Vehicle HAL) Vehicle signals become Vehicle Properties. This is the boundary Hardware / ECU / SoC CAN and other in-vehicle networks owned by the OEM owned by the Tier 1 ↑ From the app, the vehicle looks like a set of properties ↓ The actual CAN encoding stays hidden below the VHAL

The AAOS stack. The two blue-outlined layers are the automotive-specific ones

In a published account of Honda's AAOS work on TECH PLAY, the split is described exactly this way: the OEM takes the layers above the HAL, while the hardware domain stays with the Tier 1. On the audio side, the article describes AudioFlinger at the centre with CarAudioManager added alongside it, plus the existing AudioFocus mechanism and the native AAudio path.

03How a vehicle signal reaches your app

This is the part that makes car Android car Android.

Apps never read CAN frames. The VHAL converts vehicle signals into "Vehicle Properties", a uniform shape, and apps read and write those. That is what keeps differences between models and buses from leaking into app code.

The entry point is the Car class; you pull the managers out of it.

// Get CarPropertyManager from a Car instance
Car car = Car.createCar(context);
CarPropertyManager mgr =
    (CarPropertyManager) car.getCarManager(Car.PROPERTY_SERVICE);

// One-shot read — the model name, for example
String model = mgr.getProperty(
    String.class, VehiclePropertyIds.INFO_MODEL, 0).getValue();

// Subscribe to changes — the current gear, for example
mgr.registerCallback(callback,
    VehiclePropertyIds.CURRENT_GEAR,
    CarPropertyManager.SENSOR_RATE_ONCHANGE);

Terms worth knowing

What changed in Android 14

From Android 14, system property definitions were split out of the VHAL interface into the AIDL interface android.hardware.automotive.vehicle.property. The CarPropertyManager and CarPropertyService stacks also gained asynchronous get/set APIs and APIs supporting a fake VHAL mode in Car Service.

That fake VHAL is the practical way in: you can exercise property reads and writes without a vehicle in front of you.

03bThe car-specific pieces, one at a time

Reading properties (section 03) covers maybe half of automotive work. Here are the things AAOS has and a phone does not, in roughly the order you meet them when you build something.

1. Inside the VHAL — every property comes with a config

Each VHAL property has a config alongside its value, and that config decides most of how your app behaves.

FieldValuesWhat it means
accessREAD / WRITE / READ_WRITERead-only or writable. Speed is read-only; the HVAC target temperature is read-write
changeModeSTATIC / ON_CHANGE / CONTINUOUSSTATIC never changes after boot (the model name). ON_CHANGE reports only when the value changes (the gear). CONTINUOUS changes all the time and is reported at a chosen rate (speed)
areaIdGLOBAL / seat / window / door / mirror / wheelThe same "seat heater" is a separate area for the driver and the front passenger
statusAVAILABLE / UNAVAILABLE / ERRORWhen there is no value, you get this status instead

A property ID is a set of bits. It is a 32-bit value built from "group (SYSTEM or VENDOR) | area type | value type | number". OEM-specific properties live in the VENDOR group.

// Building an OEM property ID (example)
VehiclePropertyGroup.VENDOR   // 0x20000000
| VehicleArea.GLOBAL          // 0x01000000
| VehiclePropertyType.INT32   // 0x00400000
| 0x0101                      // a running number inside that OEM

Permissions are set per property. Some can be read by any app (the model, the gear), some need a runtime grant from the user (speed), and some can only be held by the OEM's system apps (controlling the HVAC). Day 3 of section 07b exists so you feel these steps yourself.

Since Android 13 the VHAL is AIDL (HIDL before that). AOSP ships a reference implementation in which a fake hardware layer (FakeVehicleHardware) reads property definitions from JSON. That is what the emulator's fake VHAL really is. An OEM replaces this layer with code that talks to its own vehicle network.

2. Restrictions while driving — the screen follows the driving state

AAOS has driving states (PARKED / IDLING / MOVING) and a set of UX restrictions for each. The OEM configures the combinations, for example "no video and no setup while idling, fully restricted while moving".

// Declare that a screen may stay up while driving (AndroidManifest.xml)
<activity android:name=".DistractionOptimizedMainActivity" ...>
    <meta-data android:name="distractionOptimized" android:value="true"/>
</activity>

Screens without this declaration are blocked while driving. Screens that declare it still have to shrink to the restrictions delivered by CarUxRestrictionsManager (a maximum string length, no keyboard, no video and so on). "Usable while driving" means a screen that cuts itself down to fit the restrictions.

3. Audio — the cabin is split into zones

A phone basically has one output. A car has several: driver, rear seats, external speakers. AAOS splits the cabin into audio zones and gives each zone volume groups and output devices. The OEM writes that mapping in car_audio_configuration.xml.

The Honda talk mentioned in section 02 spends time on AudioFlinger and CarAudioManager because this layer is designed differently in every car.

4. Screens and occupants — who is using which display

5. Power and cameras — turning the car off is not the end

6. How OEMs change the look — without rewriting the apps

OEMs restyle the screens to match their brand, but they do not rewrite the AOSP app code every time. Apps built from Car UI library components (toolbar, lists and so on) can have colors, sizes and layouts replaced from outside with RRO (Runtime Resource Overlay). That is how "a different look in every model, the same app underneath" is made.

In short

04GAS — what "a car with Google in it" actually means

AAOS on its own ships with neither Google Maps nor Play.

GAS (Google Automotive Services) is the set of Google services layered on top of AAOS — Google Maps, Google Play, the assistant. AAOS is open source; GAS is licensed by the OEM. That is the dividing line.

A car advertised as "Google built-in" is a car carrying GAS. Being able to install apps from the Play Store in the car is likewise limited to vehicles from GAS partners.

Shipping GAS means passing certification

The product has to meet Google's compatibility, performance and security requirements, which brings a certification campaign with it. Four suites come up repeatedly:

Google-accredited third-party labs exist for this work — HARMAN's Automotive Engineering Services, for instance, has announced accreditation for AAOS and GAS certification testing.

05Carma — existing apps, but only while parked

A term with very little written about it, so it is worth stating plainly.

Carma is the name of the Car Ready Mobile Apps program: Google's route for bringing existing mobile apps onto AAOS large screens without much rework. Its shape:

The trade is explicit: give up use while driving, and the porting cost drops to near zero. That is a different goal from building a driving-safe app from scratch with the Car App Library.

What you wantWhat you use
Run an existing app on the car's screen while parkedCarma (Car Ready Mobile Apps)
Build an app usable while drivingandroidx.car.app — Car App Library templates
Read or write vehicle dataandroid.car / CarPropertyManager

How an app joins the program. Google's published criteria, in short:

Announced at I/O in May 2024, the program started rolling apps out to cars with Google built-in in early 2025. If a search for "CaRMA" led you here: it is the same program — Carma, CaRMA and Car Ready Mobile Apps all refer to it.

06What is moving in 2026

The specification is in motion, so check the date on anything you read.

Headlines about Android Automotive OS, refreshed automatically every day (needs JavaScript).

The assistant is becoming Gemini

In-car voice assistance is migrating from Google Assistant to Gemini. A rollout to roughly four million GM vehicles was reported in April 2026, and Google has said the rollout extends from Android Auto vehicles to Google built-in vehicles — names mentioned include the Lincoln Nautilus, Honda Passport, and select Chevrolet, Cadillac, GMC, Acura and Volvo models.

In Google built-in cars, Gemini sits closer to vehicle systems: infotainment settings, app state, EV information, owner's-manual content, and the car's own UX restrictions.

AAOS is expanding into SDV

Google has announced "Android Automotive OS for Software Defined Vehicles", slated for release in late 2026 as an open-source program via AOSP. The scope moves beyond infotainment toward vehicle software generally.

07If you are starting out

  1. Keep the terms apart. Android Auto, AAOS, GAS and Carma are four different things. Reading with them merged is exhausting
  2. Know which layer you are talking about. Simply being able to say "above or below the VHAL" changes the precision of a discussion
  3. Start with the emulator and the fake VHAL. You can exercise properties without a car
  4. Check dates. 2026 is a year of movement. An article that assumes Assistant may already be stale
  5. Verify whether OEM-specific material is public. Partner-facing requirements are frequently under NDA; do not blend them with published articles

Setting up the AAOS emulator (no car required)

Everything below the app layer can be exercised on a laptop. The steps, as of Android Studio in 2026:

  1. Device Manager → Create Virtual Device → category "Automotive". Pick one of the Automotive profiles (for example the 1024p or 1408p landscape units). The system image tab for Automotive lists AOSP "Automotive" images and, for recent API levels, "Automotive with Play Store" images that include the GAS apps.
  2. OEM images are separate downloads. Several car makers (Volvo and Polestar, among others) publish branded emulator images through their own SDK add-on sites so you can see their launcher, cluster layout and screen sizes. They are not in the default image list.
  3. The emulator ships with a fake VHAL. Open Extended controls → Car data to change speed, gear, ignition state and sensor values by hand, and Car rotary to test rotary-controller navigation. For scripted tests, adb shell cmd car_service inject-vhal-event <propertyId> <value> injects a property change; adb shell cmd car_service help lists the rest.
  4. Inspect state with adb shell dumpsys car_service, and read properties from your app through Car.createCar(context).getCarManager(Car.PROPERTY_SERVICE) — the CarPropertyManager from section 03.
  5. Do not confuse it with the Desktop Head Unit. The DHU is the Android Auto (projection) test tool. Car App Library apps run on both, but vehicle properties and GAS behaviour only exist on the AAOS emulator.

Certification-stage testing (CTS-for-cars, GAS requirements) still needs an OEM bench or an accredited lab, but nothing in the first months of development requires a vehicle.

If you want to work on AAOS rather than just read about it, the employers, skills per layer, pay ranges and where the jobs are posted are covered in Android Automotive OS engineer — jobs, salary and how to find AAOS work.

Where this page stands

Everything here comes from published primary documentation and public articles. It contains no confidential information about any specific vehicle, program or company. Specifications change — verify against current AOSP documentation before you implement.

07bThe first week — exercises without a car

Assuming the setup from section 07, one or two hours a day. The goal for day seven: explain the layer structure in your own words.

  1. Day 1 — separate them. Re-read section 01, then run the Android Auto DHU and the AAOS emulator side by side with the same Car App Library sample. Write three lines on what is the same and what differs.
  2. Day 2 — read a signal. On the emulator, read vehicle speed (PERF_VEHICLE_SPEED) through CarPropertyManager and show it on screen. Change the value in Extended controls → Car data and confirm the callback fires.
  3. Day 3 — hit a permission wall. Pick a property that needs a permission (fuel level, odometer) and deliberately trigger a SecurityException. Check in the AOSP list which permissions are system-app only, and write down what a normal app cannot see.
  4. Day 4 — watch UI disappear while driving. With Car App Library templates, build one screen allowed only when parked and one allowed while driving, put the emulator in D and watch. The Carma constraints from section 05 stop being abstract.
  5. Day 5 — read the GAS requirements. Read Google Play's car app quality guidelines start to finish and mark every item your template app would fail. A reading-only day, and the one most people skip.
  6. Day 6 — look under the floor. Copy out the VHAL–CarService diagram from the AOSP automotive docs and match it against adb shell dumpsys car_service. Somewhere the diagrams from sections 02–03 line up with a real log.
  7. Day 7 — write. Turn days 1–6 into an explanation for someone else (borrow this page's structure if you like). The parts you cannot write are what to study next.

Twelve terms worth memorizing

VHAL (vehicle HAL; turns CAN signals into properties) / HAL (hardware abstraction layer) / CarService (the system service that hands out properties) / CarPropertyManager (the app-side API for reading them) / GAS (Google Automotive Services: Maps, Play, Assistant and friends) / GMS (the phone-side equivalent) / Car App Library (template-based UI for cars) / DHU (Desktop Head Unit, the Android Auto test tool) / Carma (Car Ready Mobile Apps: existing apps allowed while parked) / OEM (the car maker) / Tier1 (the supplier that builds units for the maker) / CTS / ATS (compatibility and automotive certification test suites)

Books worth reading

[PR] Links go to Amazon.co.jp search results; this site may earn a referral fee. Check editions and stock on the store.

08Frequently asked

Short answers to the questions that bring most readers to this page.

What is the difference between Android Auto and Android Automotive OS?
Android Auto projects a phone's apps onto the car's screen; the phone does the work. Android Automotive OS (AAOS) is Android running on the vehicle's own hardware, with no phone required. They share the Car App Library for templated apps, but they are different platforms with different distribution and certification.
Is there an Android Automotive OS emulator?
Yes. Android Studio's Device Manager has an Automotive category with AOSP and "Automotive with Play Store" system images, plus a fake vehicle HAL you control from Extended controls → Car data. Some OEMs publish their own branded emulator images as SDK add-ons. See section 07 for the setup steps.
What is Car Ready Mobile Apps (CaRMA)?
Google's program for distributing existing, large-screen-compatible mobile apps to cars with Google built-in, for use while parked, with little or no car-specific development. Launch categories were video, games and browsers. Apps opt in through the Play Console and must meet the Car ready quality tier.
Do I need a car to start developing for AAOS?
No. The emulator and its fake VHAL cover app development and vehicle-property testing. A vehicle, OEM bench or accredited lab only becomes necessary for OEM integration and GAS certification.
What does GAS mean in the context of AAOS?
Google Automotive Services — the licensed bundle (Play, Maps, the assistant, and related services) that an OEM adds on top of AOSP Automotive. "A car with Google built-in" means AAOS plus GAS. AOSP Automotive without GAS is also common, especially outside Google's markets.

09Sources