O comando dos dispositivos adb não funciona


86

Estou executando o Ubuntu 10.10 de 64 bits. Tenho ia32-libs instaladas junto com o Android Debug Bridge versão 1.0.26.

Meus problemas):

  1. adb devices>>> ???????????? Nenhuma permissão
  2. sudo adb devices >>>> sudo: adb: comando não encontrado
  3. adb shell >>> erro: permissões insuficientes para o dispositivo

Acho que tudo isso está relacionado. Aqui estão as informações relevantes.

$ echo $PATH
/home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/android-sdk-linux_x86/tools:/opt/android-sdk-linux_x86/platform-tools

$ which adb
/opt/android-sdk-linux_x86/platform-tools/adb

$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
????????????    no permissions

$ sudo adb devices
sudo: adb: command not found

$ adb shell
error: insufficient permissions for device

Obtenho os mesmos resultados com um Moto Droid enraizado rodando CM6.1 e um G-Tab enraizado rodando um ROM baseado em CM7.

Eu revi as seguintes postagens relacionadas:

Tentei a maioria (não todas) das sugestões e não consegui resolver meu problema. As coisas que não experimentei pareciam inadequadas. Agradeceria mais algumas dicas e continuarei solucionando o problema.

Uma coisa que não tentei foi editar /etc/udev/rules.d/70-android.rules. É provável que seja esse o problema? Não consigo ver como isso causaria "sudo: adb: command not found". Talvez meus problemas não estejam todos relacionados. De qualquer forma, neste ponto acho que preciso de alguma contribuição de outras pessoas porque não acredito que tenha um problema de caminho ou os outros problemas comuns discutidos nesses outros posts.

EDIT: RESOLVIDO graças a EboMike e RivieraKid. Na verdade, eram dois problemas diferentes:

  1. O item 2 acima (sudo: adb: comando não encontrado) foi resolvido criando um link simbólico da seguinte maneira:

    $ sudo ln -s /opt/android-sdk-linux_x86/platform-tools/adb /usr/local/sbin/adb
    

    Isso me permitiu seguir as sugestões de EboMike e usar essa solução . Fazer isso era necessário para meu Moto Droid. ( No entanto, executar o adb como sudo não era necessário para meu Viewsonic G-Tablet.)

  2. Meus outros dois itens foram resolvidos com a implementação da regra udev como sugerido pelo RivieraKid (neste link ).



O item 1 realmente me ajudou. Não tenho certeza sobre o item 2
Francisco Quintero

Respostas:


87

Uma coisa que não tentei foi editar /etc/udev/rules.d/70-android.rules. É provável que seja esse o problema?

Algum motivo particular pelo qual você não fez isso? Para responder à pergunta - SIM! As regras do udev são o que informa ao Ubuntu qual é o seu dispositivo e permite que ferramentas de espaço do usuário o acessem.

Você não poderá usar o adb sem seguir corretamente as instruções .

Com isso em mente, no entanto, você não diz qual versão do Ubuntu está usando, mas tive problemas com a 10.10 - me avise se precisar que eu poste o conteúdo do meu arquivo de regras.

Não se preocupe em executar o adb via sudo, você não precisa dele. A MODE="0666"regra do udev permite que você acesse o dispositivo como qualquer usuário.


EDITAR:

Não se esqueça de recarregar as regras:

sudo udevadm control --reload-rules

EDITAR # 2:

Como @Jesse Glick aponta corretamente, se o adb já estiver em execução no modo daemon, você também precisará reiniciá-lo para que isso funcione:

sudo adb kill-server

Usei o sudo aqui, pois isso garantirá que o adb será encerrado e é o método oficialmente compatível para interromper o servidor. Ele será reiniciado automaticamente na próxima vez que o adb for usado, mas desta vez com o ambiente correto.


1
Obrigado pelo link . Não tenho certeza de como perdi o fato de que essas instruções eram oficiais. Achei que as pessoas estavam fazendo isso como uma solução alternativa. Eu encontrei o código do fornecedor do meu Viewsonic GTablet e adicionei a regra udev e agora funciona! Obrigado.
MountainX de

1
por algum motivo, não consigo fazer o Motorola Droid aparecer com dispositivos adb. Agora posso fazer com que o GTab e um emulador apareçam, mas não o Droid.
MountainX de

Veja acima. Executar adb como root fez com que o Moto Droid aparecesse.
MountainX de

$ cat /etc/udev/rules.d/51-android.rules SUBSYSTEM == "usb", SYSFS {idVendor} == "22b8", MODE = "0666" SUBSYSTEM == "usb", SYSFS {idVendor} = = "0955", MODE = "0666"
MountainX de

1
… E você precisa reiniciar o adbdaemon, se ele estava em execução antes.
Jesse Glick

22

Você precisa reiniciar o servidor adb como root. Veja aqui .


não funcionou. Detalhes: me@desktop:/opt/android-sdk-linux_x86/platform-tools$ sudo adb kill-server sudo: adb: command not found me@desktop:/opt/android-sdk-linux_x86/platform-tools$ adb kill-server me@desktop:/opt/android-sdk-linux_x86/platform-tools$ sudo adb start-server sudo: adb: command not found
MountainX de

adbnão está no caminho de seu superusuário. Digite which adbpara descobrir em qual caminho ele está e, em seguida, adicione-o ao caminho do root.
EboMike

Espero que você possa ler isso. (Não sei como formatar comentários para incluir novas linhas.) Adb ESTÁ no caminho do meu usuário root. Colei o comando which adb em minha postagem original. O caminho é / opt / android-sdk-linux_x86 / platform-tools / adb. $ sudo -s root @ desktop: # echo $ PATH / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / X11R6 / bin: / opt / android-sdk-linux_x86 / tools: / opt / android-sdk-linux_x86 / platform-tools
MountainX de

1
Aqui está uma coisa estranha. Obtenho resultados diferentes em "qual adb", dependendo de ser executado como root ou com sudo. Aqui está a saída $ sudo which adb $
MountainX de

Especifique o caminho completo ao executar o adb como root.
EboMike

13

No meu sistema Linux Gentoo / Funtoo estou tendo problemas semelhantes:

Sempre recebo a descrição do dispositivo incorreta e permissões insuficientes:

# sudo ./adb devices
List of devices attached 
????????????    no permissions
# ./adb usb
error: insufficient permissions for device

Para mim ajuda o howto do Google. No meu caso, precisei adicionar a regra udev:

# cat /etc/udev/rules.d/51-android.rules 
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

e configurar os direitos do sistema de arquivos

# chmod a+r /etc/udev/rules.d/51-android.rules

Após reconectar meu smartphone, o acesso ao telefone foi bem-sucedido, ele também aparece agora no Seletor de dispositivo Android do Eclipse:

# sudo ./adb devices
List of devices attached 
3XXXXXXXXXXXXXC device
# sudo ./adb usb
restarting in USB mode

Você também deve verificar a associação de seu usuário ao grupo plugdev .


3

Cada resposta que li indica o SUBSYSTEM=="usb". No entanto, meu (talvez antigo) udev precisava que isso fosse alterado para DRIVER=="usb". Por fim, posso executar o servidor adb como um usuário não root ... yay.

Pode ser instrutivo observar a saída de udevmonitor --env, seguida pela saída de

udevinfo -a -p <DEVICE_PATH_AS_REPORTED_BY-udevmonitor>

Se udevmonitore udevinfonão existir em sua máquina, use udevadm monitore em seu udevadm info -a -p ...lugar.
Ash

2

Observe que IDEs como o IntelliJ IDEA tendem a iniciar seu próprio servidor adb.

Mesmo encerrar manualmente o servidor e executar uma nova instância com sudo não ajudará aqui até que você faça seu IDE encerrar o próprio servidor.


2

reiniciar o servidor adb como root funcionou para mim. Vejo:

derek@zoe:~/Downloads$ adb sideload angler-ota-mtc20f-5a1e93e9.zip 
loading: 'angler-ota-mtc20f-5a1e93e9.zip'
error: insufficient permissions for device
derek@zoe:~/Downloads$ adb devices
List of devices attached
XXXXXXXXXXXXXXXX    no permissions

derek@zoe:~/Downloads$ adb kill-server
derek@zoe:~/Downloads$ sudo adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
derek@zoe:~/Downloads$ adb devices
List of devices attached
XXXXXXXXXXXXXXXX    sideload

Eu também: Linux Mint Serena 18.1 com HTC Sensation. Alerta Noob: Eu estive pensando
nisso


0

HTC One m7 executando o novo Cyanogenmod 11.

O telefone está conectado via USB e tethering minha conexão de dados.

Então eu recebo esta surpresa:

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb shell
error: insufficient permissions for device

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb devices
List of devices attached
????????????    no permissions

SOLUÇÃO: DESLIGUE o tethering no telefone.

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb devices
List of devices attached
HT36AW908858    device

-3

Acabei de chegar à mesma situação, a redefinição dos dados de fábrica funcionou bem para mim.


Certamente isso é um comentário?
Matthew Taylor

foi mal. Queria dizer que redefinir o dispositivo e limpar os dados funcionou bem para mim.
Andrii Krokhin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.