shilapi/xcertplay
Carplay on Android head unit using onboard mfi chip or via CH341.
What is xcertplay?
xcertplay is an Android application that turns a phone (or an Android‑based head‑unit) into a CarPlay receiver – the system that lets an iPhone display its navigation, music, messages, and voice‑assistant UI on a car’s infotainment screen. The app runs on regular Android devices as well as on Android Automotive OS, and it can talk to the Apple‑required MFi authentication chip either through a cheap CH341‑based I²C bridge board or directly via the device’s native I²C controller.
Why it matters
CarPlay is a proprietary Apple technology that normally needs a licensed hardware module (the MFi chip) to authenticate the iPhone. Building a low‑cost, open‑source receiver lets hobbyists and car‑modders replace expensive factory head‑units, experiment with custom Android‑based infotainment systems, or add CarPlay to vehicles that didn’t ship with it.
Key capabilities (as described in the README)
| Feature | What it does |
|---|---|
| CarPlay host | Provides the UI and logic for CarPlay on Android and Android Automotive OS. |
| MFi chip support | Works with an MFi chip connected via a CH341 I²C bridge board or directly via /dev/i2c‑N. |
| Local & remote authentication | You can load a DER‑encoded certificate (.p7b) and private key (.pk8) from Android storage, or use a remote service that mimics an MFi chip (Remote MFi) with optional Bearer token authentication. |
| Wired & wireless CarPlay | Handles both USB‑based (wired) and Wi‑Fi‑based (wireless) CarPlay connections. |
| CarPlay Ultra trigger | Can provoke the “CarPlay Ultra” prompt on an iPhone (the protocol stack is still experimental). |
| Multi‑channel audio mapping | Routes voice, navigation, and music streams to the correct Android audio channels. |
| Dynamic UI resizing | Detects a change in screen resolution and automatically re‑handshakes with the iPhone. |
| Vehicle location reporting | Sends the head‑unit’s GPS location to the iPhone. |
| Android 9+ support | Runs on devices with API 28 or newer (including Android Automotive). |
How you would use it
- Pair the iPhone with the Android head‑unit via Bluetooth.
- Open the app, tap the Settings button (or swipe with three fingers) and configure:
- Connection type (CH341 bridge vs. native I²C).
- Whether you’ll use local certificate files or a remote MFi service.
- Optional gestures for quick access to the Settings page.
- Press Save & Reconnect.
- Connect the MFi chip (or ensure the remote service is reachable).
- The app negotiates CarPlay; once the iPhone shows the CarPlay UI, you can use navigation, music, Siri, etc., through the Android head‑unit.
Project layout (quick glance)
| Directory | Role |
|---|---|
common/ |
Shared UI, settings, persistence, and resources used by both mobile and automotive builds. |
mobile/ |
The standard Android (phone/tablet) build. |
automotive/ |
Build for Android Automotive OS with extra audio channel handling. |
shared/ |
Core library implementing the CarPlay protocol, I²C handling, CH341 bridge code, iAP2, NCM, VPN, AirPlay, and media pipelines. |
Building the app
You need JDK 17+, Android SDK Platform 37, and the Android NDK. The README gives exact Gradle commands for Windows PowerShell and for macOS/Linux, producing debug or unsigned release APKs.
Who might be interested?
- Car‑modders who want to add CarPlay to aftermarket head‑units.
- Developers experimenting with the CarPlay protocol or building custom Android‑based infotainment platforms.
- Researchers looking at cross‑platform vehicle‑to‑phone integration without buying expensive licensed hardware.
License
The code is released under GPL‑3.0, meaning you can use, modify, and redistribute it as long as you keep the same license for derivative works.
All information above is taken directly from the repository’s README; no external assumptions have been added.
Related
- Project
- Project
- Dispatch
- Project
- Project