忍者ブログ

アンドロイドのあれこれ

実機テストはどうすればいいの?(実機USB接続トラブル)
エミュレータなんて遅くて使い物にならない!っていう人は端末実機でテストすることをすすめます。
Android端末とUSBでつないでアプリのテストを紹介します。開発環境はLinux(Ubuntu)ですがー

当たり前ですが、PCがそのデバイスを認識できてからでないと何も進みません。
Windowsの場合、USB接続した時点で新しいデバイスがみつけたよーって知らせてくれます。
その後はドライバー探してインストールしておけば問題ないはず
また、端末のメーカーによってメーカーの公式サイトからドライバーのダウンロードもできます。

実機を使ってアプリ開発することについての説明は以下のURLで確認することが出来ます。
Using Hardware Devices
http://developer.android.com/intl/ja/guide/developing/device.html


Ubuntuの場合は公式ドキュメントのUsing Hardware Devicesに書かれているようにシステムに対象デバイスのセットアップが必要です。
suになって/etc/udev/rules.d/のとこに51-android.rulesファイルを作って中身は
例:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
追加してchmod a+rで、ファイルのパーミッションを変更します。
$ cd /etc/udev/rules.d/
$ sudo vi 51-android.rules
$ sudo chmod a+r 51-android.rules
SYSFS{idVendor}の部分はUSB Vendor IDs
サポートしているUSBデバイスのコードを記入しておけば端末が認識されます。
メーカー別のコードは
http://developer.android.com/intl/ja/guide/developing/device.html のページに公開しています。
持っているメーカーをコードを変えればおk
例えば、HT-03A(またはHTC Magic) すでに忘れられている日本初のAndroid端末
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

Samsung Galaxy Sの場合
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"

実機一つ以上接続するなら51-android.rulesの中に次の行に同じく追加していけばいいです。
例えばHTCとSamsungの端末
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"

注意は、まずこの設定をしてから、端末の「設定」->「アプリケーション」->「開発」->「USBデバッグ」をチェックして接続するよう忘れずに

確認したいときは端末を開いてadbコマンドで
$ adb devices
List of devices attached 
emulator-5554      device
1000cd14058f       device
HT963LF01040       device
デバイスの設定せずに端末を接続してadb devicesやると
$ adb devices
List of devices attached 
emulator-5554      device
?????????????      no permission

ちなみにUsing Hardware Devicesのページにない端末のメーカーはlsusbでUSBデバイスのリストを表示して確認するとこができます。
$ lsusb
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 002: ID 04d9:1503 Holtek Semiconductor, Inc. Shortboard Lefty
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 026: ID 045e:0745 Microsoft Corp. 
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 004: ID 0b97:7772 O2 Micro, Inc. OZ776 CCID Smartcard Reader
Bus 003 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader
Bus 003 Device 002: ID 0b97:7761 O2 Micro, Inc. Oz776 1.1 Hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 014: ID 0bb4:0c02 High Tech Computer Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 038: ID 04e8:681c Samsung Electronics Co., Ltd 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 014: ID 0bb4:0c02 High Tech Computer Corp.

Bus 001 Device 038: ID 04e8:681c Samsung Electronics Co., Ltd
0bb4とか04e8が表示されています。
実機デバイスを認識できたらこれでアプリを実機でテストできます。

ですが、メーカーのコードを51-android.rulesに追加してもうまく認識できない例外もあります。たとえばNexus OneとNexus S
Nexus OneはHTC製品ですが、USB Vendor IDsは「0bb4」になっていません。
Nexus SもSamsung製品ですが、「04e8」になっていません。
そのときはlsusbで確認をしてみるとNexus OneもNexus Sも「18d1」となっています。
なぜだろう?他に例外はまだあるかどうかわかりません。

また、これまであった実機接続のトラブルは端末のプラットフォームバーションをアップデートした後
アップデートする前は端末の認識できていたがアップデートした後うまく認識できなくて
??????????? no permissionが表示されてました。
51-android.rulesの中を確認したところは内容は変わっていないし変更もしていない。
自分が解決した方法はsuでadbサーバーの再起動です。
# adb kill-server
# adb start-server

COMMENT
NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
PR
© Android Advent
powered by 忍者ツールズ / 忍者ブログ / [PR]