I wanted to get my phone's projection running on a stock Android head unit without rooting anything and without buying an adapter box. MiAuto is the piece that makes that possible: it implements the car side of ICCOA CarLink, the protocol that Xiaomi CarWith, OPPO Car+ and vivo Jovi InCar speak on the phone side.

The whole job takes roughly 10 to 20 minutes if you already have head-unit access, and I'd call it intermediate difficulty — not because the steps are hard, but because a head unit is a stubborn little computer that may or may not expose ADB over USB. Here's the path I followed.

One thing up front: the project's source material doesn't publish a version number, package ID, minimum Android version, ABI list or exact pairing screens. So wherever I say "use the control on the main screen," that's because the label genuinely isn't documented and you should read what the app shows you.

What you need before touching anything

The mental model matters here. MiAuto is a receiver and it belongs on the car head unit. CarWith, Car+ or Jovi InCar is the sender and it belongs on the phone. Installing MiAuto on the phone gets you nothing.

Side Component Role
Car head unit MiAuto APK ICCOA CarLink receiver, accepts the phone stream
Phone CarWith / Car+ / Jovi InCar Sender app that starts projection

Your shopping list:

  • An Android head unit that will let you install a sideloaded APK. Stock Android usually hides the toggle under Settings → Apps → Special app access → Install unknown apps, but check your unit's documentation for the exact path.
  • The MiAuto APK from the PiggyBackBayonet/MiAuto GitHub repository. Read the repo docs first, since the source post doesn't name a specific release file.
  • A USB cable that actually carries data, or a USB stick the head unit's file manager can read.
  • adb from the Android SDK platform-tools on a workstation. Any build you already have is fine — no specific version is required.
  • Root: not needed. The project authors say so explicitly. Don't root the phone or the head unit for this.

Step 1: Prove that ADB can see the head unit

Plug the head unit into your workstation and check the device list:

adb devices 

You want this:

List of devices attached <car-head-unit-serial> device 

If you see unauthorized or offline, stop and fix that first — nothing downstream will work. A device entry only proves the workstation can talk to the Android Debug Bridge daemon on the unit. It says nothing about whether MiAuto is installed or whether projection will succeed, so don't skip ahead mentally.

If the head unit never shows up, enable Developer options and USB debugging on it, swap for a known-good data cable, and bounce the server:

adb kill-server adb start-server adb devices 

Still nothing? Fall back to installing from a USB drive using the head unit's own file manager.

Step 2: Read the APK metadata and save the package ID

Before installing, confirm the file is real and grab its package name. You'll reuse that ID for every verification step later.

ls -lh MiAuto.apk aapt dump badging MiAuto.apk | head -n 1 

Expected shape of the output, with your own values:

package: name='<package.id>' versionCode='<n>' versionName='<value>' 

Write <package.id> down. If aapt prints package: name='com.example.miauto', then com.example.miauto is your ID for the rest of this guide.

Quick checklist before you continue:

  • [ ] Head unit shows as device in adb devices
  • [ ] APK file exists and is not zero bytes
  • [ ] Package ID from aapt dump badging is saved somewhere
  • [ ] MiAuto is going on the car, not the phone
  • [ ] No root, no adapter box

Step 3: Install the APK and start the receiver

adb install -r MiAuto.apk 

You're looking for a bare Success. Then confirm the package manager actually registered it:

PKG=$(aapt dump badging MiAuto.apk | sed -n "s/^package: name='\([^']*\)'.*/\1/p") adb shell pm path "$PKG" 

Which should print something like:

package:/data/app/.../base.apk 

Now open MiAuto from the head-unit launcher and start the receiver using the receiver/start control on the main screen. Grant only the permissions the app asks for and your head-unit policy allows.

Order matters: receiver first, sender second. MiAuto and the phone app are two halves of the same ICCOA CarLink session, so the car has to be listening before the phone starts talking.

Step 4: Pair from the phone

On the phone, open CarWith, Car+ or Jovi InCar and pick its wireless connection entry. The discovery screen, PIN flow and radio requirements aren't documented in the source material, so follow whatever prompts your app shows.

With CarWith, for example, I opened the app, chose the wireless option, and waited for the car entry to appear. When it connected, the head unit left the MiAuto receiver screen and switched to the phone's projection interface. That handover is the signal you're looking for — it means both ends of the CarLink session agreed on something.

Step 5: Verify and record a working baseline

A clean install is not proof that the wireless session completed. Check two things together: the screen, and whether the MiAuto process is alive on the car.

PKG=$(aapt dump badging MiAuto.apk | sed -n "s/^package: name='\([^']*\)'.*/\1/p") adb logcat -d | grep -i "$PKG" | tail -n 50 adb shell ps -A | grep "$PKG" 

The process check returning a line for your package is the solid evidence. The logcat grep gives you context, but since the project doesn't publish its exact log strings, a missing familiar message is not proof of failure — always judge with screen state and the process list together.

Check Success signal
APK install Success
Package registration package:/data/app/.../base.apk
Receiver process Process line for <package.id>
Projection Phone UI visible on the car display
Phone app Connected / projecting state

Once it works, write down the phone app you used, the head-unit state and the package ID. When something breaks in three weeks, that baseline is worth more than any forum thread.

The two failures I'd expect

adb: no devices/emulators found — USB debugging is off, the cable is charge-only, or the unit simply doesn't expose ADB over USB. Enable debugging, try a data cable, restart the ADB server. If it stays invisible, go the USB-drive route.

adb: device unauthorized — the RSA fingerprint dialog on the head unit was never accepted. Reconnect, tap "Allow USB debugging," verify the fingerprint. If no dialog appears at all, revoke the existing authorizations on the unit and reconnect.

One last guard: if the process isn't running, reopen MiAuto and repeat the projection attempt before you start changing settings. Most of the time the receiver just wasn't up yet.

Takeaway

MiAuto works because it's honest about which side of the connection it belongs to. Put the receiver on the car, keep the sender on the phone, verify with pm path and ps -A instead of trusting the screen alone, and you get a projection setup with no root and no adapter box in the middle. The only real unknown is your head unit's willingness to cooperate with ADB — and there's always a USB stick for that.

This article was originally published on AI Release — https://ai-release.org. More guides like this land in the channel at https://t.me/ai_release1.