2008年03月26日
PIP-Android
SIPropプロジェクトのみんなで書いた書籍「俺流プロトコル実装入門」内で、作成しているチャットアプリケーションを、Androidに移植してみました。
ダウンロードは、こちらより。
移植とか、大げさな事書いていますが、実際には、PIP-Stackには一切手を入れずに、そのままです。
一部を、Androidの作法に合わせて、書き換えました。
■やったことのメモ
・swingなどのGUI部分を、Android-Viewに合わせて書き換えた
・PIPAgentとMSRPAgentのプロトコルハンドリング部分を、Android-Serviceに合わせて書き換えた
■制限
・エミュレータ上では、外部からの着信がポートフォワードでしかできないため、実際には動作しません。
⇒実機が出るまで、辛抱強く待ってください。orz
■俺流Anroid実装入門
私が、開発した手順を記載しておきます。何かの足しになれば。。。
0,ApiDemosというデモアプリが用意されています。
そして、emulatorを起動すると、メインメニューからすぐに試すことが出来るため、当面の開発は、これを見ながら、コピペしていくのがスタンダードだと思います。
ただ、Androidの作法に則って書かれているため、少々、普通の開発と違うところがやっかいですので、デモアプリを追う方法を後述いたします。
基本的なAndroidの作法などは、2008/03/14にあった丸山先生のレクチャーシリーズの「Google Androidの世界」のハンズアウトを参考にすると良いと思います。
1,ApiDemosには、何種類かのアプリケーションが入っていますので、一つずつ実行しながら、自分が実装したいアプリケーションに近いものを探します。
2,アプリが見つかったら、次に「動作が記述されたjavaソース」を探すことになります。
これは、「samples」ディレクトリにデモアプリの上部バーに書かれた名前と同名のjavaファイルとして、あります。
3,こちらは、動作が記述されているだけで、UIのレイアウトはありません。
そこで、「レイアウト情報が記述されたXMLファイル」を探すことになります。
これは、「res/layout」にソースコードと同名のXMLファイルとして、あります。
4,さらに、「ボタンに表示するテキストなどのリソース情報」は、別に記述されています。
これは、「res/values/strings.xml」に記述されています。
※「3」のファイルも含めて、「@id」や「@string」などは、「res」ディレクトリのどこかのXMLファイルで宣言されています。そして、これらが、「Rファイル」として、コンパイルされています。
5,また、「Serviceの場合」には、AIDLファイルという「提供するサービスのインタフェース」を記述する必要があります。
javaソースと同じディレクトリに、「I + javaソース名」で、 AIDLファイルとして、あります。
6,最後に、「Androidへの登録」は、ルートディレクトリにある、AndroidManifest.xml で行います。
「2」の名前で記述されていますので、AndroidManifest.xml ファイルの中を探します。
追記
実は、このほかにも、外部のネットワークを使うために、いろいろ試しました。まぁ、敗れ去ったわけですが。orz
●qemuのredirectを使う。
Androidの「emulator」 は、qemu上で動作していて、ネットワークはユーザモードのようですので、事実上「10.0.2.0/255.255.255.0」のプライベートネットワークとして、動作しています。(Androidに割り当てられるIPは、「10.0.2.15」です。)
そのため、外部からアクセスさせるためのNATのポートフォワーディングの設定が可能です。
Androidのemulatorを下記のオプションで起動すると設定可能です、、、が、WindowsXP上では、動作しないです。Linux版では、動作しますので、そちらを使ってください。(CentOS4.3で確認)
例:
emulator -qemu -redir tcp:ホストポート::ゲストポート
基本的に、emulatorを起動状態にしなければならないわけで、どうやって、アプリを読み込ませるかというと、
adb install Androidパッケージ化されたアプリのファイル
と、するようです。
ちなみに、Androidパッケージ化は、Eclipseであれば、エクスポートで可能です。
●qemuのtun/tapのブリッジ使用する
さて、上記方法は、所詮、ポートフォワードなので、ちゃんとしたIPを振らせたいという要望もあるかと思います。
その場合は、qemuのtun/tapを、ホストOSのtun/tapデバイスにブリッジするという方法です。
このへんは、qemuの機能ですので、そちらからいろいろ検索してもらえればと思います。
例:
emulator -qemu -net tap
いちおう、調べたところ、成功例はあるようですので、どうにかなると思います。
ですが、私は、面倒だったので、ひとまず保留中ですが、こちらが本命かなと思っています。
※-net socket は、segmentation error で落ちました。使えないようです。
●Zaurus Android
シャープのZaurusに、Androidをいれよう!というものです。
方法や、必要なソフトは、こちらより取得可能です。
で、chrootを使っているため、qemuではなさそうなため、期待して入れてみました。
インストールは、何事もなく、あっさり終了したのですが、、、CFのNICを認識してくれません。。。
wlanの設定などはあるので、どうにかなりそうなのですが、Zaurusのキーボード&画面での設定ファイルの編集に嫌気がさして、投げ出しました。orz
あと、Androidを起動してみたところ、やはり、随分と遅いです。もっ〜〜〜っさりというイメージでしょうか?
それに、何度か、デモアプリがハングアップしたのも気になる点で、これも投げ出した理由の一つです。
(こうなると、リセットしか手が無くなるため、開発にはちょっとつらいかなと。)
- by noritsuna
- at 15:18
comments
お試しになられたZaurusの機種は何でしょうか?C3000ならqemuよりちょっと遅いくらいかなーなレベルなんですけど。まぁ、入力できないキーがあるとか色々とアレゲではありますけど。orz
っぅかcortezさんのイメージ試してみたことないけど、アタイのと何か違うのかしら。
安藤恐竜さん
C3200です。
キー入力を受け付けなかったり、2回入力になってしまったりとするので、体感的な遅さが増幅されている感じですねぇ。キー入力がちゃんと行くとさくさく動くのですが。。。
まぁ、全くチューニングされていない状態だと思いますので、ちゃんとチューニングされれば、まともにはなるのかなとは思っています。
早く、実機がほすぃ。