ごく普通の在日

Androidアプリ開発で、実機USB接続のときもろもろトラブル

Androidアプリの開発はエミュレータでアプリの動作、デバッグなど行うことができるが、 実機にインストールして自分の手で動作のテストをやってみるときはAndroid端末とPCにUSBでつないで確認する。

当たり前ですけど、PCがそのデバイスを認識できてからでないと何も進みません。

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

そうすれば作ったAndroidアプリを実機で動作の確認は問題なく行える。
実機を使ってアプリ開発することについての説明は以下のURLで確認することが出来ます。
Using Hardware Devices
http://developer.android.com/intl/ja/guide/developing/device.html


linux環境でAndroidアプリ開発をしているが、実際にPCと端末の接続がスムーズにできているわけでもなくて
いろんなところから参考されてもらっている。


公式ドキュメントのUsing Hardware Devicesに書かれているように
システムに対象デバイスのセットアップが必要。

Ubuntuの場合
suになって/etc/udev/rules.d/のとこに51-android.rulesファイルを作って中身は
例:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
追加しておいて
# chmod a+r /etc/udev/rules.d/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端末
初期docomoさんはこれをGoogleケータイと呼ぶが、今頃は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
とすると、今起動しているAndroid端末とかエミュレータのリストを表示してくれる。
List of devices attached
emulator-5554   device
1000cd14058f    device
HT963LF01040    device

デバイスの設定せずに端末を接続して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が表示されている。
 
だけれども、その例外もある。たとえばNexus OneとNexus S
Nexus OneはHTC製品だが、USB Vendor IDsは「0bb4」になっていない
Nexus SはSamsung製品だが、「04e8」になっていない
そのときはlsusbで確認をしてみるとNexus OneもNexus Sも「18d1」となっている。
なぜだろう?
 
もう一つのトラブル
Galaxy SのプラットフォームバージョンをAndroid 2.2.1にアップロードしたとき
アップロード前は端末の認識できていたがアップロード後うまく認識できなくて
???????????    no permission
が表示されている。
51-android.rulesの中身は変わっていないし変更もしていない
 
そのときはsuになって一回
# adb kill-server してから
# adb start-server
 
そうすれば、Galaxy Sの端末がこれまでと同じように認識される。
 
以上かな
Androidアプリの開発はエミュレータでアプリの動作、デバッグなど行うことができるが、 実機にインストールして自分の手で動作のテストをやってみるときはAndroid端末とPCにUSBでつないで確認する。

当たり前ですけど、PCがそのデバイスを認識できてからでないと何も進みません。

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

そうすれば作ったAndroidアプリを実機で動作の確認は問題なく行える。
実機を使ってアプリ開発することについての説明は以下のURLで確認することが出来ます。
Using Hardware Devices
http://developer.android.com/intl/ja/guide/developing/device.html


linux環境でAndroidアプリ開発をしているが、実際にPCと端末の接続がスムーズにできているわけでもなくて
いろんなところから参考されてもらっている。


公式ドキュメントのUsing Hardware Devicesに書かれているように
システムに対象デバイスのセットアップが必要。

Ubuntuの場合
suになって/etc/udev/rules.d/のとこに51-android.rulesファイルを作って中身は
例:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
追加しておいて
# chmod a+r /etc/udev/rules.d/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端末
初期docomoさんはこれをGoogleケータイと呼ぶが、今頃は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
とすると、今起動しているAndroid端末とかエミュレータのリストを表示してくれる。
List of devices attached
emulator-5554   device
1000cd14058f    device
HT963LF01040    device

デバイスの設定せずに端末を接続して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が表示されている。
 
だけれども、その例外もある。たとえばNexus OneとNexus S
Nexus OneはHTC製品だが、USB Vendor IDsは「0bb4」になっていない
Nexus SはSamsung製品だが、「04e8」になっていない
そのときはlsusbで確認をしてみるとNexus OneもNexus Sも「18d1」となっている。
なぜだろう?
 
もう一つのトラブル
Galaxy SのプラットフォームバージョンをAndroid 2.2.1にアップロードしたとき
アップロード前は端末の認識できていたがアップロード後うまく認識できなくて
???????????    no permission
が表示されている。
51-android.rulesの中身は変わっていないし変更もしていない
 
そのときはsuになって一回
# adb kill-server してから
# adb start-server
 
そうすれば、Galaxy Sの端末がこれまでと同じように認識される。
 
以上かな