
Root einen Android Studio Emulator, indem du dessen Ramdisk mit Magisk patchst — in reinem Go.
Roote einen Android Studio Emulator, indem sein Ramdisk mit Magisk gepatcht wird — in reinem Go.
avdroot bringt ein AVD mit einem einzigen Befehl von einem Kaltstart zu einer funktionierenden Root-Shell. Alles geschieht auf dem Host: Das Ramdisk wird dekomprimiert, neu geschrieben, sodass Magisks init /init ersetzt, und wieder komprimiert. Das Erstellen des Images erfordert kein Shell-Skript, kein busybox, kein magiskboot und keine Codeausführung innerhalb des Emulators.```
$ avdroot root
==> Target
Pixel_10_Pro_XL (the only AVD)
==> Preparing Magisk's environment
Magisk's files are not unpacked yet; writing them for 31.0 now
ok 14 files written for Magisk 31.0, before the restart that will use them
==> Patching
preinit device: vdd1 (read from the running emulator)
==> Restarting the emulator
booting cold, because a snapshot would restore the pre-patch ramdisk
==> Installing the Magisk app
ok installed com.topjohnwu.magisk (Magisk 31.0)
==> Granting su to the adb shell
ok uid 2000 allowed
==> Verifying root
ok Magisk 31.0:MAGISK:R is running
ok su grants root
root: uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
## Inhaltsverzeichnis
- [Warum noch eines](#warum-noch-eines)
- [Installation](#installation)
- [Schnellstart](#schnellstart)
- [Befehle](#befehle)
- [Wie es funktioniert](#wie-es-funktioniert)
- [Eine Magisk-Version auswählen](#eine-magisk-version-auswählen)
- [Fallstricke, die dieses Tool behandelt](#fallstricke-die-dieses-tool-behandelt)
- [HTTPS von Chrome abfangen](#https-von-chrome-abfangen)
- [Plattformunterstützung](#plattformunterstützung)
- [Ausgabesprache](#ausgabesprache)
- [Entwicklung](#entwicklung)
- [Danksagungen und Lizenz](#danksagungen-und-lizenz)
## Warum noch eines
[rootAVD](https://github.com/newbit1/rootAVD) war der Pionier dieser Technik und ist
nach wie vor die Referenz dafür, wurde jedoch nicht an die neueren Android- und
Magisk-Versionen angepasst. Führt man es gegen einen Android-17-AVD aus, zeigen sich
die Probleme deutlich, und jedes davon wird hier behoben:
| rootAVD-Verhalten | avdroot |
|---|---|
| Benötigt `bash`, `busybox`, `unzip`, `xxd`, `strings`, `dd`, `cpio` sowie GNU `stat`/`sed` (die sich unter macOS unterscheiden) | Eine statische Go-Binary. cpio, LZ4, gzip und xz sind alle prozessintern implementiert |
| Kopiert das Skript samt Binaries in den Emulator und führt sich dort selbst aus | Baut das Image vollständig auf dem Host |
| Sichert `ramdisk.img` bei jedem Lauf, sodass nach dem ersten Patch die „unberührte" Sicherung selbst gepatcht ist und `restore` nicht zum Originalzustand zurückkehren kann | Sichert einmal, überschreibt nie und warnt, wenn sich eine vorhandene Sicherung als gepatcht erweist |
| Patcht für Magisks altes `magisk32`/`magisk64`-Layout | Implementiert Magisk 26+ (`magiskinit`, `magisk`, `init-ld`, `.backup/.rmlist`) |
| Erfordert den ramdisk-Pfad als Argument | Entdeckt das SDK, AVDs und Images, mit `--sdk`/`--avd-home` zum Überschreiben |
| Startet bedingungslos neu und hofft | Erzwingt einen Kaltstart und überprüft, dass `su` tatsächlich `uid=0` zurückgibt |
## Installation
**Vorgefertigte Binaries** — nehmen Sie das Archiv für Ihre Plattform von
[Releases](https://github.com/ejfkdev/avdroot/releases):```sh
tar -xzf avdroot_linux_amd64.tar.gz
chmod +x avdroot_linux_amd64
sudo mv avdroot_linux_amd64 /usr/local/bin/avdroot
Windows- und macOS-Archive enthalten eine einzelne ausführbare Datei; unter macOS müssen Sie möglicherweise das Quarantäne-Attribut entfernen:```sh xattr -d com.apple.quarantine avdroot_darwin_arm64
Jede Veröffentlichung enthält außerdem `SHA256SUMS.txt`:```sh
sha256sum -c SHA256SUMS.txt --ignore-missing
Mit Go (1.24 oder neuer):```sh go install github.com/ejfkdev/avdroot@latest
Go 1.24 ist die Mindestversion, da ältere Toolchains keinen `LC_UUID`-Load-Command ausgeben und macOS 26s `dyld` sich weigert, ein solches Binary zu starten. Go 1.21 und 1.22 stempeln ebenfalls `minos 26.0`, sodass sie aus beiden Gründen fehlschlagen.
**Aus dem Quellcode:**```sh
git clone https://github.com/ejfkdev/avdroot
cd avdroot
make build # host binary
make all # every release target into dist/
Du benötigst außerdem ein Android SDK mit adb und dem Emulator sowie ein google_apis- oder
AOSP-Systemimage. Play-Store-Images können auf diese Weise nicht gerootet werden: Sie verweigern
adb root, sodass patch und root sie sofort ablehnen, anstatt erst mehrere Minuten später
fehlzuschlagen.
avdroot list # what exists, and what state it is in avdroot root # patch, restart, install the app, grant su, verify
Das ist alles. `root` benötigt keinen AVD-Namen, wenn nur einer existiert, fragt einmal nach Bestätigung und überspringt die Frage vollständig, wenn stdin kein Terminal ist:```sh
avdroot root Pixel_10_Pro_XL --yes # named AVD, unattended
Wenn du es lieber in Schritten machen möchtest:```sh avdroot patch # patch only; the emulator need not be running avdroot patch --dry-run # show what would change, write nothing
avdroot install && avdroot verify
Zum Rückgängigmachen:```sh
avdroot restore # restores ramdisk.img.backup
| Befehl | Beschreibung |
|---|---|
avdroot root [target] | Patchen, neu starten, installieren, su gewähren, verifizieren — unbeaufsichtigt |
avdroot patch [target] | Nur die Ramdisk patchen; fragt vor dem Schreiben nach |
avdroot restore [target] | Aus ramdisk.img.backup wiederherstellen |
avdroot list | AVDs, System-Images und ihr Patch-Status |
avdroot status [target] | Details zu einem Ziel, einschließlich des preinit-Geräts |
avdroot verify [target] | Prüfen, ob Magisk läuft und su uid=0 zurückgibt |
avdroot install | Die Magisk-App im laufenden Emulator installieren |
avdroot magisk info | Welcher Installer verwendet würde und was er unterstützt |
avdroot magisk fetch | Ein Release herunterladen (--list, --version, --prerelease) |
avdroot trust-chrome | Chrome dazu bringen, eine Interception-CA zu akzeptieren (--cert, --clear) |
avdroot doctor | Erklären, wie jeder Pfad gefunden wurde |