Linux上のADBでデバイスを検出するにはどうすればよいですか?


18

光沢のある新しいWileyfox Swiftを入手しました。使用する前にoem unlock、ルートを設定します(通常、新しいデバイスで行うように)。デバイスでが有効になっていますが、対応する行が/etc/udev/rules.d/51-android.rules存在します、デバイスはに表示されませんadb devices

このサイトにはいくつかの答えが散らばっていますが、それらを見つけるのは難しいか、特定のデバイスだけをカバーするか、最終的に必要なすべてのステップをカバーしません。したがって、これをデバイスに依存しない標準的な質問のチャンスと考え、以下に詳細な回答を示します。

adbLinuxでAndroidデバイスを表示および使用するにはどうすればよいですか?


私は常に批評家に開かれていますが、説明のない下票は解釈するのが難しいです。それで、ダウンボターは質問で何を改善すべきか説明してくれますか?罰のためにmodの権限を乱用しないことを約束します:)
イジー

3
投票者は、あなたが質問に自分で答えるために投稿したことに気づかなかったと思われます(答えにあなたが気づいていないはずです)。質問やコメントには、自己回答を目的として投稿されたというヒントがないため、投票者は2番目から最後の段落に反対する可能性があります(通常のユーザーとその質問の文脈で読むと、怠inessを示します)。今のところ、他の理由は考えられません。
消防士

1
@Firelordは説得力があるようです(追加の失敗ステップを防ぐために質問を少し編集しました)。しかし、その後、そのユーザーは答えを支持しているはずです。または、私もそこに何かを逃しましたか?;)
イジー

回答:


24

デバイスでUSBデバッグを有効にする

これは、設定›開発で行います。設定メニューにそのエントリがない場合は、[設定]› [バージョン情報]に移動して[ビルド番号]までスクロールし、デバイスが開発者になったことを祝福するまで猿のようにハンマーで叩きます。[設定]メニューのメインページに戻り、下部にある[開発](または[開発者])設定が表示されます。入力して、ここでUSBデバッグを有効にします。

デバイスを識別する

まず、デバイスがUSBバス上でどのように識別するかを知る必要があります。そのためには、Androidデバイスが接続されていない状態で、シェルをつかんでコマンドを実行しlsusbます。次に、デバイスを接続して、コマンドを再度実行します。新しい行を見つけます。Wileyfox Swiftの場合、これは「名前のないデバイス」です。

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と製品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を 1行追加し、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"

2つの違い:現在 SUBSYSTEM(複数ではない)、グループがから変更されandroiddevましたplugdev(前者は最近のシステムには存在せず、後者は存在し、通常は少なくとも最初のユーザーに割り当てられます)。

さらに、vendorIDを追加する必要がある場合があります~/.android/adb_usb.ini(1行に1つのID、16進表記):

# 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を使用するユーザー)も同様にグループであるということです。
イジー

1
また、のSUBSYSTEM代わりにSUBSYSTEMS、のATTR代わりにATTRSMODE="0666" これらのすべての変更が必要かどうかわからない後、コンマが、それが働いたものです。
jcomeau_ictx

ああ、ありがとう、それらの小さなものを見逃しました、@ jcomeau_ictx –良い点!
イジー

Linuxについては、Xiaomi Mi A1でここsudo wget -O /etc/udev/rules.d/51-android.rulesから来人が私のために働いていました。もちろん、学ぶ方が良いのですが、怠
zy

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、コマンドラインから実行します。「権限なし」でリストされたデバイスがおそらく表示されます。これは結構です。
IFそれがリストされていない、あなたは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.