
تجاوز حماية محاكي Android Studio للحصول على صلاحيات الجذر عن طريق تعديل ramdisk الخاص به باستخدام Magisk — بلغة Go الخالصة.
احصل على صلاحيات الجذر (root) لمحاكي Android Studio عبر تعديل الـ ramdisk الخاص به باستخدام Magisk — بلغة Go الخالصة.
يأخذ avdroot جهازًا افتراضيًا (AVD) من بداية باردة إلى صدفة جذر (root shell) عاملة بأمر واحد. يحدث كل شيء على المضيف: يتم فك ضغط الـ ramdisk، وإعادة كتابته بحيث يستبدل init الخاص بـ Magisk المسار /init، ثم إعادة ضغطه. لا يحتاج بناء الصورة إلى أي shell script، ولا 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)
- [التقاط HTTPS من Chrome](#capturing-https-from-chrome)
- [دعم المنصات](#platform-support)
- [لغة المخرجات](#output-language)
- [التطوير](#development)
- [الشكر والترخيص](#credits-and-licence)
## لماذا أداة أخرى
[rootAVD](https://github.com/newbit1/rootAVD) كان الرائد في هذا المجال ولا يزال
المرجع لهذه التقنية، لكنه لم يواكب إصدارات Android وMagisk الحديثة. تشغيله
على AVD بنظام Android 17 يُظهر المشكلات بوضوح، وكل واحدة منها مُعالجة هنا:
| سلوك rootAVD | avdroot |
|---|---|
| يتطلب `bash` و`busybox` و`unzip` و`xxd` و`strings` و`dd` و`cpio` وأدوات GNU `stat`/`sed` (التي تختلف على macOS) | ملف Go ثنائي واحد ثابت. cpio وLZ4 وgzip وxz كلها مُنفَّذة داخل العملية |
| ينسخ السكربت مع الملفات الثنائية إلى المحاكي ويشغّل نفسه هناك | يبني الصورة بالكامل على المضيف |
| ينسخ احتياطيًا `ramdisk.img` في كل تشغيل، لذا بعد أول تعديل يصبح النسخ الاحتياطي "النقي" نفسه معدَّلًا ولا يمكن لـ `restore` العودة إلى الحالة الأصلية | ينسخ احتياطيًا مرة واحدة، ولا يستبدل أبدًا، ويحذّر إذا تبيّن أن نسخة احتياطية موجودة معدَّلة |
| يُعدّل لتخطيط `magisk32`/`magisk64` القديم في Magisk | يُنفّذ Magisk 26+ (`magiskinit`، `magisk`، `init-ld`، `.backup/.rmlist`) |
| يحتاج إلى لصق مسار ramdisk كوسيط | يكتشف SDK وAVDs والصور، مع `--sdk`/`--avd-home` للتجاوز |
| يعيد التشغيل دون شرط ويأمل أن ينجح | يفرض إقلاعًا باردًا ويتحقق من أن `su` يُرجع فعليًا `uid=0` |
## التثبيت
**ملفات ثنائية جاهزة** — خذ الأرشيف الخاص بمنصتك من
[الإصدارات](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`،
ويرفض `dyld` في macOS 26 تشغيل مثل هذا الملف التنفيذي. كما أن 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/
تحتاج أيضًا إلى Android SDK مع adb والمحاكي، وصورة نظام google_apis أو
AOSP. لا يمكن عمل root لصور 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] | ترقيع الـ ramdisk فقط؛ يسأل قبل الكتابة |
avdroot restore [target] | الاستعادة من ramdisk.img.backup |
avdroot list | أجهزة AVD وصور النظام وحالة ترقيعها |
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 | شرح كيفية تحديد موقع كل مسار |
الهدف (target) هو اسم AVD، أو مسار صورة نظام، أو مسار إلى ramdisk.img.
يعرض avdroot <command> --help أمثلة لكل منها.
تنطبق على كل أمر:
| العلم | التأثير |
|---|---|
--sdk PATH | جذر Android SDK، عندما يختار الاكتشاف الجذر الخطأ |
--avd-home PATH | المكان الذي توجد فيه تعريفات AVD |
--serial SERIAL | أي جهاز يُستخدم عند توصيل عدة أجهزة |
--magisk PATH | استخدام مُثبِّت Magisk محدد |
--abi ABI | تجاوز ABI المكتشف |
--compress FORMAT | تجاوز ضغط الـ ramdisk (gzip، lz4_legacy، lz4، xz) |
--preinit DEVICE | تجاوز جهاز كتلة preinit |
--lang | لغة الإخراج (en أو zh)، متجاوزةً إعدادات لغة النظام |
--no-adb | عدم الاتصال بمحاكٍ قيد التشغيل |
--no-download | عدم جلب مُثبِّت Magisk تلقائيًا أبدًا |