GNU/Linux >> Linux の 問題 >  >> Linux

Android - Linux で ADB によってデバイスが検出されるようにするにはどうすればよいですか?

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

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

デバイスを特定する

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

Bus 004 Device 003: ID 2970:2282

ADB のルールの設定

上記の行の末尾に数字が必要です:2970:2282 .これらは、ベンダー (2970) とデバイス自体 (2282) を指定します。これらの詳細があるので、root が必要です /etc/udev/rules.d/51-android.rules を編集 (まだ存在しない場合は作成) するために、Linux マシンのシェル ファイル。そこに、デバイスの行を追加します。次の例の行は、Wileyfox Swift の検索方法を示しています:¹

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

別のデバイスを使用している場合は、lsusb を実行したときにベンダー ID と製品 ID を上記で見つけたものに置き換えます。 .行の簡単な説明:

  • 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 で見つけたベンダーの名前を付けて、1 行追加します。 その上; Swift の場合 それは 0x2970 になります (うん、ここでプレフィックス 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. で終了します そのアドバイスに従ってください (オプションでチェックボックスをマークしてコンピューターを永続的に認証します)、これで完了です:これで、adb を使用してデバイスにアクセスできます。

更新:

¹ 以降の 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

新しい Linux ディストリビューションからのいくつかのコメント。 Nexus 5X または Nokia 7.1 (Android One) 携帯電話を搭載した Fedora 29。

すでに接続されている場合は、最初に電話を切断してください。

<オール>
  • ADB を提供する android-tools をインストールします (sudo dnf install android-tools )
  • udev ルールをコピー (sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d )
  • udev ルールをリロード (sudo udevadm control --reload-rules )
  • ADB を再起動してください (sudo systemctl restart adb )
  • 電話を接続して adb devices を実行します コマンドラインから。おそらく、「アクセス許可なし」のデバイスが表示されます。これで問題ありません。
    IF リストされていないため、デバイスを udev ルール ファイルに追加する必要がありますが、私にとっては、テスト済みのデバイスは事前定義されたルールで動作しました。

    adb shell を実行 うまくいけば、コンピュータを信頼するかどうかを尋ねるセキュリティ通知が電話に表示されるので、[はい] を選択します。
    IF 代わりに、コンピューターで「エラー:デバイスの権限が不十分です」と表示される場合は、電話で USB ポートを「このデバイスを充電する」ではなく「ファイルを転送する」モードに設定していることを確認する必要があります。 Android 8.1 では、これは [接続されたデバイス]> [USB] の下の設定にあります。

    今日はすべてが機能していても、明日には明らかな理由もなく突然壊れる可能性があることに気付きました。その場合は、最初にデバイスの USB ポート設定を確認します。これは充電モードに戻った可能性があります。それが失敗した場合は、デバイスの USB デバッグ認証を取り消します ([開発者向けオプション] の設定で)。うまくいけば、ポップが表示されるはずです。 -up adb shell を実行すると再び .

    これで、Android Studio を実行し、接続されたデバイスで実行できるようになりました。


    Linux
    1. Linuxでディレクトリサイズを取得する方法

    2. Linux で仮想ブロック デバイス (ループ デバイス/ファイルシステム) を作成する方法

    3. LinuxでUSBベンダーと製品情報をプログラムで取得する方法は?

    1. Linuxにデバイスドライバーをインストールする方法

    2. Linux でデバイスをマウントするには?

    3. Scientific Linux で ldapsearch を取得するには?

    1. AndroidからLinuxでSSH接続する方法

    2. IP (Linux) からホスト名を取得するには?

    3. bashからネットマスクを取得するには?