26

Androidアプリケーションをデバッグして実行したいHTCDesireがあります。しかし、Eclipseのiが、デバイスから選択できるウィンドウを取得すると、HTC Desireは疑問符(????????)のみで一覧表示されます。私は何が間違っているのですか?

私はこれを試しました:

デバイスでUSBデバッグを有効にし、アプリケーションのManifest.xmlファイルでデバッグを有効にしました。

ターミナルで私はこれをしました:

  1. rootとしてログインし、次のファイルを作成します:/etc/udev/rules.d/51-android.rules。
  2. SUBSYSTEM == "usb"、SYSFS {idVendor} == "0bb4"、MODE = "0666"
  3. sudoサービスudev再起動

他に何を試したり、忘れたりすることができますか?

4

6 に答える 6

49

sudoを使用してadbを手動で実行する必要があります。sudoを使用せずにadbを実行した場合(またはEclipse / ADTに実行させた場合)、デバイスを表示するために必要なアクセス許可がありません。

すでに実行されている場合は、sudoadbkill-serverおよびsudoadbstart-serverを実行します。

于 2010-06-28T03:28:23.487 に答える
47

注:EboMikeの受け入れられた答えは正しくありません。

これが古い質問スレッドであることは知っていますが、同じ問題を解決しようとして偶然見つけました。しかし、受け入れられた答えは正しくありませんでした。udevルールを正しく設定したら、adbサーバーをrootとして実行する必要はありません。

http://developer.android.com/tools/device.htmlのステップ3で、正しい解像度が得られます。具体的には、次の行で/etc/udev/rules.d/51-android.rulesを追加または変更します。

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0666", GROUP="plugdev" 

この場合、0bb4はHTCのベンダーIDです。0fffはNexusOneの製品IDです。上記のリンクの表、またはlsusbを使用して、デバイスのベンダーIDと製品IDを特定します。例えば

$ lsusb
Bus 001 Device 006: ID 18d1:4e22 Google Inc. Nexus S (debug)

18d1はこの特定のデバイスのベンダーIDであり、4e22は製品IDです。すべてのユーザーがこのデバイスにアクセスできるようにする場合は、「GROUP」定義を省略できます。そうでない場合は、まだプラグデブグループに参加していない場合は、必ず自分自身をプラグデブグループに追加してください。このファイルを作成したら、udevを再起動またはリロードします。

udevadm control --reload-rules

グループに自分を追加する必要がある場合は、ログアウトしてから再度ログインする必要があります。

「adbkill-server」を使用して古いadbサーバーを強制終了し、デバイスを接続して「adbdevices」を実行します。これによりサーバーが再起動し、デバイスが表示されます。adbサーバーを起動するためだけでも、ルートとしてadbを実行する必要はありません。また、絶対に必要な場合を除いて、rootとして実行することも一般的に悪い考えです。

于 2013-01-06T19:48:49.823 に答える
3

コマンドのdevice-idは、adb devices実際にはandroidusbデバイスのシリアル番号を使用しています。

したがって、シリアル番号からnull文字列を取得すると、???????????と表示されます。

adbサーバーのソースコード:

static size_t format_transport(atransport *t, char *buf, size_t bufsize,
                               int long_listing)
{
    const char* serial = t->serial;
    if (!serial || !serial[0])
        serial = "????????????";

したがって、adbサーバーがroot権限で実行されていないか、usbデバイスがadbサーバーの読み取りを許可していない可能性があります。簡単なチェックは、lsusb-v|を使用することです。grep iSerialを使用して、AndroidデバイスのiSerialフィールドを取得できるかどうかを確認します。

また、iSerial文字列がデバイスで適切に準備されていない可能性があります。多くのエンジニアリング製品にiSerialがまったくないか、すべてのデバイスが同じデバイスIDを表示しているのを見てきました。

場合によっては、ドライバーは、デバイスごとに一意にプログラムされたフラッシュ内のデータのセクションを読み取り、iSerial/デバイスIDにします。

于 2014-06-18T08:55:04.593 に答える
2

ここで説明されていることを実行することで、「ブリック」されたNexusSを再び機能させることができました。ただし、1つの小さな追加が必要でした。

あなたがそうしlsusb、USBサブシステムがどのAndroidデバイスが接続されているかを教えてくれるとき、私のものは私に返していました:

$ lsusb
Bus 001 Device 006: ID 18d1:d001 Google Inc.

d001に注意してください。既知の状態、つまり4e20、4e21、または4e22には注意してください。51-android.rulesしたがって、私が行ったことは、特にこの不明な状態で別の行を追加し、それを「リカバリ/デバッグ」としてマークすることです。

Androidを切断して再接続します。lsusb少なくとも見られることを確認するためにもう一度チェックしてください。そして...それは私にこれを与えました

$ adb devices
List of devices attached
34353601BB2000EC    recovery

これの代わりに

$ adb devices -l
List of devices attached 
????????????           no permissions usb:1-3

その後、ファクトリイメージを復元する方法をたどっただけです。それが役に立てば幸い。

于 2013-06-23T11:12:32.867 に答える
1

これは、adbにハードウェアへのアクセス許可を与えていないためです。2つの解決策があります。

一時的->既存のすべてのadbプロセスを強制終了し、スーパーユーザーで再起動します

ps -ef | grep adb | awk '{print $2}' | xargs kill

sudo adb server-restart

また

sudo <your android SDK path>/platform-tools/adb server-restart

永続的->デバイスをudevリストに追加するこのリストを使用して、正しいidVendorを使用してルートとして/etc/udev/rules.d/51-android.rulesに次の行を追加します。

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

次のコマンドが続きます:

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

adbが機能しない場合は、次のようにします。

sudo ln -s <your android SDK path>/platform-tools/adb /usr/local/sbin/adb
于 2015-10-25T02:00:51.717 に答える
0

sudo apt-getinstallandroid-tools-adbがインストールされていることを確認してください。sudoadbを確認してください。adbのヘルプが表示されます。

次のコマンドを使用してadbを強制終了/開始してください-

sudo adb kill-server sudo adbstart-server

最後に、sudoadbデバイス

うまくいけば、これはうまくいくでしょう!!!

于 2015-04-10T11:42:36.610 に答える