連載
» 2012年10月25日 08時40分 UPDATE

実践しながら学ぶ Android USBガジェットの仕組み(8):AndroidエミュレータとPCをUSB接続せよ! (1/2)

起動不能になったPCを救出するアプリ「PCRescuroid」の配信を断念し、Androidフレームワーク層の改造に踏み切ったわれわれの前に一筋の光明が! このアイデアが実現できたら世界初かも!? 「AndroidエミュレータとホストPCをUSB接続する」という新たな挑戦に向けたプロローグをお届けする。

[中垣内勇祐、村上雅彦、森崇、中谷洋一(永和システムマネジメント),MONOist]

はじめに

 繰り返しになりますが、起動不能になったPCを救出する「PCRescuroid(ピーシーレスキュロイド)」のアプリ配信を断念せざるを得なくなったため、われわれは前回、PCRescuroidの機能実現のために“Androidフレームワーク層を改造する”という道を選択しました。

 いまだにメンバー内には「何とかならないものか……」という思いがくすぶり続けていますが、このまま立ち止まっていても何も始まりません。前に進んでいくうちに、何かしら光明が見いだせるのではないかと期待しつつ、フレームワーク層の実装に移っていきました。

――そんな中、ある面白いアイデアが浮上してきました。

 今回は、そこに至るまでの経緯とともに、われわれが次に掲げた目標を紹介したいと思います。

雑談タイム

 前回設計まで終わったから、今回はAndroidアプリケーションフレームワーク層の実装だね。これまでの経験からすると、いきなりターゲットボードで動作させるとデバッグが大変なことになるから……、取りあえず「Androidエミュレータ」を使ってデバッグしていくことにしよう。

中垣内 ちょ、ちょっと、待ってください。通常のアプリならAndroidエミュレータでデバッグするのは想像できるんですが、Androidフレームワークのデバッグって一体どうやるんですか?

 うん? 待てよ……。そもそも、Androidエミュレータって、USB接続できなかったような? 仮にできたとしても、AndroidエミュレータとPCをUSB接続するのってちょっと想像できないなぁ。う〜ん。

村上 中垣内さん! Androidフレームワーク層のデバッグは、改造したものをエミュレータの引数に渡せば普通に行えますよ。

 フレームワーク層のソースは、GoogleのAndroidサイトからダウンロードして、“改造 → コンパイル”すればOKです。

 ただ、Android端末をPCに接続するのと同じように、エミュレータをPCに接続するというのは、さすがに聞いたことがないですねぇ……。

 PCとのUSB接続のイメージは、多分、こんな感じだね(表1)。通常のエミュレータのホーム画面上では、左上にUSB接続のアイコンは表示されなくて(表1の左)、外からAndroidエミュレータとPCを仮想的に接続するボタンを押すと、USB接続のアイコンが出てくる(表1の右)。

AndroidエミュレータをUSB接続するイメージ 表1 AndroidエミュレータをUSB接続するイメージ

 で、USB接続が完了すると、PC上では……。

 ん……、そうか!

 PCRescuroidのアプリ配信は断念せざるを得なかったけど、エミュレータなら誰でも気軽に試せるじゃないか! これなら読者の皆さんにアプリの使用感を実感してもらえるはずだ!!

作戦タイム

中垣内 それいいじゃないですか! 前回は正直ちょっとやる気ダウンモードだったけど、今の話を聞いて、かなりモチベーション上がってきましたよー!!

村上 うーん。でも、これって新しい試みですよね。Androidの公式サイトを見てみましたが、こういった利用は正式に「制限です!」って宣言されてますよ……。アイデアは面白いけどホントにうまくいくのかなぁ?

Emulator Limitations

 確かに、イチからエミュレータのUSBデバイス機能を実現しなければならないとなると、結構骨が折れそうだね……。何をどれだけ直すことになるんだろう?

村上 一度にいろんなことをやろうとすると混乱してしまいますから、まずは、できるところから一つずつ片付けていきましょうよ。現時点で見えている、「できること」「できないこと(課題)」をまとめるとこんな感じじゃないですかね(表2)。

No. 課題概要 課題詳細 実現可否
1. Androidフレームワーク層の改造 ソース取得方法
コンパイル方法
エミュレータとの結合方法
2. AndroidエミュレータとのUSB接続 PCとの接続方法 ×
3. Androidエミュレータの改造 ソース取得方法
コンパイル方法
仮想USBデバイスの追加方法 ×
表2 課題一覧

中垣内 うんうん、なるほど。1.Androidフレームワーク層の改造については、村上さんの説明にもあった通り、やり方は見えていますよね。ここは安心だ。きっと、村上さんがやさしく解説してくれるはずですよね!

 次に、2.AndroidエミュレータとのUSB接続ですが、これは“どういう風にPCと接続させるのか”という点をはっきりさせないとダメですね。

村上 そして、3.Androidエミュレータの改造ですが、Androidプラットフォームのソースを取得したら、そこにエミュレータも一緒に含まれていましたよ。「/external/qemu」配下にそれらしきソースがありました!

 Androidプラットフォームをコンパイルすると、Androidエミュレータが出来上がって起動できましたが……。“仮想USBデバイスを追加する”という点については、見当が付きませんね。

 ただ、もしもこれが実現できたら、おそらく世界初(!?)ってことなので、がぜんやる気が出ますね!

 どれどれ、ちょっと拝見……。

 へぇ〜、面白い。どうやら、QEMUのデバイス管理層がうまくできているようで、新しいデバイスの追加は割と簡単にできそうだ。単純な仮想デバイス(RTCなど)を参考にすれば設計・実装はやれそうだね。

 ただ、USB仮想デバイスで実現すべき機能については、PCとの接続方法が固まらないと決め切れないので、そこをまず考える必要があるね。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.