i-mode で動く Java プログラムの書き方


i-mode で動く iJava でのプログラムの書き方についてです。
以下は、Doja2.x、JSCL1.1、EzPlus1.0 の頃の記述ですので、ご注意ください。

i-mode Java / 実機 / 特徴 / 環境 / API / アプリ / UI / Connection / 公開 / サンプル / 不具合 / 参考 / 戻る / トップページ


i モード対応 Java プロファイル

i モードで動く Java は Java2 Micro Edition CLDC i モード対応 Java プロファイル と呼び、 All about i-mode から仕様・詳細な開発ガイドと API リファレンスの pdf ファイルが ダウンロードできます。 FAQ も用意されています。
 
Java2 Micro Edition (Java2ME) とは組みこみ機器向けの Java2 のエディションで、 一般的な Java2 である Standard Edition のサブセットです。
 
CLDC とは Connected, Limited Device Configuration の略で、 Micro Edition のクラス構成 (Standard Edition のどれだけをサブセット化するか) を表します。 CLDC は KVM (Kirobyte Virtual Machine, キロバイト単位のメモリで動作する 組みこみ機器用の VM) を使います。
 
さらに用途向けの用意された特殊な API (プロファイルと呼びます) が用意されており、 「i モード対応 Java プロファイル」 がその名の通り、i モード向けのプロファイルです。 i-mode 以外の携帯電話は基本的に MIDP (MIDP については別ページ 携帯で動く MIDP プログラムの書き方 をお読みください) を使用します。
 
504i シリーズの詳細が発表され、 公式な i アプリの仕様・SDK が公開されました。 D504i 独自の API に関する仕様・SDK は My D-style for ムーバ D にあります。
 
504i シリーズの詳細発表については、 ドコモが504iシリーズ発表、「D504i」「F504i」を5月24日発売【ビジネスシヨウ2002 TOKYO】Mobile:ドコモ、「504iシリーズ」発表Mobile:ドコモ夏野氏が語る、504iのアピールポイントとはMobile:ドコモの504i端末5機種を写真でチェックファミ通.com / GAME / 【MOBILE】NTTドコモの新ケータイ、504iシリーズがついに発表!Mobile:504i向け3Dポリゴンの特徴と今後(1/3)Mobile:504iの“待ち受けアプリ”とは何なのかMobile:赤外線が携帯を変える──504i などがあります。 SDK についての関連記事として、 ドコモ、504i用iアプリ開発ツールと技術資料を公開Mobile:504iの各種仕様が公開──iアプリの待ち受けが可能にドコモ、504i向けiアプリの開発ツールを公開 があります。

i-mode Java が動作する機種

i モード対応 Java プロファイルは DoCoMo の i-mode 端末の 503i シリーズ以降, FOMA シリーズで動作します。
 
FOMA シリーズで動作する i アプリは 503i シリーズと同じ仕様となっています。 ただし、一部の機種を除いて 使用可能なファイルサイズは 30KB に拡張されています。
 
504i シリーズの i アプリの仕様は 503i, FOMA シリーズに対して 大きく拡張されています。 504i シリーズの発売は 2002/5/24 です (F504i, D504i)。
 
503i シリーズの発売は 2001/1/26 です (P503i, F503i)。 DoCoMo の正式発表が DoCoMo what's new にあります。 N503i の発売は 2001/3/3、 So503i の発売は 2001/3/9、 D503i の発売は 2001/3/19 (北海道は 16 日、四国は 17 日、東北は 21 日) です。 DoCoMo の公式情報が All about i-mode にあります。
 
ZDNN:次世代iモードのブラウザを探る──JavaとSSLで変わるiモードドコモのJava搭載「iモード」にも「JBlend」(2000/12/6) によると JavaVM の開発は ほとんどの機種はアクセス社 (i-mode のブラウザの開発元)、 一部機種ではアプリックス社の JBlend が採用されます。
 
ZDNN:速報:ターボリナックスと富士通,「iアプリ」用HTML-Java変換ツールを3月にも無償配布CNET Japan Tech News:CNET Japan発:ターボリナックス、HTMLコンテンツをiアプリ対応に変換するツール開発、無償配布へターボリナックス、iアプリ用コンテンツ作成・変換ツールを開発Turbolinux Japan より、HTML コンテンツを自動的に Java コンテンツに変換する ツールを開発していくそうです。 これを利用すれば、 プログラムの知識がなくてもある程度のコンテンツ制作が出来るようです。

特徴

i-mode Java の特徴を列挙します。
 
ファイルサイズは jar 圧縮で最大 10k まで
一時的にデータ (画像も可) を保存する領域 (スクラッチパッド) のサイズは最大 5k
端末には i アプリを少なくとも 3 つは保存できる (機種によってはもっと多い)
GIF ファイルと i-メロディファイルが使える
携帯のアドレス帳などの情報にはアクセスできない
ダウンロード元のサイトに対してのみネットワーク接続できる
SSL が使える
 
504i シリーズの特徴は以下のとおりです。
 
ファイルサイズは jar 圧縮で最大 30KB まで
スクラッチパッドのサイズは最大 100KB
IrOBEX (赤外線通信) のサポート (データの送受信、アプリの起動など、携帯間も可)
待ち受けアプリケーションが作成可能
音声発信 (電話をかける機能) のサポート
折り畳み状態の認識
メール受信状態 (未読など) の状態取得
バイブレーター制御の正式対応
HTML 風のレイアウト
アプリからのブラウザ起動とその逆
画面サイズ対応の自動センタリング
iメロディ対応
他のアプリを起動できる
 
通信速度が 9600 bps から 28.8 Kbps に増えたため、 アプリの容量制限が 30KB に増えました。 スクラッチパッドも 100KB に大幅増量です。 Mobile:504i総力特集 に関連記事がまとまっています。 Mobile:504iを解剖する(4):iアプリ最速の端末は? で速度性能もわかります。

開発環境

All about i-mode で公式な開発環境がリリースされています。 504i シリーズはメーカー独自の拡張が施されているため、 それらについてはメーカーが提供しています。 D504i 独自の API に関する仕様・SDK は My D-style for ムーバ D にあります。
 
「i モード対応 Java コンテンツ開発ガイド〜詳細編〜」 に開発サイクルが書かれています。
 
それによると、開発には Java2 SDK Standard Edition 1.3、Java2ME CLDC、 i モード Java 拡張 API クラスライブラリ、 i モード Java 文字コンバータが必要です。 後者 2 つは別途 DoCoMo から公開されるそうです。
 
Java2 SDK Standard Edition 1.3 は Java(TM) 2 Platform Standard Edition から、 Java2ME CLDC は CLDC and the K Virtual Machine (KVM) (英語) からダウンロードできます。 Sun Download Center を使用するため、登録する必要があります (無料)。 また、Java2ME CLDC のページからは CLDC の日本語の仕様書がダウンロードできます。
 
また、非公式のエミュレーターとして、 iEmulatori503Enginei-JADE Lite が公開されていますので、 これらを使用することで PC 上で開発・テストができます。
 
SINSEN の「DoJa メモ」、 ケータイJavaで遊ぼう! で公式開発環境を使わずに 実機で動作するクラスを作成する方法が書かれています。 上記エミュレーターのクラスや からっぽ実装 (「からっぽ実装」は私が作った実機動作クラス生成専用のクラス実装です。 どうぞご自由にお使いください) と CLDC の preverify.exe を利用することで 実機で動作するクラスが作れます。 最新のバージョンの CLDC 1.0.2 では preverify.exe は jar ファイルを扱えるようになっています。
 
また、この方法での開発を支援するツールとして GADeKiAppIDEMocha などが公開されていますので、これらを使用すると便利です。
 
その他、 効果音 (着メロ) 作成に smdEdNAKAのホームページだよぉ!!!! の MLD Creator 16 を、 プリプロセッサに PPP を使うと便利です。

API

i-mode Java は 3 つの API 層から構成されています。
 
Java2ME CLDC で定義されている必要最小限の Java API (java. で始まるパッケージ)、 i モード対応 Java プロファイルで定義されている i-mode 用 API (com.nttdocomo. で始まるパッケージ)、 機種ごとの拡張機能用 API です。
 
CLDC で定義されている部分に関しては 同じ CLDC 上のプロファイルである MIDP と同じですが、 この部分の API は言語である Java を構成するもので、 必要最小限のクラスで構成されており、 MIDP とは別物と考えた方が良いでしょう。
 
音声やバイブレーション機能は機種ごとの拡張機能用 API に含まれるので、機種によっては使えないようです。
 
i-mode Java は CLDC に分類されているため、 浮動小数点は使えません。 また、スレッドグループ・ファイナライズもサポートされません。
 
504i シリーズでは機種ごとの拡張機能用 API は 「オプション API」「拡張 API」の 2 種類に分類され、その仕様は一般公開されました (503i シリーズの機種ごとの拡張機能用 API は一般公開されていません)。
 
オプション API は、仕様が統一され、実装するかどうかはメーカーの判断に ゆだねられる API です。拡張 API は端末メーカーが独自に規定した API です。 3D 描画などはこれらの API に含まれ、アプリの機種依存差はますます 大きくなりました。

iアプリケーション

i-mode Java で作成されたアプリケーションを 「i モード Java アプリケーション」と呼びます。 i モード Java アプリケーションは com.nttdocomo.ui.IApplication クラスを継承して作ります (Applet と同じ要領です)。
 
IApplication クラスを継承したら、
    public void start();
メソッドをオーバーライドする必要があります。 このメソッドは起動した時に呼ばれます。
 
iアプリケーションを終了させるには IApplication オブジェクトの terminate() メソッドを呼び出します。 System.exit(); は使ってはいけません。
 
なお、iアプリケーションから別のiアプリケーションは起動できません。

ユーザーインターフェース

i-mode Java には awt はなく、 その代わりの UI (ユーザーインターフェース) として com.nttdocomo.ui パッケージが用意されています。 awt ではないため、peer 確定問題に悩まされない点はなかなか便利です。
 
画面そのものが Display クラス、 表示される内容は Frame オブジェクトで表現されます。 Display クラスのメソッドは全て static 宣言されています。
 
画面に表示する内容を Frame クラスのサブクラスから選び、 そのオブジェクトを Display クラスに設定します。
    Frame panel=new Panel();
    Display.setCurrent(panel);
Frame クラスのサブクラスとして、 Canvas クラスと Panel クラス、Dialog クラスがあります。 Panel クラスには各種コンポーネント (ボタンやラベルなど) が追加できる 高レベル API とされています。 Canvas クラスは awt の Canvas クラスと使い方は似ている、 低レベル API とされています。 Dialog クラスはその名のとおりいわゆるダイアログです。
 
ボタンやラベルなど web ブラウザのような表示をしたい場合、 Panel オブジェクトに Component クラスのサブクラスのオブジェクトを add(Component c) メソッドで追加していきます。 イベントは Panel オブジェクトに通知され、 Panel オブジェクトに登録されているリスナーへと通知されます (Delegation イベントモデル)。
 
ゲームを作ることを目的としているのであれば、 ゲーム用のデバイスの使用も想定して設計されていて、 自由に絵が描画できる Canvas クラスを使うことになるでしょう。 Canvas クラスは継承して使います。 イベント処理は processEvent(int type,int param) メソッドをオーバーライドして処理します。

Generic Connection

Java2ME CLDC ではネットワーク (HTTP, Datagram, Socket など)、 ポート、ファイルなど全ての入出力への接続を簡単に、 メモリの消費を抑え、そして汎用的に扱えるようにするため、 Generic Connection フレームワークを採用しています。
 
Java2ME CLDC に基づいている i-mode Java も 当然このフレームワークに従います。 i モード対応 Java プロファイルでは HTTP、HTTPS、 スクラッチパッド、リソース (Jar ファイルの中にあるファイル) への接続が出来ます。
 
Generic Connection フレームワークでは接続先を 「プロトコル : 位置 パラメータ」で表現します。 そして、javax.microedition.io.Connector クラスの open(String name) クラスメソッドで接続先を指定すると Connection オブジェクトが得られます。 Connection インターフェースは文字通り接続を表すクラスで、 実際には接続先に応じたサブインターフェースを 実装したクラスのオブジェクトが使われます。 そして、Connection オブジェクトからストリームを取得したり、 設定をしたりします。
    Connection connection=Connector.open("http://www.antun.net/index.html");
    HttpConnection httpconnection=(HttpConnection)(connection);
    InputStream in=httpconnection.openInputStream();
 
スクラッチパッドのプロトコルは「scratchpad (位置は /0 固定)」 (例: scratchpad:///0)、 リソースのプロトコルは「resource」 (例: resource:///image.gif) です。

公開方法

iアプリケーションを公開するには iアプリケーションとその関連ファイルを jar 圧縮して、 その jar ファイルに関する情報を記述した ADF (jam ファイル) を 作る必要があります。
 
jar 圧縮ファイルは最大 10KB であると制限があります。
 
jam ファイルは jar ファイルの置いてある URL やサイズを記述した テキストファイルです。 iアプリケーションをエージェントモード (定期的な実行) で実行したい時はこの jam ファイルに実行間隔を記述します。
 
この 2 ファイルを web サーバー上に置いて、 HTML にダウンロード用のタグを記述すれば公開できます。
    <OBJECT DECLARE ID="hogehoge"
     DATA="http://www.antun.net/tips/mobile/sample/test.jam"
     TYPE="application/x-jam">
    サンプルアプリケーション
    </OBJECT>
    
    <A IJAM="#hogehoge" HREF="hoge.html">ここ</A>
このように OBJECT タグで jam ファイルを指定し、 A タグの IJAM 属性でそれを指すようにします。 携帯でそのリンクをクリックするとダウンロードが出来ます。 i-mode Java 未対応の携帯では A タグの HREF 属性 (必須) で示されたページに飛びます。 仕様は All about i-mode をご参照ください。
 
iアプリ検索サイトとしては ギガアプリアプリ★ゲット などが有名ですので、 自作の i アプリはこれらに登録すると良いと思います。

サンプルプログラム

たいしたものはありませんが、簡単なソースコードを公開しておきます。
 
hello1.zip
Label を使って画面に Hello !! を表示します。
 
hello2.zip
Canvas を使って画面中央に Hello !! を描きます。
 
watch.zip
Timer クラスを使った簡単なデジタル時計です。
 
animation.zip
Timer クラスを使って画像のアニメーションを表示させます (実行には image/image01.gif 〜 image/image12.gif が必要です)。
 
env.zip
引数、ダウンロード元 URL、System.getProperty を表示します。
 
cache.zip
ダウンロードした画像をスクラッチパッドに蓄え、 スクラッチパッドから画像を読み込んで表示します。 ADF (jam ファイル) の SPsize キーにスクラッチパッド容量、 UseNetwork キーに http を追加する必要があります。
 
operation.zip
キャラクターを左右移動・ジャンプ操作できます (実行には chara.gif が必要です)。
 
piano.zip
ピアノを演奏します。1 番〜8 番のボタンがド〜高いドに対応しています。 実機では .mid ファイルではなく、 .mld ファイルに変換する必要があるらしいです。
 
clock.zip
アナログ時計です。固定小数点を使用。 こちら に実行形式があります。
 
phonesystem.zip
ソフトキーでバックライト・バイブレーション機能を ON/OFF できます。

不具合情報

SO503i で i アプリをバージョンアップをした際に、 使用スクラッチパッドのサイズが増えていると 他のアプリのスクラッチパッドのメモリの読み書きが出来てしまう セキュリティーホールがあります。 NIKKEI NET によると無償交換が開始されますので、 SO503i ユーザーは交換されると良いと思います。 関連記事は Mobile:携帯電話の不具合問題を追う〜2 NTTドコモにて(1/2)アプリケーション作成上の注意点Mobile:SO503iの“iアプリバグ”の正体は?(1-2)SO503i情報掲示板「改良機・対策・情報等]Mobile:P503i,SO503iのiアプリに問題SO503i、iアプリ内の情報が流出するセキュリティーホールDoCoMo what's newMobile:SO503iのiアプリにバグ,42万台回収,交換へMainichi INTERACTIVE モバイルCNET Japan Tech News:CNET Japan発:ドコモのiアプリ端末『SO503i』に不具合、42万台を交換、販売も停止 など。
 
P503i で i アプリがダウンロードできない不具合が見つかっています。 これは ADF の最終更新日の記述で、 本来は「Apr」と記述すると 4 月と認識されるものですが、 P503i のみ「Apl」と記述しなければダウンロードができないためです。 i アプリ開発者は更新日に 4 月を使用しないか、 P503i のみ別の ADF を用意するなどして対処しましょう。 なお、P503iS では「Apr」「Apl」のいずれでも認識されるようになっています。 DoCoMo からは アプリケーション作成上の注意点 と発表されています。 関連記事は Mobile:P503i,SO503iのiアプリに問題日経バイトMobile:P503iのiアプリに4月問題ドコモ「P503i」にiアプリがダウンロードできない不具合 があります。

参考ページ

MIDP のプログラムで参考になるホームページのリンクを挙げておきます。
 
All about i-mode
i モード対応 Java プロファイルの公式ページです。 仕様がダウンロードできます。FAQ もあります。
 
iαppli
i アプリの公式ページです。
 
Java(TM) 2 Platform Standard Edition
Java2 Standard Edition 1.3 の正式ページです。 JDK 1.3 がここからダウンロードできます。
 
CLDC and the K Virtual Machine (KVM) (英語)
Java2 Micro Edition CLDC の正式ページです。 CLDC がここからダウンロードできます。 日本語の CLDC の仕様もあります。
 
[ i-JADE ] ゼンテック・テクノロジー・ジャパン
i アプリエミュレーター i-JADE Lite がダウンロードできます。
 
iEmulator
個人で i-mode java のエミュレーターを作られてます。
 
open i-503 Project
こちらも個人で i-mode java のエミュレーターを作られてます。 オープンソース (LGPL) です。
 
SINSEN
携帯端末の機種依存を個人開発者同士で助け合おうとされています。 リンク集も充実しています。
 
Overflow! さかきけいのページ
HelloWorld! を表示するプログラムの作り方を 丁寧に解説されています。 機種依存情報が書き込まれている API マニュアルも便利です。
 
携帯電話でJavaしてみよう!「My iアプリ」
Java 初心者の方の体験記です。 プログラムの書き方について詳しく書かれています。
 
NNakato's home
「iJava 仕様ダイジェスト」や「携帯電話関連リンク集」を 書かれています。
 
Henry Minsky's iMode Application Development Notes (英語)
海外の方のページですが、特にツール関係の情報が豊富です。
 
Kajas FAQ TOP
開発上の FAQ があります。
 
i-appli
503i に搭載されている KVM のベンチマークテスト結果があります。
 
着声をつくろう♪
i アプリで音声 (PCM) を再生するための MLD ファイルを作るにはこのページを参考に。
 
携帯Java最新事情
@IT の「ドコモ仕様 と MIDP はどう違う?」が書かれている記事です。
 
モバイル:トップページ
ZDNet のモバイル関連の記事です。 i-mode Java についてもしっかりと書かれているので、 時々見に行くと良いと思います。

戻る