Create your own lunch target
Your own product flavour that builds, boots in the emulator, and gives every later tutorial somewhere to put its files.
1–2 hours (plus one full build)
Tutorials
Android Automotive is built to be modified — but the modification points are spread across partitions, build files and policy languages that are documented separately, if at all. This is the map, followed by step-by-step tutorials for each one.
15 of these have a full tutorial below. The rest are listed so the map is complete — knowing a surface exists is most of the problem.
| Surface | What it changes | Where it lives | Tutorial |
|---|---|---|---|
| Product / lunch target | A build flavour of your own | device/<oem>/<product>/ | Open |
| Board configuration | Partitions, architecture, AVB | BoardConfig.mk | Open |
| SELinux policy | Domains, types, allow rules | device/<oem>/<product>/sepolicy/ | Open |
| init service | A native daemon started at boot | *.rc + cc_binary | Open |
| Vehicle HAL | The vehicle network bridge | hardware/<oem>/automotive/vehicle/ | Open |
| Vehicle properties | Vendor-defined vehicle state | VHAL config + car-lib | Open |
| AIDL HAL | Your own vendor interface | hardware/interfaces/ or vendor/ | Open |
| Car subservice | A service inside Car Service | packages/services/Car/ | Open |
| System service | A service inside system_server | frameworks/base/services/ | Open |
| Permissions | OEM permissions and allowlists | framework overlay + privapp XML | Open |
| System app | Privileged, platform-signed APK | packages/apps/ or vendor/ | Open |
| RRO | Runtime theming without forking | An overlay APK | Open |
| CarSystemUI | System bars, HVAC panel, keyguard | packages/apps/Car/SystemUI + RRO | Open |
| Audio topology | Zones, buses, volume groups | car_audio_configuration.xml | Open |
| Boot animation | What the driver sees first | bootanimation.zip | Open |
| Framework resources | Build-time config overrides | DEVICE_PACKAGE_OVERLAYS | — |
| Launcher | The app grid and home screen | packages/apps/Car/Launcher | — |
| Car Settings | Settings entries and preferences | packages/apps/Car/Settings | — |
| Key layout / input | Steering wheel and rotary mapping | *.kl and *.idc files | — |
| Locale & region | Languages, units, regional behaviour | Product config + resources | — |
| Kernel & device tree | Drivers, display ports, CAN interfaces | kernel/ — outside AOSP | — |
| OTA packaging | How updates are built and signed | ota_from_target_files | — |
Your own product target, your own SELinux domain, your own native daemon — the base everything else is built on.
Your own product flavour that builds, boots in the emulator, and gives every later tutorial somewhere to put its files.
1–2 hours (plus one full build)
A vendor service written in C++, built with Soong, started by init at boot — and the SELinux denial you will hit immediately.
1–2 hours
Give your daemon a domain, label its files, and grant exactly what it needs — then prove the denial is gone.
1–2 hours
A vendor VHAL from an empty directory, custom properties end to end, and your own AIDL HAL when properties are the wrong shape.
A vendor VHAL that registers as IVehicle, serves its own property configs, and publishes changes — reusing AOSP's binder plumbing instead of reimplementing it.
3–5 hours
A vendor property from ID allocation to an app reading it — config, permission, SEPolicy, car-lib constant and the six places it fails silently.
2–4 hours
When vehicle properties are the wrong shape — a versioned vendor interface with real RPC, its own VINTF entry and its own SELinux domain.
2–3 hours
Add a subservice to Car Service, a service to system_server, and the permission that guards it.
An OEM service inside com.android.car, with its own AIDL, its own manager class in car-lib, and the threading rules that keep the platform booting.
3–4 hours
A framework service outside Car Service — SystemService lifecycle, boot phases, and when this is the right layer rather than a Car subservice.
2–3 hours
A signature-level permission of your own — declared in the framework, allowlisted for a privileged app, enforced at every entry point, and verified on device.
1–2 hours
A privileged system app, runtime resource overlays, and modifying CarSystemUI without forking it.
An APK built into the image, signed with the platform key, holding a signature permission and using hidden APIs — and how to iterate on it without reflashing.
2–3 hours
Restyle CarSystemUI and the Car UI Library from a separate APK — no forking, no rebuild, and a thirty-second iteration loop.
1–2 hours
Add a button to the system bar, change which bars exist, and know exactly when an overlay stops being enough and a fork begins.
2–3 hours
Audio topology, boot animation and the settings surface — the configuration that makes a build an OEM’s.
Declare output devices in the audio HAL, group them into zones and volume groups, and prove every context routes somewhere.
2–3 hours
The OEM's first impression — a correctly packaged bootanimation.zip, sized for the real display, that does not add a second to boot.
1 hour