プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

【Android】VMware上のUbuntuで実機を認識

今のAndroid開発環境はVMware上のUbuntuにEclipseを入れたものです。先日、Android端末の実機(GDD Phone, HT-03A相当のやつ)を手に入れたので、早速実機を認識させてデバッグをできるようにしたいと思います。

ただ、仮想マシン上の開発環境で実現する方法がいまひとつよく分からなかったので、やった作業の手順を備忘録代わりにメモを残しておきます。やった順番なので、正しい保証はありませんので、あくまで参考程度にご覧ください。

なお、今回作業をした環境は以下のとおりです。

ハードウェア:Lenovo T410

VMware Player 3.0.1

ホストOS:Windows 7 Home Premire (64bit)

ゲストOS:Ubuntu 9.04 Desktop版 日本語Remix版 (32bit)

Android実機:GDD Phone (android 1.5)

 

始めに

VMware Playerのマニュアル(VMware Player ヘルプ : デバイスの接続 : 仮想マシンでの USB デバイスの使用)を見ると、

ホスト OS が USB をサポートしていなければなりませんが、デバイスを仮想マシンでしか使用しない場合は、
ホスト OS に USB デバイス用の固有のドライバをインストールする必要はありません。

と記載してあります(マニュアルの該当個所を抜粋して掲載)。

このため、仮想マシン上のUbuntuでAndroid実機をUSB接続する際の考え方としては、

  • ホストOS(Windows)側には一切ドライバのインストールなどは不要
  • ゲストOS(Ubuntu)側でOSに応じた設定方法を行えばよい

ということになると思います。

これさえ分かってしまえば、後は必要な作業を適宜行えば問題なく認識できるはずだと思います。

 

1.実機をPCに接続

まず、何も考えずに実機をPCに接続しました。Windows上でUSBドライバが勝手にインストールされます。ドライバのインストール後は、下記のような画面です。

デバイスマネージャの画面

この時の実機の設定としては、『設定』→『アプリケーション』→『開発』→『USBデバッグ』にチェックがついた状態です。

 

2.ゲストOSの設定

VMware Playerを起動します(まだ、仮想マシンは起動していません)。

今使っているゲストOSには、USBコントローラが入って無かったので、VMwareのマニュアルに従って、USBコントローラを追加します。

(VMware Playerのマニュアルによると通常はUSBコントローラが入っているそうです。今回の仮想マシンは、別のESXi上のUbuntuをVMware Converterを使い、VMware Playeに持ってきたものがベースになっているので、その関係でUSBコントローラが無かった可能性もあります。ただ、詳細な経緯は不明です。)

(1) ゲストOSの設定を選択します。

(2)『追加』を選択します。

ゲストOSのハードウェア設定

(3)『ハードウェアの種類』で『USBコントローラ』を選択して、『次へ』を押します。

ハードウェアの追加画面

(4) そのまま『完了』ボタンを押します。

USBコントローラ

 

3.Ubuntuの起動

ここで、仮想マシンを起動します。

起動時に、Windows側に VMware USB Deviceというドライバがインストールされます。また、下記のような画面が表示され、USBデバイスの接続に関するメッセージが表示されます。

USBデバイスに関する通知

これは、VMware Playerの『VM』→『取り外し可能デバイス』→『High USB Composite Device』→『接続(ホストから切断)』または『切断(ホストに接続)』を選択することで、USBデバイスの接続先としてホストOSかゲストOSのどちらか一方を選ぶようになっていることを指しています。

ちなみに、なぜか手元の環境ではアイコンによる表示がうまくできていませんでした。

また、USBデバイスの接続状況により、Windowsのデバイスマネージャの内容が変わります。USBデバイスがホストOS側に接続されているときは、上の方で示したような状態になり、ゲストOS側に接続されているときは、

USB機器をゲストOSに接続時のデバイスマネージャ

のようになります。

 

4.Ubuntuの設定

いよいよUbuntu上での設定です。 実はここが一番ハマりました。また、結局、正解が分からなかった箇所です。

Googleの手順にかかれているように、/etc/udev/rules.d/51-android.rules ファイルを作成しました(下記の内容)。

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

しかし、adb devices としても、

?????????? no permission

と表示されるだけで、正しく認識されませんでした。

その後、いろいろ試してみたのですがうまく認識されませんでした。

そのうち、こちらのディスカッション『Linux環境でのHT-03A + EclipseのUSB接続 』の内容に従って、同じ内容

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb",ATTR{idVendor}=="0bb4",ATTR{idProduct}=="0c02",SYMLINK+="android_adb"
SUBSYSTEM=="usb",ATTR{idVendor}=="0bb4",ATTR{idProduct}=="0c01",SYMLINK+="android_fastboot"

の50-android.rulesと51-android.rulesファイルを用意して、sudo /etc/init.d/udev restart としたのですが、最初はやはり認識されませんでした。

ただ、USBの接続と切断を試していたら、何かの拍子に認識されるようになり、

認識後の様子

と正しく表示されました。

ただ、ここが不思議な所ですが、一度正しく認識されたら、rules.dの内容を最初の51-android.rulesファイルのみにして再起動しても、以後は正しく認識されるようになってしまいました。

何が原因で最初は認識されなったのか不明なので気持ち悪いのですが、とりあえずまともに認識されるようになったので、当面はヨシとします(接続と切断については、UbntuのAndroidScreenshots という記事で触れられているように、一度切断して繋ぎ直せとあるので、それが影響しているのかもしれません)。

 

5.確認

正しく、アプリケーションのインストールができるか試してみました。

ApiDemoのapkファイルがあったので、実機をつないだ状態で、

adb install  ApiDemo.apk

とすると、いろいろメッセージが出たのち、Successと表示されました。

実機の画面を見ると、ApiDemoのアイコンが追加されており、実際に動作させると快適に動きました。

また、Eclipseでandroid1.5をターゲットとしたサンプルを作成して、デバッグ実行すると、特に問題なくブレークポイントで止まりました。

これで問題なく実機デバッグが出きると思います。