
Open-source Android Auto phone-side implementation with protocol reverse engineering, TLS mutual authentication, H.264 video projection, touch input injection, and sensor data streaming over USB AOA.
An open-source implementation of the Android Auto phone-side app. This app runs on your phone and projects to a car's head unit over USB, replacing Google's proprietary com.google.android.projection.gearhead APK.
This project is in early development. The protocol handshake and video projection are working with a real head unit. The phone screen is successfully displayed on the car's head unit for several seconds before disconnecting (video stability is being improved).
USE AT YOUR OWN RISK. This software is provided "as is", without warranty of any kind.
USB Plug-in → MainActivity → ProjectionService
↓
UsbAoaTransport (USB AOA accessory mode)
↓
MessageFramer (16KB frame fragmentation)
↓
InBandTls (TLSv1.2 via SSLEngine)
↓
ProtocolEngine (AAP state machine)
↓
┌───────────┼───────────┐
Video Input Audio
(H.264) (touch/keys) (PCM)
av_channel in SERVICE_DISCOVERY_RESPONSE as video and the second as audio. This works with the car head unit (channel 1 = video) but fails with openauto (channel 4 = audio, not video). Fix: parse the stream_type field inside av_channel to distinguish VIDEO(3) from AUDIO(1).02:00:00:00:00:00). Workaround: write the real address to a config file via adb shell "echo $(adb shell settings get secure bluetooth_address) > /sdcard/Android/data/org.openandroidauto/files/bt_address.txt". Need a UI settings screen to let the user enter their BT MAC manually.Test pattern (color bars) at 800x480, I-frame interval 1 second: