AndroidエミュレータとPCをUSB接続せよ!:実践しながら学ぶ Android USBガジェットの仕組み(8)(2/2 ページ)
起動不能になったPCを救出するアプリ「PCRescuroid」の配信を断念し、Androidフレームワーク層の改造に踏み切ったわれわれの前に一筋の光明が! このアイデアが実現できたら世界初かも!? 「AndroidエミュレータとホストPCをUSB接続する」という新たな挑戦に向けたプロローグをお届けする。
AndroidエミュレータとPCとの接続についての考察と結果
中垣内 直感的な使いやすさを考えると、こんな感じですかねぇ。
[USB接続]ボタンを追加して、ボタンを押すとUSB接続されて、PCのデスクトップ上にSDカード内のファイル格納フォルダがポップアップされる――という具合です(図1)。
森 なるほど。現在使用しているホストPCのOS(Linuxカーネル)とAndroidエミュレータとを仮想的にUSB接続して、ホストPC上からは本物のAndroid端末がUSB接続されているように見せ掛けるんだね(図2)。
ただ技術的な難点は、AndroidエミュレータからのUSBリクエストを、LinuxカーネルのUSBホストコントローラドライバ内でループバックして、ホストPCに戻すことができるか……だね。多分、これ以外にも技術的な課題は多そうだけど、Linuxカーネルならオープンソースだし、頑張ればできなくはなさそうだ……。とはいえ、短期間で作るとなると骨が折れそうだな。
そうだ! 別の案だけど、“仮想マシン同士をUSB接続する”というのはどうかな?(図3)
この構成だと、改造箇所は仮想マシン(QEMU)がメインになるので技術的にはやりやすいような気がするぞ。ただ、難点は、ユーザーの手間が増えるのと、QEMU上で動作するOSはとても重いということ。性能的に耐えられるかどうか……、かなり心配だな。KVMも選択肢に入れるか……。
村上 なるほど、2つの実現方法がありそうですね。
確かに、難点は幾つかあるけど、“仮想マシン同士をUSB接続する”方が機能実現の一番の近道のようですし、そこから手を付けてみてはいかがでしょう?
AndroidエミュレータのUSB接続デモ
こうして、AndroidエミュレータのUSB接続の方針が決まりました。
それではこの方針を踏まえ、改造を始めていきましょう!
……
……
ご覧の通り、トッカンで作りましたので、[USB接続]ボタンの作成は割愛し、[受話器]ボタンで代替しています。受話器を上げるとUSB接続し、受話器を下げるとUSB接続を切断します。
改造ポイントをまとめたものを図4に示します。なお、今回はAndroidエミュレータ側を改造しました。
今回のエミュレータ側の改造ポイントによる“メリット”は、大きく分けて2つあります。
- Androidエミュレータ側の仮想USB接続/切断を実現
- Androidアプリケーションフレームワーク層を完全エミュレート
まず、1.についてですが、単純なボタン操作でUSB接続/切断が実現できたことは、USB機能をデバッグする開発者にとってはうれしいポイントといえます。
次に、2.についてですが、今回の改造箇所は、Linuxカーネルの非常に深いところにある「USBデバイスコントローラドライバ」と、仮想マシンであるQEMUの「USBデバイスコントローラ」だけであり、Androidフレームワーク側には一切の修正がありません。
これは、USB接続/切断に関して、完全にAndroidアプリケーションフレームワーク層をエミュレートできたということです。つまり、フレームワーク層に対する修正なしで、デバッグ/テストが行えるということなので、この改造エミュレータの意義は非常に大きいといえます。少なくとも、今回開発を進めているPCRescuroidのフレームワーク層の改造で、このエミュレータは大変重宝されることでしょう。
とはいえ、今のままでは、USB接続/切断までのエミュレートしか実現できておらず、肝心のSCSIコマンドなどのやりとりは、まだエミュレートし切れていません。これを実現するためには、ホストPC側のQEMUの改造が必須となります。現時点では、こちらの改造は、まだ“見通しが立っていない状態”であり、もう少し時間がかかりそうです。そのため、この進ちょく具合に応じて、次回は以下のいずれかの内容を紹介したいと思います。
- 今回のエミュレータを使ったPCRescuroidの改造/デバッグ内容の紹介
- ホストPC側のQEMUの改造結果の紹介
どうぞご期待ください。(次回に続く)
関連キーワード
組み込みAndroid開発 | 実践しながら学ぶ Android USBガジェットの仕組み | USB | Android | 組み込み | Androidケータイ | アプリケーション開発 | Androidがもたらす組み込み開発の新たな可能性 | 組み込み開発 | 作りながら理解するファイルシステムの仕組み
Copyright © ITmedia, Inc. All Rights Reserved.