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を起動してみたところ、やはり、随分と遅いです。もっ〜〜〜っさりというイメージでしょうか?
それに、何度か、デモアプリがハングアップしたのも気になる点で、これも投げ出した理由の一つです。
(こうなると、リセットしか手が無くなるため、開発にはちょっとつらいかなと。)


comments

お試しになられたZaurusの機種は何でしょうか?C3000ならqemuよりちょっと遅いくらいかなーなレベルなんですけど。まぁ、入力できないキーがあるとか色々とアレゲではありますけど。orz

っぅかcortezさんのイメージ試してみたことないけど、アタイのと何か違うのかしら。

安藤恐竜さん

C3200です。
キー入力を受け付けなかったり、2回入力になってしまったりとするので、体感的な遅さが増幅されている感じですねぇ。キー入力がちゃんと行くとさくさく動くのですが。。。

まぁ、全くチューニングされていない状態だと思いますので、ちゃんとチューニングされれば、まともにはなるのかなとは思っています。


早く、実機がほすぃ。

  • noritsuna
  • 2008年04月16日 09:20
comment form
comment form
Creative Commons License
This weblog is licensed under a Creative Commons License.