Androidアプリケーションをデバッグして実行したいHTC Desireがあります。しかし、Eclipseでデバイスを選択できるウィンドウが表示されると、HTC Desireは質問マークのみで表示されます( ????????)。何が間違っているのですか?
私はこれを試しました:
デバイスでUSBデバッグを有効にし、アプリケーションのManifest.xmlファイルでデバッグを有効にしました。
ターミナルで私はこれをしました:
他に何を試したり、忘れたりすることができますか?
Sudoを使用してadbを手動で実行する必要があります。 Sudoを使用せずにadbを実行した場合(またはEclipse/ADTに実行させた場合)、デバイスを表示するために必要なアクセス許可がありません。
すでに実行されている場合は、Sudo adbkill-serverおよびSudoadbstart-server。
これが古い質問スレッドであることは知っていますが、同じ問題を解決しようとして偶然見つけました。しかし、受け入れられた答えは正しくありませんでした。 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として実行することも一般的に悪い考えです。
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にします。
ここに記載されていることを実行することで、「ブリック」された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
その後、 ファクトリイメージの復元 のハウツーに従いました。それが役に立てば幸い。
これは、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
Sudo apt-get installAndroid-tools-adbがインストールされていることを確認してください。Sudoadbを確認してください。adbのヘルプが表示されます。
次のコマンドを使用してadbを強制終了/開始してください-
Sudo adb kill-server Sudo adbstart-server
最後に、Sudoadbデバイス
うまくいけば、これはうまくいくでしょう!!!