This guide documents a full installation of official crDroid Android 16 on the Xiaomi Mi 9 (cepheus), including the problems encountered during the process and how they were resolved.
It is written as a practical field guide rather than a generic ROM flashing checklist. The goal is to help other Mi 9 owners avoid the same mistakes and get to a clean, booting system on the first serious attempt.
Why this guide exists
The Xiaomi Mi 9 is an old but still capable phone. In this case, the stock ROM was running:
- Android 10
- A security patch level from April 1, 2021
That is old enough to be a real security concern for a daily driver, especially if the phone still handles banking apps, 2FA, email, and general account access.
Official LineageOS is not available for cepheus, so the best current official option was crDroid. At the time of this installation, the target ROM was:
crDroid 12.9Android 16- device:
cepheus
The final working result
The installation eventually succeeded.
The key things that made it work were:
- Unlock the bootloader properly with Xiaomi’s official Mi Unlock tool.
- Use a recovery image that can actually boot on this device.
- Format data before the clean flash sequence, not at the end.
- Flash in the right order.
- Do not rely on stock recovery or assume
reboot recoverywill preserve the temporary custom recovery session. - Re-enter OrangeFox from fastboot when needed instead of trusting stock recovery transitions.
What was installed
The working setup used:
- Official crDroid ROM for
cepheus - Required firmware package:
V12.5.6.0.RFACNXM - NikGapps package intended for official crDroid Android 16 builds
- OrangeFox recovery booted temporarily from fastboot
Before you start
This process wipes the phone.
Before doing anything:
- Back up
DCIM,Download,Documents,Pictures,Movies,WhatsApp, andTelegram - Make sure Google Authenticator or any other 2FA app has already been migrated elsewhere
- Make sure you understand your banking app recovery path
- Remove all Google accounts from the phone before flashing
That last point matters because Factory Reset Protection can become a problem if you wipe and reflash with accounts still attached.
Important warning about Xiaomi Mi 9 bootloader unlock
The Xiaomi Mi 9 does not unlock the same way as many Pixels.
What did not work:
fastboot flashing unlock
What was required:
- Xiaomi’s official Mi Unlock tool
- a Xiaomi account
- a Windows environment for the actual unlock step
In other words, if you are coming from a Pixel workflow, do not assume the Mi 9 can be unlocked with the same fastboot commands.
Files used
Prepare these files before starting:
- official crDroid ROM zip for
cepheus - required firmware zip
V12.5.6.0.RFACNXM - matching NikGapps package for official crDroid Android 16
- a recovery image that boots successfully on
cepheus
In this installation, OrangeFox was used successfully as a temporary recovery boot image from fastboot.
The clean installation flow that worked
This is the exact high-level sequence that produced a booting system.
1. Unlock the bootloader
Use Xiaomi’s official Mi Unlock process first.
Once done, verify the device is really unlocked before continuing.
2. Boot a custom recovery temporarily from fastboot
Do not assume stock recovery is useful for this installation.
Boot OrangeFox from fastboot. Do not worry if it is not permanently installed yet.
3. Format data first
This was the most important correction in the process.
Initially, data formatting was done too late. That caused a bad installation flow and repeated returns to recovery instead of a normal system boot.
The correct move for a clean install is:
- boot custom recovery
- format data
- reboot back into custom recovery
Because the recovery was being booted temporarily, “reboot back into custom recovery” had to be handled carefully. Rebooting the wrong way could drop the phone back into stock Mi Recovery 3.0.
4. Flash the required firmware
Once back in custom recovery after formatting data, flash the required firmware package first.
This ensures the ROM has the firmware base it expects.
5. Flash the crDroid ROM
After firmware, flash the ROM zip itself.
6. Return to custom recovery again
This is where temporary recovery sessions matter.
On this device, simply choosing recovery reboot in the wrong context could bounce the phone into stock Mi Recovery instead of the custom recovery environment needed for the next step.
The reliable workaround was:
- if needed, boot OrangeFox from fastboot again
7. Flash GApps before first system boot
GApps must be installed before the first normal boot if you want a standard Google-enabled setup.
In this installation, NikGapps for official crDroid Android 16 was flashed after the ROM.
8. Reboot to system
After firmware, ROM, and GApps are in place, reboot to system and let the phone take its time on first boot.
The first boot can take a while. Do not panic too early.
What went wrong during the real installation
Several problems showed up. These are worth documenting because they are exactly the kinds of issues that can waste hours if you do not already know what they mean.
Problem 1: The wrong assumption from a Pixel-style workflow
The first assumption was that the Mi 9 could be handled like a Pixel:
- unlock with fastboot
- use a simple recovery flow
- reboot between steps
That assumption was wrong.
The Mi 9 needed Xiaomi’s unlock flow, and recovery handling was less forgiving.
Problem 2: Temporary recovery versus stock recovery
OrangeFox was being booted temporarily with fastboot.
That means:
- custom recovery exists only for the current session
- if the phone reboots the wrong way, it can fall back into stock recovery
This caused multiple returns to:
Mi Recovery 3.0
That was confusing at first, but it was not a brick. It just meant the phone had left the temporary recovery session.
Problem 3: Mi Recovery 3.0 kept appearing
This happened more than once.
Why?
- the phone was rebooting away from the temporary recovery environment
- stock recovery was still the persistent recovery on the device
How it was handled:
- manually return to fastboot
- boot OrangeFox again from fastboot
- continue from there
Problem 4: fastboot boot with one recovery image failed
One recovery image produced:
BootImage is Incomplete
That meant the selected image was not suitable for direct boot in the expected way.
The fix was:
- use a different recovery payload
- specifically, extract and boot a working
recovery.imgfrom the OrangeFox package
That image booted successfully.
Problem 5: ADB push to /sdcard failed in recovery
At one point, copying installation zips directly to /sdcard failed with a message equivalent to:
- the remote side could not create the file
- the required key was not available
That happened because storage was still in an encrypted state and the recovery environment could not use /sdcard normally yet.
The fix was to avoid file copy to internal storage and use:
adb sideload
That was much more reliable for this setup.
Problem 6: The ROM flashed, but the phone did not boot the system
After one installation round, the phone returned to recovery instead of booting normally.
Recovery logs showed the flash process itself did not obviously fail, which made the situation misleading.
The actual issue was the installation order.
The fix was:
- redo the installation
- move
format datato the beginning of the clean flash sequence
That was the turning point.
Problem 7: Rebooting recovery at the wrong time caused confusion
Because custom recovery was temporary, rebooting “to recovery” did not always mean “back into OrangeFox”.
Sometimes it meant:
- back into stock recovery
The reliable mental model was:
- temporary recovery is disposable
- if you lose it, return to fastboot and boot it again
Once that was treated as normal instead of surprising, the process became manageable.
The practical installation model that turned out to be safest
If doing this again from scratch, the safest model would be:
- Unlock bootloader with Mi Unlock.
- Remove all Google accounts from the phone.
- Back up all important files and app-related access beforehand.
- Boot OrangeFox from fastboot.
- Format data immediately.
- Return to OrangeFox again if recovery session changes.
- Sideload firmware.
- Sideload ROM.
- Return to OrangeFox again from fastboot if necessary.
- Sideload GApps.
- Reboot to system.
That is the sequence I would recommend to others.
How to avoid the specific problems encountered here
To avoid getting stuck in Mi Recovery
- Expect it if you are only temporarily booting custom recovery
- Do not interpret it as instant disaster
- Use hardware buttons to return to fastboot
- Boot the custom recovery again and continue
To avoid storage copy failures
- Prefer
adb sideload - Do not depend on pushing large zip files to encrypted internal storage
To avoid a non-booting flashed ROM
- Format data before the clean flash sequence
- Do not postpone it until the end
- Install GApps before first normal boot
To avoid FRP headaches
- remove all Google accounts before starting
To avoid banking and 2FA lockout
- migrate authenticator apps before flashing
- verify your banking app recovery path in advance
- do not start this process late at night if you still depend on those apps immediately
What about SafetyNet / Play Integrity / banking apps?
This guide is about installation, not app certification guarantees.
A few realities still apply:
- the bootloader is unlocked
- this is a custom ROM
- some banking or security-sensitive apps may still object
That does not mean the ROM install failed. It means app integrity policy is a separate issue from getting the operating system running.
Final thoughts
The Xiaomi Mi 9 can still be revived into a modern Android 16 device with an official custom ROM, but the process is not as frictionless as flashing a Pixel.
The hardest parts were not the ROM package itself. They were:
- Xiaomi’s unlock model
- temporary recovery behavior
- storage encryption quirks
- getting the installation order exactly right
Once those were understood, the installation stopped feeling random and started behaving predictably.
If you follow the clean order described above, you should have a much smoother experience than the one documented here.
Troubleshooting summary
If you only want the condensed version, here it is:
fastboot flashing unlockdoes not work for Mi 9: use Mi Unlock- custom recovery can be temporary: expect to re-enter it from fastboot
- stock
Mi Recovery 3.0appearing is annoying, but not fatal - if
/sdcardis unusable in recovery, useadb sideload - if the ROM flashes but the phone will not boot, redo the install with
format dataat the start - install GApps before first system boot
Suggested article title alternatives
How I Installed Official crDroid Android 16 on the Xiaomi Mi 9Xiaomi Mi 9 crDroid Install Guide: What Broke and How I Fixed ItInstalling Android 16 on the Mi 9 with Official crDroid: A Real-World Walkthrough
