LinuxでのJ2MEアプリケーション構築法

 Java対応型の携帯端末をより効果的に活用したければ、Java 2 Micro Edition(J2ME)アプリケーション(別名ミッドレット)をLinux上で作成してモバイルプラットフォーム上で実行するという方法がある。こうした操作がいかに簡単に実行できるかを証明するため、本稿ではHelloWorldアプリケーションを作成して携帯電話で動かす具体的な方法を説明することにする。

 今時の携帯電話であればたいていはJavaアプリケーションのインストールと実行に対応しているはずだが、実際のサポート状況については付属ドキュメントを参照するかGSMArena Webサイトにて各デバイスの仕様を確認して頂きたい。

 まず最初にJava Development Kit(JDK)およびSun Java Wireless Toolkit(WTK)を手元のシステムにインストールしておく。ここではUbuntu Linuxシステムを前提とするが、その他のディストリビューションでも基本的な手順は同じはずである。

 JDKのインストール手順に特に難しい点はなく、また数カ月前にオープンソース化されたことを受ける形で、現在では各種ディストリビューションのリポジトリにも収録されるようになっており、例えばUbuntuの場合はsun-java6-jdkというパッケージが用意されている。ただし現行のWTKは32版Linux用にコンパイルされているので、64ビット版Linuxで使用する場合は、Sun Java Standard Edition(SE)のダウンロードページから32ビット(i586)JDKを入手し直す必要がある。手動インストール時におけるJDKの保存先は/usr/java/としておく。なお手元のシステムが64ビット版Linuxであるかを確かめるには「uname -m」を実行して64と表示されるかを確認すればいい。

 Webサイトに解説してある手順に従ってWTKをインストールすると、J2MEプラットフォーム用アプリケーションのコンパイルに必要なファイル群および、携帯電話へのインストール前に各自の作成したプログラムを動作試験するためのエミュレータが入手できる。本稿ではWTKのインストール先が/usr/local/WTK2.5.2/であるものとして解説を進める。なおインストールの完了時には、ktoolbarと呼ばれるWTKのプロジェクト管理ツールに対するフルパスがインストーラにより通知されるはずだ。これは、プロジェクトの構築と各種の設定および特定ディストリビューション用パッケージのコンパイルと作成を、グラフィカルユーザインタフェース(GUI)を介して操作可能にするためのツールである。

 その名称からは少し想像しづらいが、ktoolbarもれっきとしたJavaアプリケーションの1つである。なおWTKインストーラは各ディストリビューションのApplicationsメニューにおける当該エントリの登録までは行ってくれないので、このエントリ登録についてはApplicationsを右クリックしてEdit Menu…を呼び出し、Programmingサブメニューへの追加をユーザが実行しておく必要がある。その際の登録名はSun Java Wireless Toolkitとしておけばいいが、コマンドパスには先にインストーラから通知されたktoolbarコマンドのフルパスを登録しておく。またアイコンをカスタマイズしたければ、参照先を/usr/local/WTK2.5.2/wtklib/images/Midlets.pngなどに変更しておけばいいだろう。

j2me_thumb.png
The Sun Wireless Toolkit

 インストレーションが正常に行われたかを確認するには、エミュレータ上でデモプログラムを実行してみればいい。まずはWTKにある既存プロジェクトを開いて、Gamesというサンプルを選択する。そしてBuildおよびRunの順番で操作ボタンをクリックする。この操作によって携帯電話のエミュレータが起動して、バーチャルな端末上でアプリケーションを実行できるようになればOKだ。

 既存のサンプルプロジェクトを開くと、該当するプロジェクトファイルがWTKにより各自のhomeディレクトリにある~/j2mewtk/2.5.2/apps/サブディレクトリにコピーされる。これをワークスペースとして使用することになるが、その際にWTKでは、ユーザ各自の環境とテキストエディタを用いてソースコードの編集を行うものとされている。それというのもWTKは、あくまでプログラムの構築環境を提供するだけの存在であり、独自の開発環境までは用意されていないからだ。

HelloWorldミッドレットの作成

 ミッドレットの構築作業は、WTKを起動して新規プロジェクトを作成することから始まる。ここではProject NameとMIDlet Class Nameを共にHelloWorldと入力してプロジェクトを作成する。その際に表示されるダイアログでは、ターゲットとなるプラットフォームを選択しておかなければならない。デフォルトオプションであるMSAを選択するとプロファイルにはMIDP 2.1が適用されるが、これは最新の携帯電話で使用することを前提にした設定である。この設定下で作られるミッドレットはMIDP 2.1をサポートしていない携帯電話では実行できないので、そうした携帯電話の場合は、Customを選択してターゲットとなるプラットフォームを指定し、そこでサポートされているプロファイルを選び直さなくてはならない。私の場合も、所有する携帯電話の仕様を先のGSMArenaページで確認したところ、MIDP 2.0のプロファイルを適用しなければならなかった。仮に間違ったプロファイル設定のままミッドレットを作成したとすると、携帯電話での実行時には無効なミッドレットであるという旨の簡単なメッセージが出されるだけで、その他の詳細情報は提示されないケースが多いため、この段階でこうした確認作業を行っておくことは非常に重要である。その他のオプションについてはデフォルト設定のままで問題ないはずだ。

 この場合のWTKによるプロジェクトスケルトンの作成先は~/j2mewtk/2.5.2/apps/HelloWorld/となる。プロジェクトをビルドするにはsrc/サブディレクトリにソースコードのファイルを用意しておかなくてはならない。ここではsrc/HelloWorld.javaファイルを作成し、その中には下記のコードを記述しておく。

    // Sample adapted from http://developers.sun.com/mobility/midp/articles/wtoolkit/
    import javax.microedition.lcdui.*;
    import javax.microedition.midlet.*;
    public class HelloWorld
    extends MIDlet
    implements CommandListener
    {
    private Form mMainForm;
    public HelloWorld()
    {
    mMainForm = new Form("HelloWorld");
    mMainForm.append(new StringItem(null, "Hello, World!"));
    mMainForm.addCommand(new Command("Exit", Command.EXIT, 0));
    mMainForm.setCommandListener(this);
    }
    public void startApp()
    { Display.getDisplay(this).setCurrent(mMainForm); }
    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}
    public void commandAction(Command c, Displayable s)
    { notifyDestroyed(); }
    }
    

 次にWTKに戻り、BuildおよびRunの順番でボタンをクリックする。そしてエミュレータ上でミッドレットの起動ボタンをクリックすると、携帯電話エミュレータの画面にHello, World!という文字列が表示されるはずだ。

ミッドレットのカスタマイズ

 携帯電話で表示させるミッドレットにはプログラムアイコンを設定することもできるが、その際にコード側での変更は不要である。こうした操作についてはProject設定にあるMidletsタブで、エントリの変更をすればいい。ここでのIconパスの指定はデフォルトでHelloWorld.pngとなっているので、これを/images/HelloWorld.pngに変更しておく。次にGIMPなどを用いて独自アイコン用のPNGイメージを作成して(インデックス付き、256色、12×12ピクセルとしておけばまずOK)、その保存先をres/images/HelloWorld.pngとしておく。その後ミッドレットをビルドし直してから再実行すると、ミッドレット名の前に新規に作成したアイコンが表示されるはずである。

 ミッドレットを携帯電話にアップロードするには、1つのパッケージにまとめておく必要がある。それにはProject→Package→Create Packageを選択すればよく、これによりbin/HelloWorld.jarおよびbin/HelloWorld.jadというファイルがWTKにより作成されるので、第三者の携帯電話などにアップロードさせる際には、これらのファイルを配布することになる。

 開発用のコンピュータと実行用の携帯電話が共にBluetoothをサポートしていれば、Bluetooth経由でミッドレットをアップロードさせることもできる。Ubuntuの場合はgnome-vfs-obexftpというパッケージを用いることでNautilusにBluetooth機能が統合され、携帯電話側のファイルシステムをNautilusから閲覧できるようになる。具体的な操作としては、パネルにあるBluetoothアイコンを右クリックしてBrowse Device…を選択すればよく、これによりNautilusウィンドウに携帯電話のファイルシステムが表示されるはずだ。後は必要な.jarファイルをアプリケーション用のフォルダにコピーさえすれば、携帯電話上でミッドレットが実行可能となる。ただしこうしたファイル転送には、事前にコンピュータと携帯電話との関連付け操作が必要となる場合もあるので、詳しくは携帯電話の付属ドキュメントを参照して頂きたい。

 ミッドレットを直接インストールできないケース(Bluetoothが未対応であったりUSBケーブルによる直結ができない場合)では、関連ファイル群をWebサイトに格納した上で、携帯電話のブラウザ経由でインターネットを介したダウンロードとインストールをしなければならない。その際に必要なのは、対象となる2つのファイル(.jarおよび.jad)をWebサーバにアップロードすることと、携帯電話側での.jadファイルのURLを指定したアプリケーションのインストールである。例えばここでのサンプルに使用したアプリケーションはhttp://simos.info/j2me/HelloWorld.jadからダウンロードできる。

実用的なミッドレット作成に向けて

 Linuxに対応した携帯端末で使用するミッドレットの作成とインストールの手順については、本稿で解説した内容が基本的なチュートリアルとして役立つはずである。こうした基本手順がマスターできたら、他のBluetooth対応デバイスと通信したりWebサイトから情報取得をするためのミッドレット作成を目指してみてもいいだろう。最後に、そうしたプログラムで何ができるかの1つのサンプルとしてBluePadというアプリケーションを紹介しておこう。これはLinuxデスクトップをワイヤレス操作するためのリモコンとしてBluetooth携帯電話を利用するためのプログラムである。

参考資料

Simos Xenitellisは、ソフトウェアエンジニアおよび情報セキュリティコンサルタントとして活動しており、オープンソース系ソフトウェアについて10年以上の使用経験を有す。

Linux.com 原文