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

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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

Требования:

инструкции

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

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

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

enter image description here


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

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

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

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


  1. Нажатие су бина в системном каталоге

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

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

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

adb root

adb remount

Теперь пришло время нажать су бина:

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

(неважно, о моем конкретном расположении су бинального, любое место в порядке, так как там не осталось пробелов)

note: Чтобы xbin что bin или xbin делают в консоли до:> adb shell ,> ls/system/xbin/su

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


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

    • Далее давайте немного изменим разрешения su бинарных файлов. Мы должны сделать это в эмуляторе через adb:

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

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


  1. Установка директивы install на su binary и установка daemon

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

su --install

и для установки демона:

su --daemon&

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


  1. Установка SELinux в Permissive (т.е. отключение SE Linux)

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

setenforce 0


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

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


Это в значительной степени это!

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

enter image description here

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

Обновление:

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

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

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

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

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

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

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

Протестировано на уровне API 22

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

замечания

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

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

Ответ 3

Вот список команд, которые вы должны запускать во время работы эмулятора, я тестирую это решение для 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. Вам нужно запускать эти команды каждый раз при запуске эмулятора. Вы можете написать script, который запустит эмулятор и запустит его.

Ответ 4

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

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. Запустить его. Вы получаете временный root для текущего прогона.

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

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

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

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

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

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

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

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

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

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

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

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


Для android 7 вам нужно выполнить дополнительные действия: 1. Нужно запустить эмулятор вручную. Перейдите в папку 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 эмулятор-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 binary - тогда вы загружаете в эмулятор неправильно двоичный файл. Вы должны загрузить двоичный файл с именем su.pie внутри архива, но на эмуляторе его нужно назвать su, а не su.pie.

Ответ 5

Я считаю, что самый простой способ - создать псевдоним для команды 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 и выше.

Ответ 6

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

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

Ответ 7

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

В Andy (Корневая оболочка) [Чтобы получить, щелкните правой кнопкой мыши значок HandyAndy и выберите "Слой термина" ]

Внутри оболочки запустите следующие команды:

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 бинарный снова. Теперь root работает!

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

Я просто заменил и присвоил атрибуты 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 видит root. Но я не обновляю двоичный файл