Como obter acesso root no emulador do Android?

146

Eu tenho todas as versões do Android SDK (de 1.5 a 2.3.3) e tentei vários métodos para obter root no emulador do Android. Não uso nenhum dispositivo Android e testo tudo no emulador (AVD).

Preciso obter acesso root em qualquer um dos emuladores Android para usar as funcionalidades 'iptables' e 'busybox'. E para usar o iptables, preciso ter acesso root. Pelo menos o comando 'su' deve ser executado no emulador de terminal.

Eu também instalei o z4rootaplicativo,

Mas leva muito tempo, não termina o enraizamento e fica preso. alguns dizem que, se fizermos o downgrade do sistema para abaixo de RC30, dessa forma, podemos obter acesso root. se isso for verdade, como fazer isso? Eu uso o sistema operacional Linux e Windows.

Por favor, alguém me diga qualquer método para fazer root no meu emulador.

Preetam
fonte
Eu acho que você pode usar o "Root.apk" armazenado no filecrop (VISIONary no sistema Android) para fazer o root do emulador porque, a cada reinicialização, ele faz o root do sistema. O Z4root não pode funcionar porque precisa ser reiniciado para que o acesso root funcione.
JeremLeOuf
Onde posso conseguir isso? Existe um manual para isso?
desenvolvedor android
6
Observe que os emuladores do Android já estão "enraizados". Você não precisa fazer nada para obter um shell adb raiz, pois ele já é executado como raiz por padrão. O que é discutido aqui é a instalação de um "su" cortado ou um calço semelhante para permitir que o código do aplicativo inicie programas auxiliares executados como raiz.
Chris Stratton
2
Use Genymotion genymotion.com É muito rápido e tem raiz por padrão.
klimat
1
você instalou a imagem errada. Veja aqui -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Respostas:

136

Todas essas respostas são desnecessariamente complicadas :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
JRaymond
fonte
52
A execução de adb rootresultados em "adbd não pode ser executada como raiz nas compilações de produção". Você está usando um emulador específico? Forneça mais detalhes.
orodbhen
3
Você não pode usar esta raiz para nenhum aplicativo.
Enyby
5
Se alguém tentar fazer com que isso funcione nas novas imagens do sistema Google Play, o adbd está definido como seguro no ramdisk.img. Consegui contornar isso usando ramdisk.img da imagem das APIs do Google. Eu testei nas imagens 7.0 e 8.0.
precisa saber é o seguinte
46
Se houver adb rootum erro adbd cannot run as root in production builds, consulte stackoverflow.com/a/45668555/1682419 - Você precisa de uma "Imagem do sistema de APIs do Google" em vez de uma "Imagem do sistema do Google Play".
precisa saber é o seguinte
10
@JRaymond eu digitei adb raiz, mas nada impresso depois disso
75

Como fazer root no emulador Android (testado no Android 7.1.1 / Nougat)

Requisitos :

Instruções

  1. Instale o SuperSu.apk

    • Instale o aplicativo SuperSu primeiro, basta arrastar e soltar (se estiver executando a versão mais recente do emulador ou carregar sidel através do adb, por exemplo adb -e install supersu.apk)

    • Depois de instalá-lo, quando você o executa, é exibida uma tela como mostrado abaixo, indicando “Não há binário SU instalado ..”. Este erro apenas confirma que o dispositivo ainda não está enraizado.

insira a descrição da imagem aqui


  1. Tornar a partição do sistema do emulador gravável

    • Como sugere, precisamos dar ao emulador permissão para gravar arquivos do sistema.

    • Digite o seguinte código para fazer isso: emulator -avd {emulator_name} -writable-system

Se você tiver mais de um AVD, poderá obter uma lista de avds usando o comando: emulator -list-avds

Nota: Navegue até a pasta de ferramentas em que o Android SDK está instalado e abra o prompt de comando pressionando shift e clicando com o botão direito do mouse.


  1. Empurrando su binário no diretório do sistema

    • Extraia o Recovery flashable.zip (que contém os binários de diferentes arquiteturas)

Importante! Use apenas o binário su que corresponda à sua arquitetura avd, por exemplo, x86, arm etc. e observe o caminho em que você extraiu esses binários.

  • Verifique se você está executando o adb como root e também precisa remontar. Basta digitar esses códigos

adb root

adb remount

Agora é hora de empurrar o binário su:

Este é o código que usei com sucesso :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(não se preocupe com a minha localização específica de su binary, qualquer localização está correta desde que não haja espaço em branco)

Nota: Para descobrir binou xbinfazer no console antes:> adb shell,>ls /system/xbin/su

Se isso falhar, tente pressionar este diretório /system/xbin/su. Também para emuladores executando o Android 5.1 e abaixo, use o sue nãosu.pie


  1. Alterar permissões do binário su

    • A seguir, vamos fazer algumas modificações nas permissões do su binário. Temos que fazer isso no dispositivo emulador através do adb:

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

Importante!! Anote o caminho binário su (o meu é / system / bin)


  1. Definir a installdiretiva em binário e definir umdaemon

Digite os códigos:

su --install

e para configurar o daemon:

su --daemon&

Importante!! Anote o espaçamento


  1. Configurando o SELinux como Permissivo (ou seja, desativando o SE Linux)

    • Por fim, desative o selinux através deste código:

setenforce 0


  1. Abra o aplicativo SuperSU e pode solicitar a atualização de binários, você pode usar o método Normal.

Nota: Se você estiver enfrentando bootloops, não atualize os binários, use-os como estão.


É isso mesmo !!

Abra qualquer aplicativo que exija permissões de SU apenas para verificar novamente e, de fato, o SuperSU pergunta se você deseja conceder permissões de SU.

insira a descrição da imagem aqui

Para que a raiz persista, atualize su binary (usando o método Normal), copie system.img do diretório temp ( Users\AppData\Local\Temp\Android Emulatoro arquivo geralmente é nomeado aleatoriamente, por exemplo, 1359g.tmpcom um tamanho grande) e substitua o padrão system.img.

Atualização :

Observei que é mais fácil obter uma imagem temporária do sistema no Linux do que no Windows. Você pode tentar usar a imagem de instantâneo.

Atualização 4 de agosto de 2018

Com o surgimento do emulador 27.3.x, agora fica mais fácil preservar a raiz por meio do recurso de instantâneo (se a cópia do system.imgmétodo não estiver funcionando):

Idealmente, é mais como hibernarig o dispositivo virtual com a configuração intacta, portanto, tudo é preservado.

Instantâneos

Agora você pode salvar vários snapshots do AVD para uma determinada configuração do dispositivo e escolher qual dos snapshots salvos carregar ao iniciar o emulador. Iniciar um dispositivo virtual carregando uma captura instantânea é como acordar um físico de um estado de suspensão, em vez de inicializá-lo a partir de um estado desligado.

Isso implica que o único requisito para iniciar o emulador seja adicionar o -writable-systemparâmetro ao emulator -avd [avdname]comando normal para iniciar o emulador. ( Executar o emulador apenas com emulator -avd [avdname]não inicia a versão / cópia raiz ou pode levar a algum erro )

Testado no nível 22 da API

Também para problemas de bootloop, consulte o outro post: Emulador do Android: como evitar o loop de inicialização após o enraizamento? e atualizações dos mesmos.

Observações

A maior parte do conteúdo em referência era para versões mais antigas do Android e, portanto, o motivo de diferentes comandos e caminhos que eu modifiquei.

Reconhecimentos;

xavier_fakerat
fonte
1
note: Para descobrir bin ou xbin do no console antes:> shell adb,> ls / system / xbin / su
djdance
1
@xavier_fakerat sim, parei de atualizar os binários. O problema é que, após cada reinicialização, tenho que remontar a máquina e executar su --install && su --daemon&o emulador, seguido de setenforce 0para obter o root. Você conhece alguma correção permanente para root na reinicialização?
Cristian Holdunu
1
Agradável! Esse método também funciona para dispositivos reais aos quais você pode acessar a raiz via adb.
Mygod 19/08/19
1
Você me respondeu: por que o emulador do Android fecha inesperadamente depois de fazer o root da imagem quando não usa o sistema -writable? É porque os instantâneos.
Rodrirokr
1
Estou usando Pixel 2 XL: As pessoas parecem ter o mesmo problema com o Pixel XL: forum.xda-developers.com/pixel-xl/how-to/...
noraj
33

Aqui está a lista de comandos que você deve executar enquanto o emulador está sendo executado. Eu testei esta solução para um avd no 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

Ele pressupõe que o binário su esteja localizado no diretório de trabalho. Você pode encontrar su e superusuário aqui: http://forum.xda-developers.com/showthread.php?t=682828 . Você precisa executar esses comandos sempre que iniciar o emulador. Você pode escrever um script que inicie o emulador e faça root.

abd
fonte
15
Inclua aqui as partes relevantes de sua postagem no blog. SO é um lugar para respostas, não links.
cHao 01/06
2
Não existe esse arquivo ou diretório 'SU'
Mahendran
4
Isto não funciona no emulador 2.2, 2.3 ou 2.3.3 eu recebo apenas erros para adb push: falta de memória, dir não está vazio, etc.
ponteiro nulo
2
@ camundongos: Como o erro diz, você não pode enviar o binário porque não há espaço suficiente no dispositivo virtual. Ao iniciar o emulador, você pode adicionar a -partition-sizeopção para especificar o tamanho da partição. Tente iniciar seu emulador comtools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd
2
Em emuladores mais recentes o comando remount pode não funcionar, você pode substituir: adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system com: adb root adb remount
Kamran Ahmed
20

Para AVD com 5.1.1 e 6.0, usei o próximo script no 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

Precisa UPDATE.zip do SuperSU. Descompacte-os em qualquer pasta. Crie um arquivo bat com o conteúdo acima. Não se esqueça de especificar a arquitetura e o dispositivo necessários: set adb=adb -s emulator-5558e set arch=x64. Se você executar o Android acima ou igual a 5.0, altere set pie=para set pie=.pie. Executá-lo. Você obtém uma raiz temporária para a execução atual.

Se você encontrou um erro na remontagem da partição do sistema, precisa iniciar o AVD na linha de comando. Veja abaixo o primeiro passo para o Android 7.

Se você deseja torná-lo persistente - atualize o binário no SuperSU e armazene system.img da pasta temp como substituto do system.img padrão.

Como converter a raiz temporária resultante em uma permanente

Primeiro - vai para o SuperSu. Ele oferece uma atualização binária. Atualize da maneira normal. Reinicie a rejeição.

Segundo - relevante apenas para emuladores. O mesmo AVD. A conclusão é que as alterações na imagem do sistema não serão salvas. Você precisa mantê-los para si.

Já existem instruções para diferentes emuladores.

Para o AVD, você pode tentar encontrar um arquivo de sistema temporário.img, salvá-lo em algum lugar e usá-lo quando iniciar o emulador.

No Windows, ele está localizado no %LOCALAPPDATA%\Temp\AndroidEmulatore tem um nome parecido com TMP4980.tmp.

Você o copia para uma pasta avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) e renomeia para system.img.

Agora será usado no início, em vez do habitual. Verdadeiro se a imagem no SDK for atualizada, ela terá a antiga.

Nesse caso, você precisará remover isso system.imge repetir a operação na sua criação.

Manual mais detalhado em russo: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Para o Android 7, você precisa executar etapas adicionais: 1. Precisa executar o emulador manualmente. Vá para a pasta sdk sdk\tools\lib64\qt\lib. Execute a partir deste emulador de pasta com opções -writable-system -selinux disabled como esta:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. Você precisa reiniciar a adbdpartir do root:

    raiz do adb -s emulator-5554

E remontar o sistema:

adb -s emulator-5554 remount

Ele pode ser doado apenas uma vez por emulador de execução. E qualquer outra remontagem pode interromper o modo de gravação. Por causa disso, você não precisa executar nenhum outro comando com remontagem, como mount -o remount,rw /system.

Outras etapas permanecem as mesmas - faça o upload do binário, execute o binário como daemon e assim por diante.

Imagens do AVD Android 7 x86 com root: AVD Android 7 x86 com raiz


Se você vir um erro sobre o PIE na execução do subinário - faça o upload no binário errado do emulador. Você deve fazer o upload do binário nomeado su.piedentro do arquivo morto, mas no emulador deve ser nomeado como su, não su.pie.

Enyby
fonte
Você pode me dizer as etapas para tornar a raiz persistente?
Satya
update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby
Eu usei essas etapas para obter o system.img do temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) copiou esse system.img do temp nas imagens do sistema do Android SDK, mas quando eu reiniciar o emulador em seguida, o emulador não está no estado rooted ... por favor me orientar o caminho correto
Satya
melhor cópia para o diretório avd. mas primeiro você deve atualizar o binário no SuperSu no modo normal.
Enyby
Eu atualizei binário no modo normal e copiado no diretório AVD em seguida, também raiz não é persistente
Satya
13

Eu acredito que a maneira mais fácil é criar um alias para o comando sh, por exemplo

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

Testado no Android Emulator 3.0 e superior.

novato
fonte
Isso funcionou para mim também (no emulador x86_64 do Android 5.02), enquanto a sugestão acima para instalar no xbin não.
Yannick #
7
Eu conseguimount: '/system' not in /proc/mounts
Kenny Wyland
sistema falhou com 72
Duna
3

Aqui está minha mochila com tudo que você precisa. Ou você pode usar este 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
Andrew Zolotarev
fonte
2

Acabei de substituir e atribuir atributos para su para ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img e agora no android 5 eu sempre tenho raiz mesmo para novos sistemas, basta instalar o SuperSu. apk

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

depois disso, SuperSu.apk vê raiz. Mas eu não atualizo o arquivo binário

xWeb
fonte
1

Eu usei parte do método das soluções acima; no entanto, eles não funcionaram completamente. Na versão mais recente do Andy, isso funcionou para mim:

No Andy (Root Shell) [Para obter, clique com o botão direito do mouse no ícone HandyAndy e selecione Term Shell]

Dentro do shell, execute estes comandos:

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

Em seguida, instale o SuperSU e instale o SU binário. Isso substituirá o binário SU que acabamos de criar. (Opcional) Remova o SuperSU e instale o Superuser pelo CWM. Instale o binário su novamente. Agora, a raiz funciona!

obc7787
fonte
1

Tentei muitas das sugestões acima, incluindo o SuperSU e não consegui trabalhar, mas encontrei algo muito mais simples que funcionava para meus propósitos. No meu caso, eu queria apenas executar o sqlite no prompt de comando. Simplesmente criei um emulador com uma versão mais antiga do Android (Lollipop) e obtive acesso root imediatamente.

Alan Todtenkopf
fonte
-1

Descobri que o emulador padrão da API 23 x86_64 está enraizado por padrão.

Vladimir Berezkin
fonte
Pelo que sei, só porque você tem um # quando digita "adb root", não significa que os aplicativos possam tirar proveito dos privilégios de root. Qualquer tentativa de gravar em qualquer lugar / sistema resultou em um erro de RO, mesmo tentando remontá-lo como RW.
Fusseldieb