Linux에서 ADB로 장치를 감지하려면 어떻게해야합니까?


18

방금 반짝이는 새로운 Wileyfox Swift를 얻었 습니다. 사용하기 전에 oem unlock(일반적으로 새 장치와 마찬가지로) 루트 를 사용하고 루팅 합니다. 문제는 장치에서 이 활성화되어 있지만 해당 라인이 /etc/udev/rules.d/51-android.rules존재한다는 것입니다. 으로 기기가 표시되지 않습니다 adb devices.

이 사이트 주변에 여러 가지 답변이 흩어져 있지만 찾기가 어렵거나 특정 장치 만 다루거나 마지막으로 필요한 모든 단계를 다루지 않습니다. 따라서 이것을 장치 독립적 인 정식 질문에 대한 기회로 생각하고 아래에 자세한 답변을 제공하십시오.

adbLinux에서 Android 기기를보고 사용하려면 어떻게해야합니까?


나는 항상 비평가에게 열려 있습니다. 그러나 설명이없는 공감대는 해석하기 어렵습니다. 다운 보터가 질문에서 개선해야 할 점을 설명해 주시겠습니까? 나는 형벌에 대한 나의 권한을 남용하지 않기로 약속한다 :)
Izzy

3
유권자가 귀하가 질문에 대한 답변을 자신에게 답변했다는 사실을 몰랐다고 가정합니다 (답변에서 귀하를 눈치 채지 않아야 함). 질문에 대한 답변이나 자체 답변을 위해 게시되었다는 의견이 없기 때문에 유권자는 두 번째에서 마지막 단락에 이의를 제기했을 수 있습니다 (일반 사용자 및 질문과 관련하여 읽은 경우 게으름을 나타냄). 지금은 다른 이유를 생각할 수 없습니다.
Firelord

1
@Firelord는 설득력있는 소리를냅니다 (추가 실패 단계를 방지하기 위해 질문을 약간 편집 함). 그러나 그 사용자는 답을 상향 조정해야합니다. 아니면 거기에 뭔가 빠졌습니까? ;)
Izzy

답변:


24

장치에서 USB 디버깅 사용

이것은 설정›개발 에서 수행됩니다 . 설정 메뉴에 해당 항목이없는 경우 설정›정보 로 이동하여 "빌드 번호"로 스크롤하여 장치가 개발자가 된 것을 축하 할 때까지 원숭이처럼 망치십시오. 설정 메뉴 의 메인 페이지로 돌아가서 맨 아래에 "개발"(또는 "개발자") 설정이 표시됩니다. 여기에 입력하고 USB 디버깅을 활성화 하십시오.

장치 식별

먼저 USB 버스에서 장치를 식별하는 방법을 알아야합니다. 안드로이드 장치와이를 위해, NOT 연결, 쉘을 잡고 명령을 실행합니다 lsusb. 그런 다음 장치를 연결하고 명령을 다시 실행하십시오. 새로운 줄을 찾으십시오. 를 들어 Wileyfox 스위프트 이것은 "이름없는 장치"입니다 :

Bus 004 Device 003: ID 2970:2282

ADB에 대한 규칙 설정

위 줄의 끝에 숫자가 필요합니다 : 2970:2282. 공급 업체 (2970)와 장치 자체 (2282)를 지정합니다. 이러한 세부 사항을 가지고 있으므로 Linux 시스템에서 파일을 편집하거나 아직 존재하지 않는 경우 만들려면 루트 셸이 필요 /etc/udev/rules.d/51-android.rules합니다. 거기에 장치 라인을 추가하십시오. 다음 예제 라인은 Wileyfox Swift를 찾는 방법을 보여줍니다

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

다른 장치가있는 경우 공급 업체 및 제품 ID를 실행시 위에서 찾은 것으로 바꿉니다 lsusb. 줄에 대한 간단한 설명 :

  • SUBSYSTEMS=="usb": 분명히이 규칙은 USB에만 해당됩니다.)
  • ATTRS{idVendor}=="2970":이 규칙이 적용되는 장치의 공급 업체 ID
  • ATTRS{idProduct}=="2282": 장치 ID
  • MODE="0666": 장치 노드가 가져야하는 권한. 0666시스템의 모든 사용자에게 읽기 및 쓰기 권한을 부여하는 것은 매우 느슨합니다. 따라서 걱정이되는 0660경우이를 소유자 (그룹과 그룹에게만 읽기 / 쓰기 권한을 부여하고 모든 사람을 거부)로 바꾸어보십시오 .
  • GROUP="androiddev": 장치 노드가 속한 그룹. 이것은 사용자가 장치로 작업하려는 그룹이어야합니다.
  • SYMLINK+="android%n": 노드에 좋은 이름을 지정하기 때문에 더 쉽게 찾을 수 있습니다 /dev(제 경우에는 나중에로 /dev/android5표시됨)

에 입력 된 규칙 /etc/udev/rules.d/51-android.rules은이 udev를 사용하도록 지시 해야 합니다. 가장 안전한 방법 (재부팅; 옆)은 udev서비스를 다시 시작하는 것 입니다. Linux 배포판에 따라이 작업은 service udev restart또는/etc/init.d/udev restart .

루트 쉘을 그대로 두십시오. Android 기기를 분리했다가 다시 연결 한 후 다시 시도 adb devices하십시오. 현재 대부분의 장치가 나타 났지만 Wileyfox Swift 는 그렇지 않았습니다. 분명히 추가적인 포옹을 원합니다. 이러한 상황에 처한 경우 파일을 열고 (또는 존재하지 않는 경우 작성) 파일 ~/.android/adb_usb.ini에 한 줄을 추가하여 lsusb위에서 찾은 공급 업체를 지정하십시오 . 에 대한 스위프트0x2970(yupp, 당신은 여기하여 접두사 필요 0x가 16 진수의 지적). 그런 다음 ADB 서버를 다시 시작하십시오 adb kill-server && adb start-server.. 장치를 분리했다가 다시 연결하십시오. 이제 adb devices보아야합니다.

장치 연결

당신은 같은 것을 adb devices말한 것을 눈치 채 셨을 것 0123456789ABCDEF unauthorized입니다. 괜찮습니다. (장치) 안전을 위해 : 먼저 컴퓨터에 장치에 액세스 할 수있는 권한이 있어야합니다. 따라서 adb shell지금 바로 발행하십시오. error: device unauthorized. Please check the confirmation dialog on your device.해당 조언을 ​​따르십시오 (선택적으로 컴퓨터를 영구적으로 인증하려면 확인란을 선택하십시오). 이제 를 사용하여 장치에 액세스 할 수 있습니다 .


업데이트 :

¹ 이후 Linux 버전에서는 UDEV 규칙의 구문이 약간 변경되었습니다 (예 : jcomeau_ictx 가 그의 의견에서 지적한 바와 같이) . 위에서 찾은 값은 다음과 같습니다.

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

두 가지 차이점 : 현재는 SUBSYSTEM(복수는 아님) 그룹이에서 androiddev로 변경되었습니다 plugdev(이전 시스템은 최신 시스템에 존재하지 않으며 후자는 적어도 첫 번째 사용자에게 할당 됨).

또한 vendorID를 ~/.android/adb_usb.ini16 진수 표기법으로 한 줄에 하나의 ID 로 추가해야 할 수도 있습니다 .

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

1
Jessie 시스템에서 udev 규칙의 형식이 다릅니다 . 언급 한대로 수동으로 입력하고 입력 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 하라는 조언을 무시 android update adb해야했습니다.
jcomeau_ictx

@jcomeau_ictx 의견을 보내 주셔서 감사합니다! 귀하의 의견에서 볼 수있는 한 다른 사용자 그룹 () plugdev대신 사용하고 androiddev있습니다. 확인되지는 않았지만 여기서 중요한 부분은 사용자 (USB를 사용하려는) 그룹도 있다는 것입니다.
Izzy

1
또한, SUBSYSTEM대신 SUBSYSTEMS, ATTR대신 ATTRS, 쉼표 후 MODE="0666" 하지 않도록 모든 변화가 필요했다, 그러나 그의 일을 무엇인지.
jcomeau_ictx

아 – 고마워, @jcomeau_ictx – 그 작은 것들을 놓쳤다 – 좋은 지적!
Izzy

리눅스 비 잘 아는 사람들의 경우 sudo wget -O /etc/udev/rules.d/51-android.rules에서 여기 내 샤오 미 미 A1 나를 위해 일했다. 물론 배우는 것이 낫지 만 게으른 것이 좋습니다 :)
beeshyams

0

최신 Linux 배포판의 몇 가지 의견. Nexus 5X 또는 Nokia 7.1 (Android One) 전화가 설치된 Fedora 29

먼저 전화가 연결되어 있으면 분리하십시오.

  1. ADB를 제공 할 android-tools를 설치하십시오 ( sudo dnf install android-tools)
  2. udev 규칙 복사 ( sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d)
  3. udev 규칙 다시로드 ( sudo udevadm control --reload-rules)
  4. ADB를 다시 시작하여 확인하십시오 ( sudo systemctl restart adb)

이제 전화를 연결하고 adb devices명령 줄에서 실행 하십시오. "권한 없음"으로 나열된 장치가 표시 될 것입니다. 이건 괜찮아.
경우 가 나열되지 않은, 당신은 udev 규칙 파일에 장치를 추가해야합니다,하지만 나를 위해, 시험 장치는 미리 정의 된 규칙을했다.

실행 adb shell하면 전화를 통해 컴퓨터를 신뢰할 것인지 묻는 보안 알림이 표시되고 예를 선택하십시오.
IF는 , 당신이 확실 전화는 "파일 전송"모드, 그리고 "충전이 장치"에 USB 포트를 설정했는지 확인해야합니다 : 대신 컴퓨터가 "장치에 대한 권한이 부족 오류가"말한다. Android 8.1의 경우 "연결된 장치"> "USB"아래 설정에 있습니다.

오늘 일하는 모든 일이 있더라도 내일은 명백한 이유없이 갑자기 깨질 수 있습니다. 이 경우 먼저 충전 모드로 변경되었을 수있는 장치의 USB 포트 설정을 확인한 다음 실패하면 장치의 USB 디버깅 인증을 취소하십시오 (개발자 옵션의 설정에서). 실행하면 다시 시작합니다 adb shell.

이를 통해 Android Studio를 실행하고 연결된 장치에서 실행할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.