Skip to content

Releases: ejfkdev/avdroot

avdroot v0.1.1

Choose a tag to compare

@github-actions github-actions released this 15 Sep 10:59
v0.1.1

v0.1.1

Root now completes in one run, and without the manager app.

Patching a ramdisk installs Magisk's init and its daemon and nothing else. The
rest of Magisk belongs in /data/adb/magisk, and magiskd decides at startup —
once — whether that directory is complete; until it is, su is not put on PATH
and the su that is there is the emulator's own, which fails with
"invalid uid/gid '-c'". Magisk reports its version and accepts su-policy writes
throughout, so the tool appeared to succeed and then could not use root.

avdroot now reproduces Magisk's own env_check and fix_env from the host: the
file set is the one MagiskInstaller.extractFiles builds, extracted from the
installer archive and written in before the restart that loads the patched
ramdisk. That is one restart instead of two, and --no-install produces a working
root by itself.

Also in this release:

  • The Go floor is 1.24. Earlier toolchains emit no LC_UUID and macOS 26's dyld
    refuses to launch the result, which broke both CI and go install on macOS.
  • The release workflow no longer tries to execute cross-built binaries, which
    cannot run on the runner; every target is verified structurally instead.
  • Actions moved to their Node.js 24 versions.
  • go install reports the real version rather than "dev".
  • Staging writes sync before the emulator is killed, which otherwise dropped
    them and looked exactly like a patch that did not take.

avdroot v0.1.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 08:28
v0.1.0

v0.1.0

First release.

Root an Android Studio emulator by patching its ramdisk with Magisk, entirely
on the host. The ramdisk is decompressed, rewritten and recompressed by this
binary: it implements the cpio newc format, gzip/lz4/xz, and Magisk's own
patching semantics, so nothing has to run inside the emulator — no shell, no
busybox, no magiskboot, and no code execution in the guest.

  • avdroot root takes an AVD from a cold start to a verified root shell
  • finds the SDK and its AVDs, and downloads a Magisk release when none is at hand
  • avdroot trust-chrome makes Chrome accept an interception CA, for HTTPS capture
  • bilingual output, following the system locale
  • darwin, linux and windows for amd64 and arm64, plus linux/arm

Known issue. The first avdroot root stops at "su is not available" and a
second run succeeds: the patched ramdisk carries Magisk's init and daemon, but
the rest of Magisk is only unpacked when the manager app runs its setup dialog,
which needs a tap and a reboot. v0.1.1 completes that step from the host.