Как получить root-доступ на эмуляторе Android?


146

У меня есть все версии Android SDK (от 1.5 до 2.3.3), и я пробовал много способов получения root в эмуляторе Android. Я не использую Android-устройства и все тестирую на эмуляторе (AVD).

Мне нужно получить root-доступ в любом из эмуляторов Android, чтобы использовать функции «iptables» и «busybox». И чтобы использовать iptables, я должен иметь root-доступ. Команда Atleast 'su' должна выполняться в эмуляторе терминала.

Я также установил z4rootприложение,

Но это занимает очень много времени и не заканчивает рутирование, и застревает. некоторые говорят, что если мы опустим систему до уровня ниже RC30, таким образом мы сможем получить root-доступ. если это правда, то как это сделать? Я использую как Linux, так и Windows.

Пожалуйста, кто-нибудь подскажет какой-нибудь способ рутировать мой эмулятор.


Я думаю, что вы можете использовать "Root.apk", хранящийся в filecrop (VISIONary в системе Android), чтобы рутировать эмулятор, потому что при каждой перезагрузке он рутирует систему. Z4root не может работать, потому что он требует перезагрузки, чтобы сделать доступ с правами root. Извините за плохой английский, я французский.
JeremLeOuf

Где я могу получить это? Есть ли руководство для этого?
Android-разработчик

6
Обратите внимание, что эмуляторы Android уже "рутированы". Вам не нужно ничего делать, чтобы получить корневую оболочку adb, так как она по умолчанию уже работает от имени root. Здесь обсуждается установка взломанного «su» или подобного shim, чтобы код приложения мог запускать вспомогательные программы, работающие от имени пользователя root.
Крис Страттон

2
Используйте Genymotion genymotion.com Это очень быстро и по умолчанию имеет root.
Климат

1
Вы установили образ wrnong. смотрите здесь -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Ответы:


136

Эти ответы все излишне сложны :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #

52
Запуск adb rootрезультатов в "adbd не может работать от имени пользователя root в производственных сборках". Вы используете определенный эмулятор? Пожалуйста, предоставьте больше деталей.
Ордбен

3
Вы не можете использовать этот корень для любого приложения.
Enyby

5
Если кто-то пытается заставить это работать с новыми образами системы Google Play, adbd должен быть защищен в ramdisk.img. Я смог обойти это, используя ramdisk.img из изображения API Google. Я тестировал изображения 7.0 и 8.0.
tstaylor7

47
Если adb rootвыдается сообщение об ошибке adbd cannot run as root in production builds, см. Stackoverflow.com/a/45668555/1682419 - Вам нужен «Системный образ API Google», а не «Системный образ Google Play».
Jerry101

10
@JRaymond Я набрал в корне adb, но после этого ничего не печаталось

75

Как получить root права на эмулятор Android (протестировано на Android 7.1.1 / Nougat)

Требования :

инструкции

  1. Установите SuperSu.apk

    • Сначала установите приложение SuperSu, просто сделайте перетаскивание (если вы используете последнюю версию эмулятора или загружаете через adb т.е. adb -e install supersu.apk)

    • После его установки при запуске отображается экран, показанный ниже, в котором указано «Нет установленного двоичного файла SU ...». Эта ошибка только подтверждает, что устройство еще не рутировано.

введите описание изображения здесь


  1. Сделать системный раздел эмулятора доступным для записи

    • Как и следует, нам нужно дать эмулятору разрешение на запись системных файлов.

    • Введите следующий код для этого: emulator -avd {emulator_name} -writable-system

Если у вас есть более одного AVD, вы можете получить список AVD с помощью команды: emulator -list-avds

Примечание. Перейдите в папку инструментов, где установлен Android SDK, и откройте командную строку, нажав клавиши Shift и правую кнопку мыши.


  1. Нажав su бинарный в системном каталоге

    • Извлеките Recovery flashhable.zip (содержащий наборы различных архитектур)

Важный! Используйте только двоичный файл su, соответствующий вашей архитектуре avd, например x86, arm и т. Д., И отметьте путь, по которому вы извлекли эти двоичные файлы.

  • Убедитесь, что вы используете ADB от имени пользователя root, а также вам нужно перемонтировать его. Просто введите эти коды

adb root

adb remount

Теперь пришло время нажать на двоичный файл su:

Это код, который я успешно использовал :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(не берите в голову мое специфическое местоположение su бинарного, любое местоположение хорошо, пока нет пробела)

примечание: чтобы выяснить binили xbinсделать в консоли до:> adb shell,>ls /system/xbin/su

Если это не удается, попробуйте вместо этого перейти в этот каталог /system/xbin/su. Также для эмуляторов под управлением Android 5.1 и ниже используйте suи неsu.pie


  1. Измените разрешения su бинарного

    • Далее давайте сделаем небольшую модификацию разрешений su bin. Мы должны сделать это в эмуляторе устройства через ADB:

    adb -e shell su root cd /system/bin chmod 06755 su

Важный!! Обратите внимание на двоичный путь su (мой - / system / bin)


  1. Установите installдирективу на двоичный файл su и установитеdaemon

Введите коды:

su --install

и для настройки демона:

su --daemon&

Важный!! Обратите внимание на расстояние


  1. Настройка SELinux на Permissive (т.е. отключение SE Linux)

    • Наконец выключите selinux через этот код:

setenforce 0


  1. Откройте приложение SuperSU и оно может попросить обновить двоичные файлы, вы можете использовать метод Normal.

Примечание: если вы испытываете загрузочные циклы, лучше не обновляйте двоичные файлы, просто используйте их как есть.


Это довольно много !!

Откройте любое приложение, для которого требуются разрешения SU, просто дважды проверьте, и, действительно, SuperSU спросит, хотите ли вы предоставить ему разрешения su.

введите описание изображения здесь

Чтобы корень сохранялся, обновите su bin (используя метод Normal), затем скопируйте system.img из временного каталога ( Users\AppData\Local\Temp\Android Emulatorфайл обычно называется случайным образом, например, 1359g.tmpс большим размером) и замените default system.img.

Обновление :

Я заметил, что получить временный образ системы в Linux легче, чем в Windows. Вы можете попробовать использовать снимок изображения.

Обновление 4 августа 2018

С появлением эмулятора 27.3.xэто теперь значительно упрощает сохранение root с помощью функции моментальных снимков (если копирование system.imgметода не работает):

В идеале это больше похоже на hibernarig виртуальное устройство с неповрежденным config, следовательно, все сохраняется.

моментальные снимки

Теперь вы можете сохранить несколько снимков AVD для данной конфигурации устройства и выбрать, какие из сохраненных снимков загрузить при запуске эмулятора. Запуск виртуального устройства путем загрузки снимка очень похож на выход физического из спящего режима, в отличие от загрузки его из выключенного состояния.

Это подразумевает, что единственным требованием для запуска эмулятора является добавление -writable-systemпараметра в обычную emulator -avd [avdname]команду для запуска эмулятора. ( Запуск эмулятора только с emulator -avd [avdname]не запускает рутированную версию / копию или может привести к некоторой ошибке )

Проверено на уровне API 22

Также о проблемах с загрузочным замком читайте в другом посте: Android Emulator: Как избежать цикла загрузки после рутирования? и их обновления.

замечания

Большая часть ссылочного содержимого была для более старых версий Android и, следовательно, причина различных команд и путей, которые я изменил.

Выражение признательности;


1
примечание: чтобы выяснить, что делает bin или xbin в консоли:> adb shell,> ls / system / xbin / su
djdance

1
@xavier_fakerat да, я перестал обновлять двоичные файлы. Проблема в том, что после каждой перезагрузки мне приходится перемонтировать машину и запускать su --install && su --daemon&на эмуляторе, а затем setenforce 0получить root. Знаете ли вы какое-либо постоянное исправление для root при перезагрузке?
Кристиан Холдуну

1
Ницца! Этот метод также работает для реальных устройств, которые вы можете получить доступ к root через ADB.
Mygod

1
Вы ответили мне, почему эмулятор Android неожиданно закрывается после рутирования изображения, когда не используется -writable-system. Это потому что снимки.
Родрирокр

1
Я использую Pixel 2 XL: Люди, похоже, имеют ту же проблему с Pixel XL: forum.xda-developers.com/pixel-xl/how-to/…
noraj

33

Вот список команд, которые вы должны запускать во время работы эмулятора, я тестирую это решение для avd на Android 2.2:

adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system  
adb push su /system/xbin/su  
adb shell chmod 06755 /system  
adb shell chmod 06755 /system/xbin/su

Предполагается, что двоичный файл su находится в рабочем каталоге. Вы можете найти su и суперпользователя здесь: http://forum.xda-developers.com/showthread.php?t=682828 . Вам нужно запускать эти команды каждый раз, когда вы запускаете эмулятор. Вы можете написать скрипт, который запускает эмулятор и рутирует его.


15
Пожалуйста, включите соответствующие части вашего блога здесь. Так что это место для ответов, а не ссылок.
cHao

2
Нет такого файла или каталога 'SU'
Mahendran

4
Это не работает на эмуляторе 2.2, 2.3 или 2.3.3. Я получаю только ошибки для adb push: недостаточно памяти, dir не пуст и т. Д.
Pointer Null

2
@mice: как говорит ошибка, вы не можете выдвинуть двоичный файл, потому что на виртуальном устройстве недостаточно места. При запуске эмулятора вы можете добавить -partition-sizeопцию для указания размера раздела. Попробуйте запустить эмулятор сtools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd

2
В новых эмуляторах команда remount может не работать, вы можете заменить: adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system на: adb root adb remount
Kamran Ahmed

20

Для AVD с 5.1.1 и 6.0 я использовал следующий скрипт в Windows:

set adb=adb -s emulator-5558
set arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% shell mount -o remount,rw /system
%adb% shell setenforce 0
%adb% install common/Superuser.apk
%adb% push %arch%/su%pie% /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push %arch%/su%pie% /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
rem %adb% shell mount -o remount,ro /system

exit /b

Нужен UPDATE.zip от SuperSU. Распаковал их в любую папку. Создайте файл bat с содержимым выше. Не забудьте указать необходимую архитектуру и устройство: set adb=adb -s emulator-5558а set arch=x64. Если вы используете Android выше или равно 5.0, измените set pie=на set pie=.pie. Запустить его. Вы получаете временный рут для текущего запуска.

Если вы получили ошибку при перемонтировании системного раздела, вам нужно запустить AVD из командной строки. Смотрите ниже первый шаг для Android 7.

Если вы хотите сделать его постоянным - обновите бинарный файл в SuperSU и сохраните system.img из временной папки вместо стандартного system.img.

Как конвертировать полученный временный корень в постоянный

Первое - это идет в SuperSu. Он предлагает бинарное обновление. Обновление нормальным способом. Перезагрузка отклонить.

Второе - актуально только для эмуляторов. Тот же AVD. Суть в том, что изменения в образе системы не будут сохранены. Вы должны сохранить их для себя.

Уже есть инструкции для разных эмуляторов.

Для AVD вы можете попытаться найти временный файл system.img, сохранить его где-нибудь и использовать при запуске эмулятора.

В Windows он находится в %LOCALAPPDATA%\Temp\AndroidEmulatorи имеет имя что-то вроде TMP4980.tmp.

Вы копируете его в папку avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) и переименовываете в system.img.

Теперь он будет использоваться на старте, вместо обычного. True, если изображение в SDK обновлено, оно будет иметь старое.

В этом случае вам нужно будет удалить это system.imgи повторить операцию по его созданию.

Более подробное руководство на русском языке: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Для андроида 7 нужно запустить дополнительные шаги: 1. Нужно запустить эмулятор вручную. Перейдите в папку SDK sdk\tools\lib64\qt\lib. Запустите из этой папки эмулятор с параметрами -writable-system -selinux disabled вроде этого:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. Вам нужно перезагрузиться adbdиз-под root:

    root adb -s emulator-5554

И система перемонтирования:

adb -s emulator-5554 remount

Это можно сделать только один раз за запуск эмулятора. И любой другой перемонтаж может нарушить режим записи. Из-за этого вам не нужно запускать какие-либо другие команды с перемонтированием, например mount -o remount,rw /system.

Остальные шаги остаются прежними - загрузите двоичный файл, запустите двоичный файл как демон и так далее.

Картинка с AVD Android 7 x86 с рутом: AVD Android 7 x86 с рутом


Если вы видите ошибку о PIE при выполнении suбинарного файла - тогда вы загружаете в эмулятор неверный бинарный файл. Вы должны загрузить двоичный файл с именем su.pieвнутри архива, но в эмуляторе он должен быть назван как su, а не su.pie.


Можете ли вы сказать мне шаги, чтобы сделать рут постоянным?
Сатья

update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby

Я использовал эти шаги, чтобы получить system.img из temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) скопировал этот system.img из temp в образы системы Android SDK Но когда я перезапустите эмулятор, после чего эмулятор не находится в рутированном состоянии ... Пожалуйста, укажите мне правильный путь
Satya

лучше скопировать в каталог avd. но сначала вы должны обновить бинарный файл в SuperSu в обычном режиме.
Enyby

Я обновил бинарный файл в обычном режиме и скопировал его в каталог AVD, после чего корень также не сохранился
Satya

13

Я считаю, что самый простой способ - создать псевдоним для команды sh, например

adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Проверено на Android Emulator 3.0 и выше.


Это сработало и для меня (на эмуляторе x86_64 android 5.02), в то время как предложение выше по установке в xbin не помогло.
Янник,

7
Я получилmount: '/system' not in /proc/mounts
Кенни Уайлэнд

система вышла из строя с 72
Дуна

3

Здесь мой пакет со всем, что вам нужно. Или вы можете использовать этот скрипт:

echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set arch=x86
set pie=

echo Close all ANDROID emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until ANDROID emulator loading and press any key
pause

%adb% start-server
%adb% root
%adb% remount
%adb% shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% push D:\SuperSU\su\%arch%\su.pie /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push D:\SuperSU\su\%arch%\su.pie /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
pause
exit /b

2

Я просто заменил и назначил атрибуты su для ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img, и теперь на Android 5 у меня всегда есть root даже для новых систем, достаточно установить SuperSu. APK

Android 6 is necessary only
adb root
adb shell
>/system/xbin/su --daemon &
>setenfoce 0

после этого SuperSu.apk видит рут. Но я не обновляю бинарный файл


1

Я использовал часть метода из решений выше; однако они не работали полностью. На последней версии Энди это сработало для меня:

На Andy (Root Shell) [Чтобы получить, щелкните правой кнопкой мыши значок HandyAndy и выберите Term Shell]

Внутри оболочки выполните эти команды:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Затем установите SuperSU и установите двоичный файл SU. Это заменит бинарный файл SU, который мы только что создали. (Необязательно) Удалите SuperSU и установите Superuser от CWM. Установите двоичный файл su снова. Теперь рут работает!


1

Я перепробовал многие из вышеперечисленных предложений, в том числе SuperSU, и не смог заставить их работать, но нашел что-то гораздо более простое, что сработало для моих целей. В моем случае я хотел иметь возможность запускать sqlite только из командной строки. Я просто запустил эмулятор со старой версией Android (Lollipop) и сразу получил root-доступ.


-1

Я обнаружил, что по умолчанию эмулятор API 23 x86_64 рутирован.


Из того, что я знаю, тот факт, что при вводе «adb root» у вас есть знак #, не означает, что приложения могут использовать преимущества привилегий root. Любая попытка записи в любом месте / system приводила к ошибке RO, даже пытаясь перемонтировать ее как RW.
Fusseldieb
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.