Como obtenho meu dispositivo detectado pelo ADB no Linux?


18

Eu só tenho o meu novo brilhante Wileyfox Swift - e antes de colocá-lo para usar Eu quero oem unlocke raiz-lo (como eu costumo fazer com novos dispositivos;) O problema é que, embora é ativado no dispositivo, e uma linha correspondente no /etc/udev/rules.d/51-android.rulesexiste , o dispositivo não é visto por adb devices.

Sei que existem várias respostas espalhadas por este site, mas elas são difíceis de encontrar, apenas cobrem um dispositivo específico ou não cobrem todas as etapas que finalmente precisei. Portanto, tomo isso como uma chance para uma pergunta canônica independente de dispositivo e dou uma resposta detalhada abaixo:

Como posso ver meu dispositivo Android e usá-lo adbno Linux?


Estou sempre aberto a críticas - mas um voto negativo sem explicação é difícil de interpretar. Então, o downvoter poderia explicar o que deveria ser melhorado na questão? Eu prometo não abusar meus poderes mod para a punição :)
Izzy

3
Suponho que o eleitor não percebeu que você postou a pergunta para responder a ela automaticamente (não deve ter notado você na resposta). Como não há indícios na pergunta ou nos comentários de que ela foi postada com o objetivo de responder automaticamente, o eleitor pode ter se oposto ao segundo ao último parágrafo (mostra preguiça, se lida no contexto de qualquer usuário comum e de sua pergunta). Não consigo pensar em nenhuma outra razão a partir de agora.
Firelord

1
O @Firelord parece convincente (editou a pergunta um pouco para evitar falhas adicionais). Mas então, esse usuário deveria ter votado positivamente na resposta. Ou eu perdi alguma coisa lá também? ;)
Izzy

Respostas:


24

Ativar depuração USB no dispositivo

Isso é feito em Configurações ›Desenvolvimento . Se você não tiver essa entrada no menu de configurações, vá para Configurações ›Sobre , vá até o" Número da versão "e martele-o como um macaco até que o dispositivo parabenize você por se tornar um desenvolvedor. Volte para a página principal do menu Configurações e, na parte inferior, você deverá ver as configurações "Desenvolvimento" (ou "Desenvolvedores") agora. Digite-o e ative a Depuração USB aqui.

Identifique o dispositivo

Primeiro, precisamos saber como o dispositivo se identifica no barramento USB. Para isso, com o dispositivo Android não ligado, pegue um shell e execute o comando lsusb. Em seguida, conecte o dispositivo e execute o comando novamente. Descubra a nova linha. Para o Wileyfox Swift, este é um "dispositivo sem nome":

Bus 004 Device 003: ID 2970:2282

Configurando as regras para o ADB

Precisamos agora os números no final da linha acima: 2970:2282. Eles especificam o fornecedor (2970) e o próprio dispositivo (2282). Tendo esses detalhes, precisamos de um shell raiz em nossa máquina Linux para editar (ou criar, se ainda não existir) o /etc/udev/rules.d/51-android.rulesarquivo. Lá, adicione uma linha para o seu dispositivo. A linha de exemplo a seguir mostra como fica a aparência do Wileyfox Swift:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2282", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"

Se você tiver um dispositivo diferente, substitua os IDs do fornecedor e do produto pelo que você encontrou acima ao executar lsusb. Uma breve explicação da linha:

  • SUBSYSTEMS=="usb": obviamente, esta regra é apenas para USB;)
  • ATTRS{idVendor}=="2970": o ID do fornecedor do dispositivo para o qual esta regra é
  • ATTRS{idProduct}=="2282": o ID do dispositivo
  • MODE="0666": permissões que o nó do dispositivo deve obter. 0666é bastante relaxado, permitindo a todos os usuários do sistema permissão de leitura e gravação - por isso, se você estiver preocupado, tente substituí-lo por um 0660(dando apenas leitura e gravação ao proprietário e ao grupo e negando tudo a outros).
  • GROUP="androiddev": a qual grupo o nó do dispositivo deve pertencer. Este deve ser um grupo ao qual os usuários pretendem trabalhar com o dispositivo.
  • SYMLINK+="android%n": apenas para dar um nome bonito ao nó, para que você possa encontrá-lo mais facilmente /dev(no meu caso, ele apareceu mais tarde como /dev/android5)

Essa regra entrou /etc/udev/rules.d/51-android.rules, devemos dizer udevpara fazer uso dela. A maneira mais segura (ao lado de uma reinicialização;) é reiniciar o udevserviço. Dependendo da distribuição do Linux, isso pode ser feito via service udev restartou /etc/init.d/udev restart.

Feito isso, deixe o shell raiz. Desconecte e reconecte seu dispositivo Android, tente adb devicesnovamente. A maioria dos dispositivos apareceu agora, mas não o Wileyfox Swift - que obviamente quer alguns abraços extras. Se você estiver nessa situação, abra (ou crie, se não existir) o arquivo ~/.android/adb_usb.inie adicione uma única linha, nomeando o fornecedor com o qual você descobriu lsusbacima; para o Swift que seria 0x2970(yupp, aqui você precisa prefixá-lo 0xpara apontar que é um número hexadecimal). Em seguida, reiniciar o servidor ADB: adb kill-server && adb start-server. Desconecte e reconecte o dispositivo novamente. Agora adb devicesdeve ver.

Conectando o dispositivo

Você deve ter notado adb devicesalgo como isso 0123456789ABCDEF unauthorized. Tudo bem e para sua segurança (dispositivos): seu computador deve estar autorizado primeiro para poder acessar o dispositivo. Portanto, basta emitir adb shellagora - que será encerrado com um error: device unauthorized. Please check the confirmation dialog on your device.aviso Siga esse conselho (marque a caixa de seleção para autorizar permanentemente o computador) e pronto: agora você pode usar o para acessar o seu dispositivo.


Atualizações:

¹ Observe que nas versões posteriores do Linux, a sintaxe para as regras UDEV mudou levemente, como por exemplo jcomeau_ictx apontou em seu comentário. Para os valores que encontramos acima, isso seria:

SUBSYSTEM=="usb", ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", MODE="0666", GROUP="plugdev", SYMLINK+="android%n"

Duas diferenças: agora é SUBSYSTEM(no plural) e o grupo mudou de androiddevpara plugdev(o primeiro não existe em sistemas recentes, o último existe e geralmente é atribuído pelo menos ao primeiro usuário).

Além disso, pode ser necessário adicionar o vendorID ao seu ~/.android/adb_usb.ini(um ID por linha, em notação hexadecimal):

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970

1
o formato da regra do udev era diferente no meu sistema Jessie: jcomeau@aspire:~$ tail -n 1 /etc/udev/rules.d/99-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", MODE="0666", GROUP="plugdev", SYMLINK+="android%n" jcomeau@aspire:~$ cat ~/.android/adb_usb.ini # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. # USE 'android update adb' TO GENERATE. # 1 USB VENDOR ID PER LINE. 0x0e8d tive que ignorar o conselho para executá android update adb-lo e inseri-lo manualmente, como você declarou.
Jcomeau_ictx 15/05

@jcomeau_ictx obrigado pelo feedback! Tanto quanto posso ver no seu comentário, é apenas usar um grupo de usuários diferente (em plugdevvez de androiddev). Não verificado, mas eu diria que a parte importante aqui é que é um grupo que seu usuário (com o qual você deseja usar o USB) também.
Izzy

1
também em SUBSYSTEMvez de SUBSYSTEMS, em ATTRvez de ATTRSvírgula, depois de MODE="0666" não ter certeza se todas essas alterações eram necessárias, mas foi o que funcionou.
Jcomeau_ictx 15/05

Oh - obrigado, perdi aqueles pequenos, @jcomeau_ictx - bom ponto!
Izzy

Para pessoas Linux não esclarecido sudo wget -O /etc/udev/rules.d/51-android.rulesa partir daqui trabalhou para mim para o meu Xiaomi Mi A1. É claro que é melhor para aprender, mas bom ser preguiçoso :)
beeshyams

0

Alguns comentários de uma distribuição Linux mais recente. Fedora 29 com um telefone Nexus 5X ou Nokia 7.1 (Android One).

Primeiro desconecte o telefone, se já estiver conectado.

  1. Instale ferramentas android que fornecerão ADB ( sudo dnf install android-tools)
  2. Copiar regras do udev ( sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d)
  3. Recarregar regras do udev ( sudo udevadm control --reload-rules)
  4. Reinicie o ADB para ter certeza ( sudo systemctl restart adb)

Agora conecte o telefone e execute a adb devicespartir da linha de comando. Você provavelmente verá um dispositivo listado com "sem permissões". Isto é bom.
Se não estiver listado, você precisará adicionar seu dispositivo ao arquivo de regras do udev, mas, para mim, os dispositivos testados apenas funcionaram com as regras predefinidas.

Execute adb shelle esperamos que você receba uma notificação de segurança no telefone perguntando se deseja confiar no computador, selecione sim.
Se, em vez disso, o computador indicar "erro: permissões insuficientes para o dispositivo", verifique se você definiu a porta USB no telefone para o modo "Transferir arquivos" e não "Carregar este dispositivo". No Android 8.1, isso está localizado nas configurações em "Dispositivos conectados"> "USB".

Percebi que, mesmo que você tenha tudo funcionando hoje, amanhã ele poderá se romper repentinamente sem motivo aparente. Se isso acontecer, verifique primeiro a configuração da porta USB no dispositivo, que pode ter voltado ao modo de carregamento, e se isso falhar, revogue as autorizações de depuração USB no dispositivo (nas configurações em Opções do desenvolvedor) e espere obter o pop -up novamente quando você executar adb shell.

Com isso, sou capaz de executar o Android Studio e executar no dispositivo conectado.

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.