adb shell su funciona, mas adb root não

95

Eu fiz root no meu Galaxy S3 desbloqueado (SGH-T999)

Agora, estou tentando executar a adb rootpartir do prompt de comando do Windows , mas estou obtendo um adbd cannot run as root in production buildserro. Então, a primeira coisa que verifiquei foi se meu telefone estava realmente enraizado.

Então, tentei o seguinte:

Abrir prompt de comando

$adb devices // lists my device
$adb shell //goes to shell
$su // opens a 'SuperSu' prompt on my phone and I 'Grant' permission
# // Before following the rooting instructions, I was getting 'no su command found' in the previous step. So, I believe my phone is ROOTED. **Correct me if I'm wrong.**

No entanto, quando o faço adb root, recebo um adbd cannot run as root in production buildserro. Então, pensei, talvez tenha que fazer algumas coisas adicionais além do que fiz acima. Tentei todas as soluções nas seguintes questões do SO:

Nenhuma das opções acima funcionou para mim. Tudo o que eles fazem é dar acesso ROOT DENTRO do SHELL. Eu quero adb roottrabalhar para poder executar vários comandos adb SEM entrar no shell.

rumit patel
fonte
5
não funciona no Android> 4.3. su está faltando.
drdrej

Respostas:

36

O adb rootcomando por design funciona apenas em compilações de desenvolvimento (ou seja, enge userdebugque têm ro.debuggable=1por padrão). Portanto, para habilitar o adb rootcomando em seu dispositivo com acesso root , basta adicionar a ro.debuggable=1linha a um dos seguintes arquivos:

/system/build.prop
/system/default.prop
/data/local.prop

Se você deseja adb shelliniciar como rootpadrão - adicione ro.secure=0também.

Alternativamente, você pode usar o adbdbinário modificado (que não verifica ro.debuggable)

De https://android.googlesource.com/platform/system/core/+/master/adb/daemon/main.cpp

#if defined(ALLOW_ADBD_ROOT)
// The properties that affect `adb root` and `adb unroot` are ro.secure and
// ro.debuggable. In this context the names don't make the expected behavior
// particularly obvious.
//
// ro.debuggable:
//   Allowed to become root, but not necessarily the default. Set to 1 on
//   eng and userdebug builds.
//
// ro.secure:
//   Drop privileges by default. Set to 1 on userdebug and user builds.
Alex P.
fonte
9
Onde posso obter o executável compilado dos itens acima?
Waqas Bukhary
3
Eu adiciono os novos valores para ro.debuggable e ro.secure aos arquivos que você especificou, mas eles ainda são sobrescritos a cada reinicialização e as alterações não têm nenhum efeito.
Patryk Czachurski
31

Em algumas ROMs amigáveis ​​ao desenvolvedor, você pode apenas habilitar o Acesso Root em Configurações> opção Desenvolvedor> Acesso Root . Depois que adb rootestiver disponível. Infelizmente, ele não funciona para a maioria das ROMs de ações no mercado.

NgaNguyenDuy
fonte
64
Não vejo a opção "Acesso raiz" nas opções de desenvolvimento.
Amalgovinus
2
@Amalgovinus Acho que depende de qual sala você está usando. :)
NgaNguyenDuy
@NgaNguyenDuy Você pode identificar qual rom está usando?
Lobster Fighter
23

Eu encontrei esse problema ao tentar fazer o root do emulador, descobri que era porque estava executando o emulador Nexus 5x que tinha o Google Play nele. Criei um emulador diferente que não tinha o Google Play e adb rootfará o root do dispositivo para você. Espero que isso ajude alguém.

Andrew Steinmetz
fonte
como podemos diferenciar os dois emuladores?
Sanjay
@Sanjay ao abrir o Android Virtual Device Manager, você deve ver uma guia para Play Store e deseja ter certeza de que não há nenhum ícone da Play Store presente no dispositivo que você está tentando fazer root.
Andrew Steinmetz
1
2020, isso me ajudou, mas eu preciso de uma maneira de fazer isso em dispositivos com a Play Store habilitada sem um telefone rooteado, mas não tenho certeza se é possível
trigster
9

Eu uso para entrar no modo su no shell abd

adb shell "su"

Samuel Ivan
fonte
2
No Mac OS, estou recebendo o erro "/ system / bin / sh: su: not found". Alguma sugestão, por favor?
Sachin G
@SachinG Talvez você tenha usado o tipo errado de aspas? tente executar istoadb shell "su -c whoami"
gkpln3
@ gkpln3 Ainda obtendo o mesmo erro. / system / bin / sh: su: não encontrado
Sachin G de
9

Eu tenho um Samsung Galaxy Trend Plus (GT-S7580) com root.

Executar 'adb root' me dá o mesmo erro 'adbd não pode ser executado como root em compilações de produção'.

Para dispositivos que têm opções de desenvolvedor -> acesso root, escolha "ADB only" para fornecer acesso root adb ao dispositivo (conforme sugerido por NgaNguyenDuy ).

Em seguida, tente executar o comando de acordo com a solução em Iniciar um script como root por meio do ADB . No meu caso, eu só queria executar o comando 'netcfg rndis0 dhcp' e fiz desta forma:

adb shell "su -c netcfg rndis0 dhcp"

Verifique se você está cometendo algum erro ao executá-lo dessa forma.

Se ainda não funcionar, verifique se você fez o root no dispositivo corretamente. Se ainda não tiver sorte, tente instalar uma ROM personalizada como o Cyanogen Mod para que o 'adb root' funcione.

Antony
fonte
7

Você precisa substituir o binário adbd na pasta boot.img / sbin / por um compatível com su. Você também terá que fazer algumas edições no default.prop.

A Samsung parece tornar isso mais difícil do que outros fornecedores. Eu tenho alguns binários adbd que você pode tentar, mas exigirá o conhecimento de descompilar e recompilar o boot.img com o novo binário. Além disso, se você tiver um bootloader bloqueado ... isso não vai acontecer.

Além disso, Chainfire tem um aplicativo que concederá permissão de root adbd na Play Store: https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=en

Por último, se você está tentando escrever um script do Windows com permissões SU, você pode fazer isso usando o seguinte estilo de comando ... No entanto, você precisará pelo menos conceder (no telefone) permissões SU na primeira vez em que for executado. .

adb shell "su -c ls" <-list o diretório de trabalho com direitos su. adb shell "su -c echo anytext> /data/test.file"

Estes são apenas alguns exemplos. Se você declarar especificamente o que está tentando realizar, posso dar conselhos mais específicos

-scosler

scrosler
fonte
5

adbdtem uma compilação bandeira / opção para habilitar o acesso root: ALLOW_ADBD_ROOT=1.

Até Android 9: Se o adbdseu dispositivo for compilado sem esse sinalizador, ele sempre perderá os privilégios ao inicializar e, portanto, "adb root" não ajudará em nada. Eu tive que corrigir as chamadas para setuid(), setgid(), setgroups()e a capacidade cai para fora do binário-me para obter um adbd permanentemente enraizada no meu leitor de ebook.

Com o Android 10, isso mudou; quando o telefone / tablet está desbloqueado ( ro.boot.verifiedbootstate == "orange"), o modo root do adb é possível em qualquer caso.

Cweiske
fonte
1

Se você realmente precisa ADBexecutar o como root, a maneira mais rápida e fácil é instalar ROMs personalizadas do Android e a mais popular é CyanogenModporque tem as Root Accessopções no menu de opções do desenvolvedor onde você pode escolher dar acesso root apps and ADB. Eu usei o CM antes, mas como ele não estava mais desenvolvido, tentei procurar algumas soluções por aí. Embora CyanogenMod ainda seja uma boa alternativa porque não possui bloatware.

Uma alternativa que descobri com um amigo é usar o adbd insecureaplicativo que você pode tentar aqui: https://forum.xda-developers.com/showthread.php?t=1687590 . No meu caso, funciona perfeitamente com um kernel personalizado do Android, mas não com a ROM padrão do Android (apenas para Android vanilla). Você pode tentar outras alternativas também, como modificar boot.imga ROM do Android.

warfreak92
fonte