
Android Studio एमुलेटर को Magisk के साथ उसके ramdisk को पैच करके रूट करें — शुद्ध Go में।
एक Android Studio एमुलेटर को उसके ramdisk को Magisk के साथ पैच करके रूट करें — शुद्ध Go में।
avdroot एक AVD को ठंडे स्टार्ट से एक ही कमांड में काम करने वाले रूट शेल तक ले जाता है। सब कुछ होस्ट पर होता है: ramdisk को डीकंप्रेस किया जाता है, फिर से लिखा जाता है ताकि Magisk का init /init को बदल दे, और फिर से कंप्रेस किया जाता है। इमेज बनाने के लिए किसी शेल स्क्रिप्ट, busybox, magiskboot, या एमुलेटर के अंदर कोड निष्पादन की आवश्यकता नहीं होती।```
$ 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
## विषय-सूची
- [एक और क्यों](#why-another-one)
- [इंस्टॉल](#install)
- [त्वरित शुरुआत](#quick-start)
- [कमांड](#commands)
- [यह कैसे काम करता है](#how-it-works)
- [Magisk रिलीज़ चुनें](#choose-a-magisk-release)
- [इस टूल द्वारा संभाले जाने वाले जाल](#traps-this-tool-handles)
- [Chrome से HTTPS कैप्चर करना](#capturing-https-from-chrome)
- [प्लेटफ़ॉर्म समर्थन](#platform-support)
- [आउटपुट भाषा](#output-language)
- [विकास](#development)
- [श्रेय और लाइसेंस](#credits-and-licence)
## एक और क्यों
[rootAVD](https://github.com/newbit1/rootAVD) ने इसकी शुरुआत की और यह अभी भी
तकनीक के लिए संदर्भ है, लेकिन यह हाल के Android और
Magisk रिलीज़ के साथ तालमेल नहीं रख पाया है। इसे Android 17 AVD पर चलाने से समस्याएँ
स्पष्ट रूप से दिखती हैं, और यहाँ हर एक को ठीक किया गया है:
| rootAVD व्यवहार | avdroot |
|---|---|
| `bash`, `busybox`, `unzip`, `xxd`, `strings`, `dd`, `cpio`, और GNU `stat`/`sed` की आवश्यकता होती है (जो macOS पर भिन्न होते हैं) | एक स्थिर Go बाइनरी। cpio, LZ4, gzip और xz सभी इन-प्रोसेस कार्यान्वित हैं |
| स्क्रिप्ट और बाइनरी को एमुलेटर में कॉपी करता है और वहीं स्वयं चलाता है | इमेज को पूरी तरह होस्ट पर बनाता है |
| हर रन पर `ramdisk.img` का बैकअप लेता है, इसलिए पहले पैच के बाद "प्राचीन" बैकअप स्वयं पैच हो जाता है और `restore` स्टॉक पर वापस नहीं लौट सकता | एक बार बैकअप लेता है, कभी अधिलेखित नहीं करता, और चेतावनी देता है यदि मौजूदा बैकअप पैच किया हुआ निकले |
| Magisk के पुराने `magisk32`/`magisk64` लेआउट के लिए पैच करता है | Magisk 26+ (`magiskinit`, `magisk`, `init-ld`, `.backup/.rmlist`) को कार्यान्वित करता है |
| रैमडिस्क पथ को तर्क के रूप में पेस्ट करने की आवश्यकता होती है | SDK, AVD और इमेज खोजता है, ओवरराइड के लिए `--sdk`/`--avd-home` के साथ |
| बिना शर्त रीबूट करता है और आशा करता है | कोल्ड बूट को बाध्य करता है और सत्यापित करता है कि `su` वास्तव में `uid=0` लौटाता है |
## इंस्टॉल
**प्रीबिल्ट बाइनरी** — अपने प्लेटफ़ॉर्म के लिए आर्काइव
[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 और macOS आर्काइव में एक ही निष्पादन योग्य फ़ाइल होती है; macOS पर आपको क्वारंटीन एट्रिब्यूट को साफ़ करने की आवश्यकता हो सकती है:```sh xattr -d com.apple.quarantine avdroot_darwin_arm64
हर रिलीज़ `SHA256SUMS.txt` भी प्रकाशित करती है:```sh
sha256sum -c SHA256SUMS.txt --ignore-missing
Go के साथ (1.24 या नया):```sh go install github.com/ejfkdev/avdroot@latest
Go 1.24 न्यूनतम आवश्यकता है क्योंकि पुराने टूलचेन कोई `LC_UUID` लोड कमांड उत्पन्न नहीं करते,
और macOS 26 का `dyld` ऐसी बाइनरी को लॉन्च करने से इनकार कर देता है। Go 1.21 और 1.22 भी
`minos 26.0` अंकित करते हैं, इसलिए वे दोनों मामलों में विफल हो जाते हैं।
**स्रोत से:**```sh
git clone https://github.com/ejfkdev/avdroot
cd avdroot
make build # host binary
make all # every release target into dist/
आपको adb और एमुलेटर के साथ एक Android SDK, और एक google_apis या
AOSP सिस्टम इमेज की भी आवश्यकता होगी। Play Store इमेज को इस तरह से रूट नहीं किया जा सकता: वे
adb root से इनकार कर देती हैं, इसलिए patch और root उन्हें तुरंत अस्वीकार कर देते हैं, बजाय कई मिनट बाद विफल होने के।
avdroot list # what exists, and what state it is in avdroot root # patch, restart, install the app, grant su, verify
यह पूरी बात है। `root` को AVD नाम की आवश्यकता नहीं होती जब केवल एक मौजूद हो, एक बार पुष्टि मांगता है, और जब stdin टर्मिनल न हो तो प्रश्न को पूरी तरह छोड़ देता है:```sh
avdroot root Pixel_10_Pro_XL --yes # named AVD, unattended
यदि आप इसे चरणों में करना पसंद करेंगे:```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
पूर्ववत करने के लिए:```sh
avdroot restore # restores ramdisk.img.backup
| कमांड | विवरण |
|---|---|
avdroot root [target] | पैच, रीस्टार्ट, इंस्टॉल, su ग्रांट, सत्यापन — बिना निगरानी |
avdroot patch [target] | केवल रैमडिस्क पैच करें; लिखने से पहले पूछता है |
avdroot restore [target] | ramdisk.img.backup से रीस्टोर करें |
avdroot list | AVDs, सिस्टम इमेज और उनकी पैच स्थिति |
avdroot status [target] | एक टारगेट के विवरण, जिसमें preinit डिवाइस शामिल है |
avdroot verify [target] | जांचें कि Magisk चलता है और su uid=0 लौटाता है |
avdroot install | चल रहे एमुलेटर में Magisk ऐप इंस्टॉल करें |
avdroot magisk info | कौन सा इंस्टॉलर उपयोग किया जाएगा, और यह क्या सपोर्ट करता है |
avdroot magisk fetch | रिलीज़ डाउनलोड करें (--list, --version, --prerelease) |
avdroot trust-chrome | Chrome को इंटरसेप्शन CA स्वीकार करने दें (--cert, --clear) |
avdroot doctor | बताएं कि प्रत्येक पथ कैसे खोजा गया |
एक टारगेट एक AVD नाम, एक सिस्टम-इमेज पथ, या ramdisk.img का पथ होता है।
avdroot <command> --help प्रत्येक के लिए उदाहरण दिखाता है।
ये प्रत्येक कमांड पर लागू होते हैं: