Files
gitlab-instance-0a899031_re…/README.md
2026-04-04 15:52:20 -05:00

5.0 KiB

redroid-android13

This repo is the minimal Android 13 redroid bundle that matches the optimized 5570 instance.

It keeps only the parts that were actually used:

  • redroid/redroid:13.0.0
  • MindTheGapps
  • libhoudini
  • Kitsune Mask / Magisk Delta
  • Pixel 7 Pro device profile
  • the post-fs-data fix that keeps Magisk Installed and the settings page healthy

Included files

  • redroid.py
  • run_redroid.py
  • bootstrap_redroid.py
  • verify_offline_bundle.py
  • offline/README.md
  • offline/manifest.json
  • stuff/mindthegapps.py
  • stuff/houdini.py
  • stuff/houdini_hack.py
  • stuff/magisk.py
  • assets/redroid_extreme_post_fs_data.sh
  • local offline/downloads/
  • local offline/images/

Offline archive

The repo tracks the offline bundle metadata under offline. The large zip/apk/tar payloads are intentionally kept out of Git and should be stored locally under offline/downloads/ and offline/images/.

Use offline/manifest.json for checksums and source metadata, and offline/README.md for the expected local layout.

Expected local files:

  • offline/downloads/mindthegapps.zip
  • offline/downloads/libhoudini.zip
  • offline/downloads/libhoudini_hack.zip
  • offline/downloads/magisk.apk
  • offline/downloads/magisk.version
  • offline/images/redroid-redroid-13.0.0-latest.tar (optional if the base image is already in local Docker storage)

Build resource order (redroid.py)

  • Base image: prefers an existing local redroid/redroid:<ver>-latest, then offline/images/redroid-redroid-13.0.0-latest.tar (docker load), then a registry pull (skipped when offline-only).
  • Zips / APK: prefers files under offline/downloads/ whose MD5 matches the pinned upstream artifacts; downloads only if missing or mismatch (skipped when offline-only).
  • Strict no-network builds: pass --offline or set REDROID_OFFLINE=1 so missing bundles fail fast instead of downloading.

Verify script notes

python verify_offline_bundle.py
  • magisk.version is checked against exact size and sha256 from manifest.json. A short version string without the expected newline/padding will report size mismatch even when magisk.apk is fine for the image build.
  • A missing offline/images/*.tar is expected to FAIL here if you rely on a pre-pulled Docker image instead; that does not block redroid.py when the base image already exists locally.

Dependencies

python -m pip install -r requirements.txt

Build the 5570 image

python redroid.py -mtg -i -m

Air-gapped (requires a complete offline/ tree):

REDROID_OFFLINE=1 python redroid.py -mtg -i -m
# or
python redroid.py -mtg -i -m --offline

Expected image tag:

redroid/redroid:13.0.0_mindthegapps_houdini_magisk

Launch the container

Headless servers have no screen to approve the USB debugging RSA dialog. Always pass --adb-insecure so boot props disable ADB RSA checks and apply before the Pixel user profile (androidboot.adb.secure=0, ro.adb.secure=0, ro.secure=0, ro.debuggable=1). Do not expose the ADB port on a public network.

python run_redroid.py \
  --image redroid/redroid:13.0.0_mindthegapps_houdini_magisk \
  --bridge libhoudini \
  --device-profile pixel-7-pro \
  --data-dir ~/data-redroid13 \
  --port 5570 \
  --replace \
  --adb-insecure

Then:

adb kill-server && adb start-server
adb connect 127.0.0.1:5570
adb devices

If you still see unauthorized after an upgrade, stop the container, remove persisted keys on the host, and retry:

rm -rf ~/data-redroid13/misc/adb

Apply the 5570 hardening

python bootstrap_redroid.py \
  --serial 127.0.0.1:5570 \
  --device-profile pixel-7-pro \
  --proxy-host auto \
  --install-extreme-script

This post-boot step:

  • disables SetupWizard
  • marks the device provisioned
  • enables high accuracy location mode
  • allows com.android.shell to use mock location
  • applies the Pixel 7 Pro / user / release-keys / locked / green identity

With --install-extreme-script, the validated script assets/redroid_extreme_post_fs_data.sh is copied to /data/adb/post-fs-data.d/20-redroid-extreme.sh so that:

  • vendor/bin/su stays visible to app namespaces after reboot
  • Pixel 7 Pro properties are re-applied on every boot

Verified 5570 state

The matching 5570 instance was already validated with:

  • ro.product.model=Pixel 7 Pro
  • ro.build.type=user
  • ro.build.tags=release-keys
  • ro.boot.vbmeta.device_state=locked
  • ro.boot.verifiedbootstate=green
  • app UID su -V = 27001
  • app UID su -mm -c id = uid=0(root)
  • Kitsune home page shows a normal Installed state
  • Kitsune settings page opens normally and SuList / MagiskHide is configurable

Current scope

This repo only reproduces the system environment for the optimized 5570 build.

It does not yet include:

  • virtual camera
  • camera HAL
  • TikTok Live specific patches