
Rootez un émulateur Android Studio en patchant son ramdisk avec Magisk — en pur Go.
Rootez un émulateur Android Studio en patchant son ramdisk avec Magisk — en pur Go.
avdroot fait passer un AVD d'un démarrage à froid à un shell root fonctionnel avec une
seule commande. Tout se passe sur l'hôte : le ramdisk est décompressé, réécrit
pour que l'init de Magisk remplace /init, puis recompressé. La construction de l'image ne nécessite aucun
script shell, aucun busybox, aucun magiskboot, et aucune exécution de code à l'intérieur de
l'émulateur.```
$ 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
## Table des matières
- [Pourquoi un autre outil](#why-another-one)
- [Installation](#install)
- [Démarrage rapide](#quick-start)
- [Commandes](#commands)
- [Comment ça fonctionne](#how-it-works)
- [Choisir une version de Magisk](#choose-a-magisk-release)
- [Pièges gérés par cet outil](#traps-this-tool-handles)
- [Capturer le HTTPS depuis Chrome](#capturing-https-from-chrome)
- [Prise en charge des plateformes](#platform-support)
- [Langue de sortie](#output-language)
- [Développement](#development)
- [Crédits et licence](#credits-and-licence)
## Pourquoi un autre outil
[rootAVD](https://github.com/newbit1/rootAVD) a été le précurseur et reste la
référence pour cette technique, mais il n'a pas suivi les récentes versions
d'Android et de Magisk. L'exécuter sur un AVD Android 17 révèle clairement les
problèmes, et chacun d'eux est corrigé ici :
| Comportement de rootAVD | avdroot |
|---|---|
| Nécessite `bash`, `busybox`, `unzip`, `xxd`, `strings`, `dd`, `cpio`, et GNU `stat`/`sed` (qui diffèrent sur macOS) | Un seul binaire Go statique. cpio, LZ4, gzip et xz sont tous implémentés en interne |
| Copie le script et les binaires dans l'émulateur et s'y exécute | Construit l'image entièrement sur l'hôte |
| Sauvegarde `ramdisk.img` à chaque exécution, donc après le premier patch la sauvegarde « pristine » est elle-même patchée et `restore` ne peut pas revenir à l'état d'origine | Sauvegarde une seule fois, n'écrase jamais, et avertit si une sauvegarde existante s'avère patchée |
| Patche pour l'ancienne disposition `magisk32`/`magisk64` de Magisk | Implémente Magisk 26+ (`magiskinit`, `magisk`, `init-ld`, `.backup/.rmlist`) |
| Nécessite que le chemin du ramdisk soit collé en argument | Découvre le SDK, les AVD et les images, avec `--sdk`/`--avd-home` pour les remplacer |
| Redémarre sans condition et espère que ça marche | Force un démarrage à froid et vérifie que `su` renvoie bien `uid=0` |
## Installation
**Binaires précompilés** — prenez l'archive correspondant à votre plateforme dans
[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
Les archives Windows et macOS contiennent un seul exécutable ; sur macOS, vous devrez peut-être effacer l'attribut de quarantaine :```sh xattr -d com.apple.quarantine avdroot_darwin_arm64
Chaque version publie également `SHA256SUMS.txt` :```sh
sha256sum -c SHA256SUMS.txt --ignore-missing
Avec Go (1.24 ou plus récent) :```sh go install github.com/ejfkdev/avdroot@latest
Go 1.24 est le minimum requis car les chaînes d'outils antérieures n'émettent aucune commande de chargement `LC_UUID`, et le `dyld` de macOS 26 refuse de lancer un tel binaire. Go 1.21 et 1.22 estampillent également `minos 26.0`, ils échouent donc sur les deux critères.
**Depuis les sources :**```sh
git clone https://github.com/ejfkdev/avdroot
cd avdroot
make build # host binary
make all # every release target into dist/
Vous avez également besoin d'un SDK Android avec adb et l'émulateur, ainsi qu'une image système google_apis ou AOSP. Les images Play Store ne peuvent pas être rootées de cette manière : elles refusent adb root, donc patch et root les rejettent immédiatement plutôt que d'échouer plusieurs minutes plus tard.
avdroot list # what exists, and what state it is in avdroot root # patch, restart, install the app, grant su, verify
C'est tout l'ensemble. `root` n'a pas besoin de nom d'AVD lorsqu'un seul existe, demande
confirmation une fois, et saute complètement la question lorsque stdin n'est pas un terminal :```sh
avdroot root Pixel_10_Pro_XL --yes # named AVD, unattended
Si vous préférez procéder par étapes :```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
Pour annuler :```sh
avdroot restore # restores ramdisk.img.backup
| Commande | Description |
|---|---|
avdroot root [target] | Patch, redémarrage, installation, attribution de su, vérification — sans intervention |
avdroot patch [target] | Patch uniquement le ramdisk ; demande confirmation avant écriture |
avdroot restore [target] | Restaure depuis ramdisk.img.backup |
avdroot list | AVDs, images système et leur statut de patch |
avdroot status [target] | Détails pour une cible, y compris le périphérique preinit |
avdroot verify [target] | Vérifie que Magisk s'exécute et que su renvoie uid=0 |
avdroot install | Installe l'application Magisk dans l'émulateur en cours d'exécution |
avdroot magisk info | Quel installateur serait utilisé, et ce qu'il prend en charge |
avdroot magisk fetch | Télécharge une version (--list, --version, --prerelease) |
avdroot trust-chrome | Fait accepter à Chrome un CA d'interception (--cert, --clear) |
avdroot doctor | Explique comment chaque chemin a été localisé |