web-dev-qa-db-ja.com

Ubuntu:Androidデバイスのデバッグ

Androidアプリケーションをデバッグして実行したいHTC Desireがあります。しかし、Eclipseでデバイスを選択できるウィンドウが表示されると、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再起動

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

25
Poku

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

すでに実行されている場合は、Sudo adbkill-serverおよびSudoadbstart-server。

49
EboMike

注: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として実行することも一般的に悪い考えです。

46
gnac

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

したがって、シリアル番号から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にします。

3
Rocky Zhang

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

lsusbを実行し、USBサブシステムがどのAndroidデバイスが接続されているかを通知するとき、私は私に返していました:

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

d001であり、既知の状態(4e20、4e21、4e22)ではないことに注意してください。だから私がしたことは、特にこのunknown状態で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

その後、 ファクトリイメージの復元 のハウツーに従いました。それが役に立てば幸い。

2
Dreamszz

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

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

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

Sudo adb server-restart

または

Sudo <your Android SDK path>/platform-tools/adb server-restart

permanent->デバイスをudevリストに追加します次の行を/etc/udev/rules.d/51-Android.rulesに追加しますas rootwithcorrectidVendorusing this list

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
1

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

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

Sudo adb kill-server Sudo adbstart-server

最後に、Sudoadbデバイス

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

0
Nikhil Raut