Jak uzyskać dostęp do roota na emulatorze Androida?

146

Mam wszystkie wersje Android SDK (od 1.5 do 2.3.3) i próbowałem wielu metod na uzyskanie roota w emulatorze Androida. Nie używam żadnego urządzenia z Androidem i testuję wszystko na emulatorze (AVD).

Aby móc korzystać z funkcji „iptables” i „busybox”, muszę uzyskać uprawnienia administratora w dowolnym emulatorze Androida. Aby używać iptables, muszę mieć uprawnienia administratora. Co najmniej polecenie „su” powinno być wykonywane w emulatorze terminala.

Zainstalowałem też z4rootaplikację,

Ale zajmuje to bardzo dużo czasu i nie kończy rootowania i utknie. niektórzy twierdzą, że jeśli obniżymy system do wersji poniżej RC30, w ten sposób uzyskamy dostęp do roota. jeśli to prawda, to jak to zrobić? Używam zarówno systemu operacyjnego Linux, jak i Windows.

Niech ktoś mi powie jakąkolwiek metodę rootowania mojego emulatora.

Preetam
źródło
Myślę, że możesz użyć "Root.apk" przechowywanego na filecrop (VISIONary w systemie Android), aby zrootować emulator, ponieważ przy każdym ponownym uruchomieniu powoduje rootowanie systemu. Z4root nie może działać, ponieważ wymaga ponownego uruchomienia, aby dostęp do roota działał. Przepraszam za zły angielski, jestem Francuzem.
JeremLeOuf
Gdzie mogę to dostać? Czy jest do tego instrukcja?
programista Androida
6
Należy pamiętać, że emulatory Androida są już „zrootowane”. Nie musisz nic robić, aby uzyskać główną powłokę adb, ponieważ domyślnie działa ona już jako root. Omówiono tutaj instalację zhakowanego "su" lub podobnej podkładki, aby umożliwić kodowi aplikacji uruchamianie programów pomocniczych działających jako root.
Chris Stratton,
2
Użyj Genymotion genymotion.com Jest bardzo szybki i domyślnie ma root.
klimat
1
zainstalowałeś wrnong obraz. patrz tutaj -> stackoverflow.com/questions/43923996/ ...
wwwwwwwwwwww

Odpowiedzi:

136

Te odpowiedzi są niepotrzebnie skomplikowane :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
JRaymond
źródło
52
Uruchamianie adb rootwyników w trybie „adbd nie może działać jako root w kompilacjach produkcyjnych”. Czy używasz konkretnego emulatora? Podaj więcej szczegółów.
orodbhen
3
Nie możesz używać tego roota dla żadnej aplikacji.
Enyby
5
Jeśli ktoś próbuje zmusić to do działania na nowych obrazach systemu Google Play, adbd jest ustawiony jako bezpieczny w ramdisk.img. Udało mi się to obejść, używając ramdisk.img z obrazu interfejsów API Google. Testowałem na obrazach 7.0 i 8.0.
tstaylor7
46
Jeśli adb rootwyświetla błąd adbd cannot run as root in production builds, wejdź na stackoverflow.com/a/45668555/1682419 - Potrzebujesz „Obraz systemu interfejsów API Google” zamiast „Obraz systemu Google Play”.
Jerry101,
10
@JRaymond Wpisałem adb root, ale nic nie zostało wydrukowane
75

Jak zrootować emulator Androida (testowany na Androidzie 7.1.1 / Nougat)

Wymagania :

Instrukcje

  1. Zainstaluj plik SuperSu.apk

    • Najpierw zainstaluj aplikację SuperSu, po prostu przeciągnij i upuść (jeśli używasz najnowszej wersji emulatora lub sideload przez adb ie adb -e install supersu.apk)

    • Po zainstalowaniu, po uruchomieniu wyświetla się ekran, jak pokazano poniżej, z informacją „Nie ma zainstalowanego pliku binarnego SU ..”. Ten błąd potwierdza tylko, że urządzenie nie jest jeszcze zrootowane.

wprowadź opis obrazu tutaj


  1. Udostępnij partycję systemową emulatora do zapisu

    • Jak sugeruje, musimy dać emulatorowi uprawnienia do zapisu plików systemowych.

    • Wpisz następujący kod, aby to osiągnąć: emulator -avd {emulator_name} -writable-system

Jeśli masz więcej niż jeden AVD, możesz uzyskać listę AVD za pomocą polecenia: emulator -list-avds

Uwaga: przejdź do folderu narzędzi, w którym jest zainstalowany Android SDK, i otwórz tam wiersz polecenia, naciskając klawisz Shift i klikając prawym przyciskiem myszy.


  1. Wysłanie pliku binarnego su do katalogu systemowego

    • Wyodrębnij plik Recovery flashable.zip (zawierający pliki binarne su różnych architektur)

Ważny! Używaj tylko pliku binarnego su, który pasuje do Twojej architektury avd, np. X86, arm itp., I zanotuj ścieżkę, w której rozpakowałeś te pliki binarne.

  • Upewnij się, że korzystasz z adb jako root i musisz ponownie zamontować. Po prostu wprowadź te kody

adb root

adb remount

Nadszedł czas, aby przesunąć plik binarny su:

Oto kod, którego z powodzeniem użyłem :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(nieważne o mojej konkretnej lokalizacji su binarnej, każda lokalizacja jest w porządku, o ile nie ma spacji)

Uwaga: Aby dowiedzieć się binlub xbinzrobić w konsoli wcześniej:> adb shell,>ls /system/xbin/su

Jeśli to się nie powiedzie, spróbuj zamiast tego wypchnąć do tego katalogu /system/xbin/su. Również w przypadku emulatorów z systemem Android 5.1 i starszym użyj sui niesu.pie


  1. Zmień uprawnienia pliku binarnego su

    • Następnie zróbmy trochę modyfikacji uprawnień pliku binarnego su. Musimy to zrobić na urządzeniu emulującym poprzez adb:

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

Ważny!! Zwróć uwagę na ścieżkę binarną su (moja to / system / bin)


  1. Ustawiając installdyrektywę na su binarny i ustaw plikdaemon

Wpisz kody:

su --install

i do skonfigurowania demona:

su --daemon&

Ważny!! Zwróć uwagę na odstępy


  1. Ustawienie SELinux na Permissive (tj. Wyłączenie SE Linux)

    • Na koniec wyłącz selinux za pomocą tego kodu:

setenforce 0


  1. Otwórz aplikację SuperSU i może poprosić o aktualizację plików binarnych, możesz użyć metody Normal.

Uwaga: jeśli doświadczasz pętli rozruchowych, raczej nie aktualizuj plików binarnych, po prostu używaj ich tak, jak jest.


To prawie wszystko !!

Otwórz dowolną aplikację wymagającą uprawnień SU, aby dokładnie sprawdzić, a SuperSU zapytaj, czy chcesz przyznać jej uprawnienia su.

wprowadź opis obrazu tutaj

Aby utrwalić aktualizację roota jako binarną (używając metody Normal), skopiuj system.img z katalogu tymczasowego ( Users\AppData\Local\Temp\Android Emulatorplik ma zwykle losową nazwę, np. O 1359g.tmpdużym rozmiarze) i zamień domyślny system.img.

Aktualizacja :

Zauważyłem, że łatwiej jest uzyskać tymczasowy obraz systemu w systemie Linux niż w systemie Windows. Możesz spróbować użyć migawki.

Aktualizacja 4 sierpnia 2018 r

Wraz z pojawieniem się emulatora 27.3.xznacznie ułatwia to zachowanie roota dzięki funkcji migawki (jeśli kopiowanie system.imgmetody nie działa):

Idealnie byłoby bardziej jak hibernarig wirtualnego urządzenia z nienaruszoną konfiguracją, stąd wszystko jest zachowane.

Migawki

Możesz teraz zapisać wiele migawek AVD dla danej konfiguracji urządzenia i wybrać, które z zapisanych migawek mają zostać załadowane po uruchomieniu emulatora. Uruchomienie urządzenia wirtualnego przez załadowanie migawki przypomina budzenie urządzenia fizycznego ze stanu uśpienia, w przeciwieństwie do uruchamiania go ze stanu wyłączonego.

Oznacza to, że jedynym wymaganiem do uruchomienia emulatora jest dodanie -writable-systemparametru do zwykłego emulator -avd [avdname]polecenia, aby uruchomić emulator. ( Uruchomienie emulatora tylko z emulator -avd [avdname]nie uruchamia zrootowanej wersji / kopii lub może prowadzić do błędu )

Testowane na poziomie API 22

Również w przypadku problemów z bootloopem zobacz inny post: Emulator Androida: Jak uniknąć pętli rozruchowej po rootowaniu? i ich aktualizacje.

Uwagi

Większość treści w odniesieniu do starszych wersji Androida, stąd powód dla różnych poleceń i ścieżek, które zmodyfikowałem.

Podziękowanie;

xavier_fakerat
źródło
1
Uwaga: Aby dowiedzieć się, kosza lub xbin zrobić w konsoli przed:> adb shell,> ls / system / xbin / su
djdance
1
@xavier_fakerat tak, przestałem aktualizować pliki binarne. Problem w tym, że po każdym restarcie muszę ponownie zamontować maszynę i uruchomić su --install && su --daemon&na emulatorze, a następnie setenforce 0uzyskać roota. Czy znasz jakieś trwałe rozwiązanie problemu roota przy ponownym uruchomieniu?
Cristian Holdunu
1
Miły! Ta metoda działa również w przypadku prawdziwych urządzeń, do których można uzyskać dostęp do roota przez adb.
Mygod
1
Odpowiedziałeś mi, dlaczego emulator Androida nieoczekiwanie zamyka się po zrootowaniu obrazu, gdy nie jest używany -writable-system. To dlatego, że migawki.
Rodrirokr
1
Używam Pixela 2 XL: Wydaje się, że ludzie mają ten sam problem z Pixelem
noraj
33

Oto lista poleceń, które musisz wykonać podczas działania emulatora, testuję to rozwiązanie dla avd na Androidzie 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

Zakłada, że ​​plik binarny su znajduje się w katalogu roboczym. Możesz znaleźć su i superuser tutaj: http://forum.xda-developers.com/showthread.php?t=682828 . Te polecenia należy uruchamiać za każdym razem, gdy uruchamiasz emulator. Możesz napisać skrypt, który uruchomi emulator i zrootuje go.

abd
źródło
15
Prosimy o uwzględnienie tutaj odpowiednich części swojego posta na blogu. SO to miejsce na odpowiedzi, a nie na linki.
cHao
2
Brak takiego pliku lub katalogu „SU”
Mahendran,
4
To nie działa na emulatorze 2.2, 2.3 lub 2.3.3 Dostaję tylko błędy dla wypychania adb: brak pamięci, katalog nie jest pusty itp.
Pointer Null
2
@mice: Jak mówi błąd, nie możesz przesłać pliku binarnego, ponieważ na urządzeniu wirtualnym nie ma wystarczającej ilości miejsca. Przy uruchamianiu emulatora można dodać -partition-sizeopcję określenia rozmiaru partycji. Spróbuj uruchomić emulator ztools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd
2
Na nowszych emulatorach polecenie remount może nie działać, możesz zastąpić adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system : adb root adb remount
Kamran Ahmed
20

Dla AVD z 5.1.1 i 6.0 użyłem następnego skryptu w 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

Potrzebujesz UPDATE.zip z SuperSU. Rozpakowałem je do dowolnego folderu. Utwórz plik bat z zawartością powyżej. Nie zapomnij określić niezbędnej architektury i urządzenia: set adb=adb -s emulator-5558i set arch=x64. Jeśli używasz Androida w wersji wyższej lub równej 5.0, zmień set pie=na set pie=.pie. Uruchom. Otrzymujesz tymczasowy root do bieżącego uruchomienia.

Jeśli pojawił się błąd przy ponownym zamontowaniu partycji systemowej, musisz uruchomić AVD z wiersza poleceń. Zobacz poniżej pierwszy krok dla Androida 7.

Jeśli chcesz, aby był trwały - zaktualizuj plik binarny w SuperSU i zapisz system.img z folderu temp jako zamiennik domyślnego system.img.

Jak przekonwertować wynikowy tymczasowy katalog główny na stały plik

Po pierwsze - trafia do SuperSu. Oferuje aktualizację binarną. Aktualizuj w normalny sposób. Reboot odrzuca.

Po drugie - dotyczy tylko emulatorów. To samo AVD. Najważniejsze jest to, że zmiany w obrazie systemu nie zostaną zapisane. Musisz je zatrzymać dla siebie.

Istnieją już różne instrukcje dla różnych emulatorów.

W przypadku AVD możesz spróbować znaleźć tymczasowy plik system.img, zapisać go gdzieś i użyć po uruchomieniu emulatora.

W systemie Windows znajduje się w %LOCALAPPDATA%\Temp\AndroidEmulatori ma nazwę podobną do TMP4980.tmp.

Kopiujesz go do folderu avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) i zmieniasz jego nazwę na system.img.

Teraz będzie używany na początku zamiast zwykłego. Prawda, jeśli obraz w SDK zostanie zaktualizowany, będzie miał stary.

W takim przypadku będziesz musiał to usunąć system.imgi powtórzyć operację przy jego tworzeniu.

Bardziej szczegółowa instrukcja w języku rosyjskim: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


W przypadku systemu Android 7 należy wykonać dodatkowe czynności: 1. Należy ręcznie uruchomić emulator. Przejdź do folderu sdk sdk\tools\lib64\qt\lib. Uruchom z tego emulatora folderu z opcjami takimi -writable-system -selinux disabled jak ta:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. Musisz zrestartować adbdz roota:

    emulator adb -s-5554 root

I ponownie zamontuj system:

adb -s emulator-5554 remount

Można go przekazać tylko raz na emulator przebiegu. Każde inne ponowne zamontowanie może przerwać tryb zapisu. Z tego powodu nie musisz uruchamiać żadnych innych poleceń z ponownym montowaniem, takich jak mount -o remount,rw /system.

Kolejne kroki pozostają takie same - prześlij plik binarny, uruchom plik binarny jako demon i tak dalej.

Zdjęcie z AVD Android 7 x86 z rootem: AVD Android 7 x86 z rootem


Jeśli widzisz błąd dotyczący PIE przy wykonywaniu supliku binarnego - przesyłasz do emulatora zły plik binarny. Musisz przesłać plik binarny o nazwie su.piewewnątrz archiwum, ale na emulatorze musi on mieć nazwę, a sunie su.pie.

Enyby
źródło
Czy możesz mi powiedzieć, jakie kroki należy wykonać, aby utrwalić root?
Satya
update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby
Użyłem tych kroków, aby pobrać system.img z temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) skopiowałem ten system.img z temp w obrazach systemu Android SDK Ale kiedy ja zrestartuj emulator to emulator nie jest w stanie zrootowanym ... Poprowadź mnie właściwą ścieżką
Satya
lepiej skopiuj do katalogu avd. ale najpierw musisz zaktualizować plik binarny w SuperSu w trybie normalnym.
Enyby
Zaktualizowałem plik binarny w trybie normalnym i skopiowałem do katalogu AVD, a następnie root również nie utrzymuje się
Satya
13

Uważam, że najłatwiej jest stworzyć alias do polecenia shnp

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

Testowane na Android Emulator 3.0 i nowszych.

Nowicjusz
źródło
To też zadziałało dla mnie (na emulatorze x86_64 android 5.02), podczas gdy powyższa sugestia instalacji w xbin nie.
Yannick
7
Dostałemmount: '/system' not in /proc/mounts
Kenny Wyland
system zawiódł 72
Duna
3

Tutaj mój pakiet ze wszystkim, czego potrzebujesz. Lub możesz użyć tego skryptu:

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
Andrew Zolotarev
źródło
2

Właśnie wymieniłem i przypisałem atrybuty su do ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img i teraz na Androidzie 5 zawsze mam roota nawet dla nowych systemów, wystarczy zainstalować SuperSu. apk

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

po tym SuperSu.apk widzi root. Ale nie aktualizuję pliku binarnego

xWeb
źródło
1

Wykorzystałem część metody z powyższych rozwiązań; jednak nie działały całkowicie. W najnowszej wersji Andy to zadziałało:

Na Andy (Root Shell) [Aby uzyskać, kliknij prawym przyciskiem myszy ikonę HandyAndy i wybierz Term Shell]

Wewnątrz powłoki uruchom następujące polecenia:

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

Następnie zainstaluj SuperSU i zainstaluj plik binarny SU. Zastąpi to plik binarny SU, który właśnie utworzyliśmy. (Opcjonalnie) Usuń SuperSU i zainstaluj Superuser przez CWM. Zainstaluj ponownie plik binarny su. Teraz root działa!

obc7787
źródło
1

Wypróbowałem wiele z powyższych sugestii, w tym SuperSU i nie mogłem uruchomić żadnej, ale znalazłem coś znacznie prostszego, co działało dla moich celów. W moim przypadku chciałem mieć możliwość uruchamiania sqlite w wierszu poleceń. Po prostu uruchomiłem emulator ze starszą wersją Androida (Lollipop) i natychmiast uzyskałem dostęp do roota.

Alan Todtenkopf
źródło
-1

Zauważyłem, że domyślny emulator API 23 x86_64 jest domyślnie zrootowany.

Vladimir Berezkin
źródło
Z tego, co wiem, tylko dlatego, że po wpisaniu „adb root” pojawia się znak #, nie oznacza to, że aplikacje mogą korzystać z uprawnień roota. Każda próba zapisu w dowolnym miejscu w / system zakończyła się błędem RO, nawet próba ponownego zamontowania go jako RW.
Fusseldieb