Come ottenere l'accesso root sull'emulatore Android?


146

Ho tutte le versioni di Android SDK (dalla 1.5 alla 2.3.3) e ho provato molti metodi per ottenere il root nell'emulatore Android. Non utilizzo alcun dispositivo Android e testare tutto sull'emulatore (AVD).

Devo ottenere l'accesso come root in uno qualsiasi degli emulatori Android per utilizzare le funzionalità 'iptables' e 'busybox'. E per usare iptables devo avere l'accesso come root. Il comando 'su' di Atleast dovrebbe essere eseguito nell'emulatore di terminale.

Ho anche installato l' z4rootapplicazione,

Ma ci vuole molto tempo e non finisce il rooting e si blocca. alcuni dicono che se eseguiamo il downgrade del sistema al di sotto di RC30, in questo modo possiamo ottenere l'accesso come root. se questo è vero, allora come fare? Uso sia il sistema operativo Linux che quello Windows.

Per favore qualcuno mi dica qualsiasi metodo per eseguire il root del mio emulatore.


Penso che puoi usare "Root.apk" archiviato su filecrop (VISIONary nel sistema Android) per eseguire il root dell'emulatore perché, ad ogni riavvio, esegue il root del sistema. Z4root non funziona perché ha bisogno di riavviare per far funzionare l'accesso root. Scusate l'inglese cattivo, sono francese.
JeremLeOuf,

Dove posso trovarlo? C'è un manuale per questo?
sviluppatore Android

6
Si noti che gli emulatori Android sono già "rootati". Non è necessario eseguire alcuna operazione per ottenere una shell adb root, poiché per impostazione predefinita viene già eseguita come root. Ciò che viene discusso qui è l'installazione di un "su" compromesso o di uno shim simile per consentire al codice dell'applicazione di avviare programmi di supporto eseguiti come root.
Chris Stratton,

2
Usa Genymotion genymotion.com È molto veloce e ha radice per impostazione predefinita.
klimat,

1
hai installato l'immagine sbagliata. vedi qui -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Risposte:


136

Queste risposte sono tutte inutilmente complicate :)

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

52
L'esecuzione dei adb rootrisultati in "adbd non può essere eseguita come root nelle build di produzione". Stai usando un emulatore particolare? Si prega di fornire maggiori dettagli.
orodbhen,

3
Non puoi usare questa radice per nessuna app.
Enyby,

5
Se qualcuno sta cercando di farlo funzionare sulle nuove immagini del sistema Google Play, adbd è impostato per essere protetto in ramdisk.img. Sono stato in grado di aggirare il problema utilizzando ramdisk.img dall'immagine delle API di Google. Ho provato su entrambe le immagini 7.0 e 8.0.
tstaylor7,

47
Se adb rootviene visualizzato l'errore adbd cannot run as root in production builds, consultare stackoverflow.com/a/45668555/1682419 - È necessaria una "Immagine di sistema delle API di Google" anziché "Immagine di sistema di Google Play".
Jerry101,

10
@JRaymond Ho digitato adb root ma dopo non è stato stampato nulla

75

Come eseguire il root dell'emulatore Android (testato su Android 7.1.1 / Nougat)

Requisiti :

Istruzioni

  1. Installa SuperSu.apk

    • Installa prima l'app SuperSu, trascina e rilascia (se esegui l'ultima versione dell'emulatore o esegui il sideload tramite adb adb -e install supersu.apk)

    • Dopo averlo installato, quando lo esegui mostra una schermata come mostrato di seguito che indica "Non è installato alcun binario SU ...". Questo errore conferma semplicemente che il dispositivo non è ancora stato rootato.

inserisci qui la descrizione dell'immagine


  1. Rendi scrivibile la partizione di sistema dell'emulatore

    • Come suggerisce, dobbiamo autorizzare l'emulatore a scrivere i file di sistema.

    • Digitare il seguente codice per eseguire ciò: emulator -avd {emulator_name} -writable-system

Se hai più di un AVD, puoi ottenere un elenco di avd usando il comando: emulator -list-avds

Nota: vai alla cartella degli strumenti in cui è installato Android SDK e apri il prompt dei comandi premendo Maiusc e facendo clic con il tasto destro.


  1. Push su binario nella directory di sistema

    • Estrai il Recovery flashable.zip (contenente i binari di su di diverse architetture)

Importante! Usa solo il binario su che corrisponde alla tua architettura avd, ad esempio x86, arm ecc., E nota il percorso in cui hai estratto questi binari.

  • Assicurati di eseguire adb come root e anche di doverlo rimontare. Basta inserire questi codici

adb root

adb remount

Ora è il momento di spingere il binario su:

Questo è il codice che ho usato con successo :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(non importa la mia posizione specifica di su binary, qualsiasi posizione è ok fintanto che non c'è spazio bianco)

nota: per capire bino xbinfare in console prima di:> adb shell,>ls /system/xbin/su

Se questo non funziona provate questo a spingere per questa directory invece /system/xbin/su. Anche per gli emulatori che eseguono Android 5.1 e versioni precedenti utilizzare sue nosu.pie


  1. Modifica le autorizzazioni del binario su

    • Ora facciamo un po 'di modifica delle autorizzazioni di su binary. Dobbiamo farlo nel dispositivo di emulazione tramite adb:

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

Importante!! Prendi nota del percorso binario su (il mio è / system / bin)


  1. Impostare la installdirettiva su binario su e impostare adaemon

Digita i codici:

su --install

e per configurare il demone:

su --daemon&

Importante!! Prendi nota della spaziatura


  1. Impostazione di SELinux su Permissive (ovvero disattivazione di SE Linux)

    • Infine, disattiva selinux tramite questo codice:

setenforce 0


  1. Apri l'app SuperSU e potrebbe essere necessario aggiornare i file binari, puoi utilizzare il metodo normale.

Nota: se si verificano bootloops, piuttosto non aggiornare i file binari, basta usarlo così com'è.


È praticamente tutto !!

Apri qualsiasi applicazione che richiede autorizzazioni SU solo per ricontrollare e in effetti SuperSU ti chiede se desideri concederle su autorizzazioni.

inserisci qui la descrizione dell'immagine

Per fare in modo che il root persista aggiorna su binario (usando il metodo Normale), quindi copia system.img dalla directory temp ( Users\AppData\Local\Temp\Android Emulatoril file viene solitamente chiamato in modo casuale, ad es. 1359g.tmpCon una dimensione grande) e sostituisci quello predefinito system.img.

Aggiornamento :

Ho notato che è più facile ottenere un'immagine di sistema temporanea in Linux, rispetto a Windows. Puoi provare a usare l'immagine dell'istantanea.

Aggiornamento 4 agosto 2018

Con l'emergere dell'emulatore 27.3.xora rende la conservazione della radice molto più semplice attraverso la funzione snapshot (se la copia del system.imgmetodo non funziona):

Idealmente è più simile a hibernarig il dispositivo virtuale con configurazione intatta, quindi tutto viene preservato.

istantanee

Ora puoi salvare più istantanee AVD per una determinata configurazione del dispositivo e scegliere quale delle istantanee salvate caricare quando avvii l'emulatore. L'avvio di un dispositivo virtuale caricando un'istantanea è molto simile a riattivare un fisico da uno stato di sospensione, anziché avviarlo da uno stato spento.

Ciò implica che l'unico requisito per avviare l'emulatore è l'aggiunta del -writable-systemparametro al emulator -avd [avdname]comando normale per avviare l'emulatore. (L' esecuzione dell'emulatore solo con emulator -avd [avdname]non avvia la versione / copia rootata o può portare a qualche errore )

Testato a livello di API 22

Anche per i problemi di bootloop vedi l'altro post: Emulatore Android: come evitare il ciclo di avvio dopo il rooting? e relativi aggiornamenti.

Osservazioni

La maggior parte dei contenuti di riferimento era per le versioni precedenti di Android e quindi la ragione di diversi comandi e percorsi che ho modificato.

Ringraziamenti;


1
nota: per capire bin o xbin fare in console prima di:> adb shell,> ls / system / xbin / su
djdance

1
@xavier_fakerat sì, ho smesso di aggiornare i binari. Il problema è che dopo ogni riavvio devo rimontare la macchina ed eseguire su --install && su --daemon&l'emulatore, seguito da setenforce 0ottenere root. Conosci qualche correzione permanente per root al riavvio?
Cristian Holdunu,

1
Bello! Questo metodo funziona anche per dispositivi reali a cui puoi accedere a root tramite adb.
Mygod,

1
Mi hai risposto, perché l'emulatore Android si chiude inaspettatamente dopo aver effettuato il root dell'immagine quando non si utilizza -writable-system. È perché le istantanee.
Rodrirokr,

1
Sto usando Pixel 2 XL: le persone sembrano avere lo stesso problema con Pixel XL: forum.xda-developers.com/pixel-xl/how-to/…
noraj,

33

Ecco l'elenco dei comandi che devi eseguire mentre l'emulatore è in esecuzione, collaudo questa soluzione per un avd su 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

Presuppone che il binario su si trovi nella directory di lavoro. Puoi trovare su e superutente qui: http://forum.xda-developers.com/showthread.php?t=682828 . È necessario eseguire questi comandi ogni volta che si avvia l'emulatore. È possibile scrivere uno script che avvia l'emulatore e il root.


15
Includi qui le parti pertinenti del tuo post sul blog. SO è un posto per risposte, non per collegamenti.
cHao,

2
Nessun file o directory di questo tipo "SU"
Mahendran

4
Questo non funziona sull'emulatore 2.2, 2.3 o 2.3.3 Ottengo solo errori per push adb: memoria esaurita, dir non è vuoto, ecc.
Puntatore Null

2
@mice: come dice l'errore non è possibile eseguire il push del file binario perché non c'è spazio sufficiente sul dispositivo virtuale. All'avvio dell'emulatore è possibile aggiungere l' -partition-sizeopzione per specificare la dimensione della partizione. Prova ad avviare l'emulatore contools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd

2
Sugli emulatori più recenti il ​​comando di rimontaggio potrebbe non funzionare, è possibile sostituire: adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system con: adb root adb remount
Kamran Ahmed,

20

Per AVD con 5.1.1 e 6.0 ho usato lo script successivo in 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

Hai bisogno di UPDATE.zip da SuperSU. Li ho decompressi in qualsiasi cartella. Crea un file bat con il contenuto sopra. Non dimenticare di specificare l'architettura e il dispositivo necessari: set adb=adb -s emulator-5558e set arch=x64. Se esegui Android sopra o uguale a 5.0, set pie=passa a set pie=.pie. Eseguirlo. Ottieni root temporaneo per l'esecuzione corrente.

Se si verifica un errore nella partizione di sistema di rimontaggio, è necessario avviare AVD dalla riga di comando. Vedi sotto il primo passo per Android 7.

Se vuoi renderlo persistente, aggiorna il file binario in SuperSU e archivia system.img dalla cartella temporanea in sostituzione di system.img predefinito.

Come convertire la radice temporanea risultante su un permanente

Innanzitutto, va al SuperSu. Offre un aggiornamento binario. Aggiornamento in modo normale. Riavvia rifiuto.

Secondo - rilevante solo per gli emulatori. Lo stesso AVD. La linea di fondo è che i cambiamenti nell'immagine di sistema non verranno salvati. Devi tenerli per se stessi.

Esistono già istruzioni che variano per emulatori diversi.

Per AVD puoi provare a trovare un file system.img temporaneo, salvarlo da qualche parte e utilizzarlo all'avvio dell'emulatore.

In Windows si trova in %LOCALAPPDATA%\Temp\AndroidEmulatore ha un nome simile a TMP4980.tmp.

Lo si copia in una cartella avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) e si rinomina in system.img.

Ora verrà utilizzato all'inizio, invece del solito. Vero se l'immagine nell'SDK viene aggiornata, avrà quella vecchia.

In questo caso, dovrai rimuoverlo system.imge ripetere l'operazione alla sua creazione.

Manuale più dettagliato in russo: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Per Android 7 è necessario eseguire ulteriori passaggi: 1. È necessario eseguire manualmente l'emulatore. Vai alla cartella sdk sdk\tools\lib64\qt\lib. Esegui da questo emulatore di cartelle con opzioni In -writable-system -selinux disabled questo modo:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. È necessario riavviare adbdda root:

    root adulator -s emulator-5554

E sistema di rimontaggio:

adb -s emulator-5554 remount

Può essere donato una sola volta per ogni emulatore. E qualsiasi altro rimontaggio può interrompere la modalità di scrittura. Per questo motivo non è necessario eseguire altri comandi con remaunt, come mount -o remount,rw /system.

Un altro passo rimane lo stesso: caricare binario, eseguire binario come demone e così via.

Immagine da AVD Android 7 x86 con root: AVD Android 7 x86 con root


Se viene visualizzato un errore relativo a PIE sull'esecuzione del file subinario, il caricamento viene eseguito sull'emulatore binario errato. Devi caricare il nome binario su.pieall'interno dell'archivio, ma sull'emulatore deve essere chiamato come su, non su.pie.


Puoi dirmi i passaggi per rendere persistente la radice?
Satya,

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

Ho usato questi passaggi per ottenere system.img da temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) copiato questo system.img da temp nelle immagini di sistema di Android SDK Ma quando riavvia l'emulatore quindi l'emulatore non è nello stato rootato ... Guidami per favore il percorso corretto
Satya

meglio copiare nella directory avd. ma prima devi aggiornare il binario in SuperSu in modalità normale.
Enyby,

Ho aggiornato il binario in modalità normale e copiato nella directory AVD, quindi anche il root non persiste
Satya,

13

Credo che il modo più semplice sia creare un alias per il comando sh, ad es

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

Testato su Android Emulator 3.0 e versioni successive.


Questo ha funzionato anche per me (sull'emulatore Android 5.02 x86_64) mentre il suggerimento sopra per l'installazione in xbin non lo ha fatto.
Yannick,

7
Ho avutomount: '/system' not in /proc/mounts
Kenny Wyland il

sistema fallito con 72
Duna

3

Qui il mio zaino con tutto ciò di cui hai bisogno. Oppure puoi usare questo 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

2

Ho appena sostituito e assegnato gli attributi per su a ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img e ora su Android 5 ho sempre il root anche per i nuovi sistemi, è sufficiente installare SuperSu. apk

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

successivamente, SuperSu.apk vede root. Ma non aggiorno il file binario


1

Ho usato parte del metodo dalle soluzioni sopra; tuttavia, non hanno funzionato completamente. Nell'ultima versione di Andy, questo ha funzionato per me:

Su Andy (Root Shell) [Per ottenere, fare clic con il tasto destro sull'icona HandyAndy e selezionare Term Shell]

All'interno della shell, esegui questi comandi:

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

Quindi, installa SuperSU e installa SU binario. Questo sostituirà il binario SU che abbiamo appena creato. (Opzionale) Rimuovere SuperSU e installare Superuser da CWM. Installa di nuovo il binario su. Ora, root funziona!


1

Ho provato molti dei suggerimenti di cui sopra, incluso SuperSU e non sono riuscito a farlo funzionare, ma ho trovato qualcosa di molto più semplice che ha funzionato per i miei scopi. Nel mio caso, volevo solo essere in grado di eseguire sqlite al prompt dei comandi. Ho semplicemente lanciato un emulatore con una versione precedente di Android (Lollipop) e ho ottenuto immediatamente l'accesso root.


-1

Ho scoperto che l'emulatore API 23 x86_64 predefinito è radicato per impostazione predefinita.


Da quello che so, solo perché hai un # quando digiti "adb root", non significa che le app possano trarre vantaggio dai privilegi di root. Qualsiasi prova per scrivere ovunque nel / sistema ha provocato un errore RO, anche provando a rimontarlo come RW.
Fusseldieb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.