Wie bekomme ich Root-Zugriff auf Android Emulator?

146

Ich habe alle Android SDK-Versionen (von 1.5 bis 2.3.3) und habe viele Methoden ausprobiert, um im Android-Emulator root zu werden. Ich benutze kein Android-Gerät und teste alles auf dem Emulator (AVD).

Ich muss Root-Zugriff in einem der Android-Emulatoren erhalten, um die Funktionen "iptables" und "Busybox" nutzen zu können. Und um iptables verwenden zu können, muss ich Root-Zugriff haben. Mindestens der Befehl 'su' sollte im Terminalemulator ausgeführt werden.

Ich habe auch z4rootAnwendung installiert ,

Aber es dauert sehr lange und endet nicht mit dem Wurzeln und bleibt stecken. Einige sagen, wenn wir das System auf unter RC30 herunterstufen, können wir auf diese Weise Root-Zugriff erhalten. Wenn dies wahr ist, wie geht das? Ich benutze sowohl Linux als auch Windows.

Bitte jemand sagt mir eine Methode, um meinen Emulator zu rooten.

Preetam
quelle
Ich denke, Sie können "Root.apk" verwenden, das auf Filecrop (VISIONary in Android System) gespeichert ist, um den Emulator zu rooten, da er bei jedem Neustart das System rootet. Z4root kann nicht funktionieren, da ein Neustart erforderlich ist, damit der Root-Zugriff funktioniert. Tut mir leid für schlechtes Englisch, ich bin Franzose.
JeremLeOuf
Wo kann ich das bekommen? Gibt es dafür ein Handbuch?
Android-Entwickler
6
Bitte beachten Sie, dass Android-Emulatoren bereits "gerootet" sind. Sie müssen nichts tun, um eine Root-ADB-Shell zu erhalten, da diese standardmäßig bereits als Root ausgeführt wird. Was hier besprochen wird, ist die Installation eines gehackten "su" oder eines ähnlichen Shims, damit der Anwendungscode Hilfsprogramme starten kann, die als root ausgeführt werden.
Chris Stratton
2
Verwenden Sie Genymotion genymotion.com Es ist sehr schnell und hat standardmäßig root.
klimat
1
Sie haben das falsche Image installiert. siehe hier -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Antworten:

135

Diese Antworten sind alle unnötig kompliziert :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
JRaymond
quelle
52
Das Ausführen von adb rootErgebnissen in "adbd kann in Produktionsbuilds nicht als Root ausgeführt werden". Verwenden Sie einen bestimmten Emulator? Bitte geben Sie weitere Details an.
Orodbhen
3
Sie können diesen Stamm für keine App verwenden.
Enyby
5
Wenn jemand versucht, dies auf den neuen Google Play-Systemabbildern zum Laufen zu bringen, ist adbd in ramdisk.img auf Sicherheit eingestellt. Ich konnte es mithilfe von ramdisk.img aus dem Google APIs-Image umgehen. Ich habe sowohl die 7.0- als auch die 8.0-Bilder getestet.
tstaylor7
46
Wenn adb rootder Fehler auftrittadbd cannot run as root in production builds , lesen Sie stackoverflow.com/a/45668555/1682419 - Sie benötigen ein "Google APIs- Systemabbild " anstelle eines "Google Play-Systemabbilds".
Jerry101
10
@JRaymond Ich habe adb root eingegeben, aber danach wurde nichts mehr ausgedruckt
75

Wie root Android Emulator (getestet auf Android 7.1.1 / Nougat)

Anforderungen :

Anleitung

  1. Installieren Sie die SuperSu.apk

    • Installieren Sie zuerst die SuperSu-App, ziehen Sie sie einfach per Drag & Drop (wenn Sie die neueste Emulatorversion ausführen oder über adb seitenladen, dh adb -e install supersu.apk)

    • Nach der Installation wird beim Ausführen ein Bildschirm wie unten gezeigt angezeigt, der anzeigt, dass keine SU-Binärdatei installiert ist. Dieser Fehler bestätigt nur, dass das Gerät noch nicht gerootet ist.

Geben Sie hier die Bildbeschreibung ein


  1. Machen Sie die Systempartition des Emulators beschreibbar

    • Wie vorgeschlagen, müssen wir dem Emulator die Berechtigung zum Schreiben von Systemdateien erteilen.

    • Geben Sie dazu den folgenden Code ein: emulator -avd {emulator_name} -writable-system

Wenn Sie mehr als eine AVD haben, können Sie mit dem folgenden Befehl eine Liste der AVDs abrufen: emulator -list-avds

Hinweis: Navigieren Sie zu dem Ordner " tools ", in dem Android SDK installiert ist, und öffnen Sie dort die Eingabeaufforderung, indem Sie die Umschalttaste drücken und mit der rechten Maustaste klicken.


  1. Push-Binärdatei im Systemverzeichnis

    • Extrahieren Sie die Datei flashable.zip (mit den Binärdateien verschiedener Architekturen).

Wichtig! Verwenden Sie nur die su-Binärdatei, die Ihrer avd-Architektur entspricht, z. B. x86, arm usw., und notieren Sie den Pfad, in den Sie diese Binärdateien extrahiert haben.

  • Stellen Sie sicher, dass Sie adb als root ausführen und erneut bereitstellen müssen. Geben Sie einfach diese Codes ein

adb root

adb remount

Jetzt ist es Zeit, die su-Binärdatei zu pushen:

Dies ist der Code, den ich erfolgreich verwendet habe :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(Vergiss meinen spezifischen Speicherort für su binary, jeder Speicherort ist in Ordnung, solange kein Leerzeichen vorhanden ist.)

Hinweis: Um dies vorher in der Konsole herauszufinden binoder zu xbintun:> adb shell,>ls /system/xbin/su

Wenn dies fehlschlägt, versuchen Sie stattdessen, in dieses Verzeichnis zu pushen /system/xbin/su. Auch für Emulatoren mit Android 5.1 und darunter verwenden Sie die suund nichtsu.pie


  1. Ändern Sie die Berechtigungen der su-Binärdatei

    • Als nächstes nehmen wir einige Änderungen an den Berechtigungen von su binary vor. Wir müssen dies im Emulatorgerät über adb tun:

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

Wichtig!! Beachten Sie den binären Pfad su (meiner ist / system / bin)


  1. Setzen Sie die installDirektive auf su binary und setzen Sie adaemon

Geben Sie die Codes ein:

su --install

und zum Einrichten des Daemons:

su --daemon&

Wichtig!! Beachten Sie den Abstand


  1. SELinux auf Permissive setzen (dh SE Linux ausschalten)

    • Schalten Sie schließlich Selinux über diesen Code aus:

setenforce 0


  1. Öffnen Sie die SuperSU-App und Sie werden möglicherweise aufgefordert, die Binärdateien zu aktualisieren. Sie können die normale Methode verwenden.

Hinweis: Wenn Bootloops auftreten, aktualisieren Sie die Binärdateien lieber nicht, sondern verwenden Sie sie einfach so, wie sie sind.


Das wars so ziemlich!!

Öffnen Sie alle Anwendungen, für die SU-Berechtigungen erforderlich sind, und überprüfen Sie SuperSU, ob Sie ihr su-Berechtigungen erteilen möchten.

Geben Sie hier die Bildbeschreibung ein

Damit das Root-Update su binär aktualisiert wird (mit der Normal-Methode), kopieren Sie system.img aus dem temporären Verzeichnis ( Users\AppData\Local\Temp\Android Emulatordie Datei wird normalerweise zufällig benannt, z. B. 1359g.tmpmit einer großen Größe) und ersetzen Sie die Standardeinstellung system.img.

Update :

Ich habe festgestellt, dass es unter Linux einfacher ist, ein temporäres System-Image zu erhalten als unter Windows. Sie können versuchen, ein Schnappschussbild zu verwenden.

Update 4. August 2018

Mit dem Aufkommen des Emulators 27.3.xwird das Beibehalten des Stamms durch die Snapshot-Funktion erheblich vereinfacht (wenn das Kopieren der system.imgMethode nicht funktioniert):

Im Idealfall ähnelt es eher dem Ruhezustand des virtuellen Geräts mit intakter Konfiguration, daher bleibt alles erhalten.

Schnappschüsse

Sie können jetzt mehrere AVD-Snapshots für eine bestimmte Gerätekonfiguration speichern und auswählen, welche der gespeicherten Snapshots beim Starten des Emulators geladen werden sollen. Das Starten eines virtuellen Geräts durch Laden eines Snapshots ähnelt dem Aufwecken eines physischen Geräts aus dem Ruhezustand, im Gegensatz zum Booten aus dem ausgeschalteten Zustand.

Dies impliziert, dass die einzige Voraussetzung zum Starten des Emulators das Hinzufügen des -writable-systemParameters zum normalen emulator -avd [avdname]Befehl zum Starten des Emulators ist. ( Wenn Sie den Emulator nur mit emulator -avd [avdname]ausführen, wird die gerootete Version / Kopie nicht gestartet oder es kann zu einem Fehler kommen. )

Getestet auf API-Ebene 22

Weitere Informationen zu Bootloop-Problemen finden Sie im anderen Beitrag: Android-Emulator: Wie vermeide ich eine Boot-Schleife nach dem Rooten? und Aktualisierungen davon.

Bemerkungen

Der meiste Referenzinhalt war für ältere Android-Versionen und daher der Grund für verschiedene Befehle und Pfade, die ich geändert habe.

Danksagung;

xavier_fakerat
quelle
1
Hinweis: Um herauszufinden, bin oder xbin tun in der Konsole vor:> ADB-Shell,> ls / system / xbin / su
djdance
1
@xavier_fakerat Ja, ich habe die Aktualisierung der Binärdateien gestoppt. Das Problem ist, dass ich nach jedem Neustart den Computer erneut bereitstellen und su --install && su --daemon&auf dem Emulator ausführen muss , gefolgt von setenforce 0Root. Kennen Sie eine dauerhafte Lösung für root beim Neustart?
Cristian Holdunu
1
Nett! Diese Methode funktioniert auch für reale Geräte, auf die Sie über adb auf root zugreifen können.
Mygod
1
Sie haben mir geantwortet, warum der Android-Emulator nach dem Rooten des Bildes unerwartet geschlossen wird, wenn das beschreibbare System nicht verwendet wird. Es liegt an den Schnappschüssen.
Rodrirokr
1
Ich benutze Pixel 2 XL: Leute scheinen das gleiche Problem mit dem Pixel XL zu haben: forum.xda-developers.com/pixel-xl/how-to/…
noraj
33

Hier ist die Liste der Befehle, die Sie ausführen müssen, während der Emulator ausgeführt wird. Ich teste diese Lösung für einen AVD unter 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

Es wird davon ausgegangen, dass sich die su-Binärdatei im Arbeitsverzeichnis befindet. Su und Superuser finden Sie hier: http://forum.xda-developers.com/showthread.php?t=682828 . Sie müssen diese Befehle jedes Mal ausführen, wenn Sie den Emulator starten. Sie können ein Skript schreiben, das den Emulator startet und root.

abd
quelle
15
Bitte fügen Sie hier die relevanten Teile Ihres Blogposts hinzu. SO ist ein Ort für Antworten, keine Links.
CHao
2
Keine solche Datei oder Verzeichnis 'SU'
Mahendran
4
Dies funktioniert nicht auf Emulator 2.2, 2.3 oder 2.3.3. Ich erhalte nur Fehler für ADB Push: Nicht genügend Speicher, Verzeichnis ist nicht leer usw.
Zeiger Null
2
@mice: Wie der Fehler besagt, können Sie die Binärdatei nicht pushen, da auf dem virtuellen Gerät nicht genügend Speicherplatz vorhanden ist. Beim Starten des Emulators können Sie die -partition-sizeOption zum Festlegen der Partitionsgröße hinzufügen . Versuchen Sie, Ihren Emulator mittools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd
2
Bei neueren Emulatoren funktioniert der Remount-Befehl möglicherweise nicht. Sie können Folgendes ersetzen adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system : adb root adb remount
Kamran Ahmed,
20

Für AVD mit 5.1.1 und 6.0 habe ich das nächste Skript in Windows verwendet:

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

Benötigen Sie UPDATE.zip von SuperSU. Entpackte sie in einen beliebigen Ordner. Erstellen Sie eine Bat-Datei mit dem obigen Inhalt. Vergessen Sie nicht, die erforderliche Architektur und das erforderliche Gerät anzugeben: set adb=adb -s emulator-5558und set arch=x64. Wenn Sie Android über oder gleich 5.0 ausführen, wechseln Sie set pie=zu set pie=.pie. Starte es. Sie erhalten einen temporären Stamm für den aktuellen Lauf.

Wenn bei der erneuten Bereitstellung der Systempartition ein Fehler aufgetreten ist, müssen Sie AVD über die Befehlszeile starten. Siehe unten erster Schritt für Android 7.

Wenn Sie es dauerhaft machen möchten, aktualisieren Sie die Binärdatei in SuperSU und speichern Sie system.img aus dem temporären Ordner als Ersatz für die Standardeinstellung system.img.

So konvertieren Sie die resultierende temporäre Wurzel in eine permanente

Erstens - es geht an SuperSu. Es bietet ein binäres Upgrade. Update auf normale Weise. Neustart ablehnen.

Zweitens - nur für Emulatoren relevant. Die gleiche AVD. Unter dem Strich werden Änderungen im Systemabbild nicht gespeichert. Sie müssen sie für sich behalten.

Es gibt bereits Anweisungen, die für verschiedene Emulatoren variieren.

Für AVD können Sie versuchen, eine temporäre Datei system.img zu finden, sie irgendwo zu speichern und beim Starten des Emulators zu verwenden.

In Windows befindet es sich in der %LOCALAPPDATA%\Temp\AndroidEmulatorund hat einen Namen wie TMP4980.tmp.

Sie kopieren es in einen Ordner avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) und benennen es in um system.img.

Jetzt wird es zu Beginn anstelle des üblichen verwendet. Richtig, wenn das Image im SDK aktualisiert wird, hat es das alte.

In diesem Fall müssen Sie dies entfernen system.imgund den Vorgang bei seiner Erstellung wiederholen.

Ausführlicheres Handbuch in russischer Sprache: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Für Android 7 müssen Sie zusätzliche Schritte ausführen: 1. Emulator manuell ausführen. Gehen Sie zum SDK-Ordner sdk\tools\lib64\qt\lib. Führen Sie diesen Ordner-Emulator mit folgenden Optionen aus -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. Sie müssen adbdvon root neu starten :

    adb -s emulator-5554 root

Und Remount-System:

adb -s emulator-5554 remount

Es kann nur einmal pro Laufemulator gespendet werden. Und jedes andere Remount kann den Schreibmodus unterbrechen. Aus diesem Grund müssen Sie keine anderen Befehle mit Remount ausführen, wie z mount -o remount,rw /system.

Andere Schritte bleiben gleich - laden Sie Binärdateien hoch, führen Sie Binärdateien als Daemon aus und so weiter.

Bild von AVD Android 7 x86 mit root: AVD Android 7 x86 mit root


Wenn beim Ausführen der suBinärdatei ein Fehler in Bezug auf PIE angezeigt wird, wird eine falsche Binärdatei in den Emulator hochgeladen. Sie müssen eine su.pieim Archiv benannte Binärdatei hochladen , auf dem Emulator muss sie jedoch als sunicht benannt sein su.pie.

Enyby
quelle
Können Sie mir die Schritte erklären, um die Wurzel dauerhaft zu machen?
Satya
update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby
Ich habe diese Schritte verwendet, um die system.img von temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) diese system.img von temp in den System-Images von Android SDK zu kopieren. Aber wenn ich Starten Sie den Emulator neu, dann befindet sich der Emulator nicht im Root-Status ... Bitte führen Sie mich auf dem richtigen Weg
Satya
besser in avd verzeichnis kopieren. Aber zuerst müssen Sie die Binärdatei in SuperSu im normalen Modus aktualisieren.
Enyby
Ich habe die Binärdatei im normalen Modus aktualisiert und in das AVD-Verzeichnis kopiert, dann bleibt auch root nicht bestehen
Satya
13

Ich glaube, dass der einfachste Weg darin besteht, einen Alias ​​für den Befehl zu erstellen sh, z

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

Getestet mit Android Emulator 3.0 und höher.

Neuling
quelle
Dies funktionierte auch für mich (auf x86_64 android 5.02 Emulator), während der obige Vorschlag zur Installation in xbin dies nicht tat.
Yannick
7
Ich habemount: '/system' not in /proc/mounts
Kenny Wyland
System fehlgeschlagen mit 72
Duna
3

Hier mein Rucksack mit allem was du brauchst. Oder Sie können dieses Skript verwenden:

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
quelle
2

Ich habe gerade Attribute für su ersetzt und ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img zugewiesen und jetzt auf Android 5 habe ich immer root, auch für neue Systeme, es reicht aus, SuperSu zu installieren. apk

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

Danach sieht SuperSu.apk root. Aber ich aktualisiere die Binärdatei nicht

xWeb
quelle
1

Ich habe einen Teil der Methode aus den obigen Lösungen verwendet. Sie funktionierten jedoch nicht vollständig. Bei der neuesten Version von Andy hat das bei mir funktioniert:

Auf Andy (Root Shell) [Um zu erhalten, klicken Sie mit der rechten Maustaste auf das HandyAndy-Symbol und wählen Sie Term Shell]

Führen Sie in der Shell die folgenden Befehle aus:

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

Installieren Sie dann SuperSU und installieren Sie die SU-Binärdatei. Dies ersetzt die soeben erstellte SU-Binärdatei. (Optional) Entfernen Sie SuperSU und installieren Sie Superuser per CWM. Installieren Sie die su-Binärdatei erneut. Jetzt funktioniert root!

obc7787
quelle
1

Ich habe viele der oben genannten Vorschläge ausprobiert, einschließlich SuperSU, und konnte keine zum Laufen bringen, fand aber etwas viel Einfacheres, das für meine Zwecke funktionierte. In meinem Fall wollte ich SQLite nur an der Eingabeaufforderung ausführen können. Ich habe einfach einen Emulator mit einer älteren Version von Android (Lollipop) hochgefahren und sofort Root-Zugriff erhalten.

Alan Todtenkopf
quelle
-1

Ich habe festgestellt, dass der Standard-API 23 x86_64-Emulator standardmäßig gerootet ist.

Vladimir Berezkin
quelle
Nur weil Sie bei der Eingabe von "adb root" ein # haben, bedeutet dies nicht, dass Apps die Vorteile von Root-Rechten nutzen können. Jeder Versuch, irgendwo in / system zu schreiben, führte zu einem RO-Fehler, selbst wenn versucht wurde, ihn erneut als RW bereitzustellen.
Fusseldieb