Как получить root-доступ на эмуляторе Android? - PullRequest
119 голосов
/ 23 февраля 2011

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

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

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

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

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

Ответы [ 10 ]

100 голосов
/ 18 октября 2016

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

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
62 голосов
/ 10 июня 2017

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

Требования

Инструкция

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

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

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

enter image description here


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

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

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

Примечание. Перейдите в папку tools , в которой установлен 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.

enter image description here

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

Обновление

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

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

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

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

Снимки

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

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

Проверено на уровне API 22 * ​​1246 *

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

Примечания

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

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

33 голосов
/ 22 мая 2011

Вот список команд, которые вы должны запускать во время работы эмулятора, я тестирую это решение для 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 и superuser здесь: http://forum.xda -developers.com / showthread.php? T = 682828 . Вам нужно запускать эти команды каждый раз, когда вы запускаете эмулятор. Вы можете написать скрипт, который запускает эмулятор и рутирует его.

19 голосов
/ 18 декабря 2015

Для 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 устройства (%HOMEPATH%\.android\avd\%AVD_NAME%.avd\) и переименовываете в system.img.

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

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

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


Для Android 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:

    adb -s emulator-5554 root

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

adb -s emulator-5554 remount

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

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

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


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

13 голосов
/ 29 мая 2014

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

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

Протестировано на эмуляторе Android 3.0 и выше.

2 голосов
/ 05 июня 2018

Попробуйте решить этот вопрос другим способом.

Используйте Genymotion вместо эмулятора Android по умолчанию.По умолчанию он рутирован.Это намного проще и больше похоже на обычный телефон.Это бесплатно для личного использования.

Я нашел этот вопрос, потому что я хочу установить Xposed Framework на Эмулятор Android по умолчанию.Эта установка требует рута и прошивки с пользовательским восстановлением (например, TWRP), оба сложны для Эмулятора Android по умолчанию.Наконец я воспользовался Genymotion, и все было сделано за считанные минуты.

2 голосов
/ 20 ноября 2017

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

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
1 голос
/ 27 октября 2017

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

1 голос
/ 10 марта 2016

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

На 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 снова.Теперь рут работает!

0 голосов
/ 10 октября 2018

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

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

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

...