Skip to content

The Two APKs

xAstroBoy edited this page Jun 15, 2026 · 2 revisions

The Two APKs

A cook produces up to two APKs, written next to the loaded environment:

File Package Install on… How it loads
<env>_NoRoot-Spoof.apk masquerades as …haven2025 any Quest (no root) replaces the Haven 2025 home in place; loads after the shell relaunches
<env>_Rooted-System.apk the env's own package rooted / dev headsets only auto-selected via adb (oculuspreferences) — needs root

Why a spoof at all?

An unrooted Quest can't switch to a custom home environment — it only loads Meta's built-in homes, and only root can point the shell at an arbitrary env. The spoof gets around this by taking over the built-in Haven 2025 home: it installs as Haven 2025 (same package id), so the home the shell already loads becomes your ported env. There is nothing to "switch" to — and on an unrooted headset you can't. That's the whole reason the spoof exists.

The trade-off: it replaces your installed Haven 2025. The tool backs the original up first — see Restoring Haven 2025.

Which one do I use?

  • Normal retail Quest (not rooted): the NoRoot-Spoof APK. The only one loadable without root. It replaces Haven 2025 in place; after install the tool relaunches the shell and your env loads where Haven 2025 was. (If you don't see it, make sure Haven 2025 is your selected home environment.)
  • Rooted / userdebug headset: the Rooted-System APK keeps your env under its own package name and is auto-selected for you (root can point the shell at any env).

You normally don't choose — the auto-installer does.

The auto-installer (root-aware)

When Install to headset is on, after signing the tool:

  1. Detects root over adb — runs adb root, then checks adb shell id (uid=0), su -c id, and getprop ro.debuggable.
  2. Rooted → installs the Rooted-System APK and auto-selects it (oculuspreferences --setc environment_selected …).
  3. Not rooted → backs up the real Haven 2025 (see Restoring Haven 2025), then uninstalls the original — the spoof is signed with our debug cert, not Meta's, so an in-place update is impossible and the original must be removed first — installs the NoRoot-Spoof APK, and relaunches the shell so your env loads in place. The uninstall happens only after a successful backup; if the backup fails, the tool aborts and leaves Haven 2025 untouched.

So the default is the spoof; the unspoofed own-package APK is used only when root is confirmed.

Relaunching the shell

After a spoof install the running shell must restart to pick up the new home. The tool kills the exact com.oculus.vrshell process id so it relaunches.

⚠️ Do not use am force-stop (it doesn't reload the home) or a broad pkill vrshell (it reboots the headset). Target the exact pid only — which is what the tool does.

Clone this wiki locally