内製の移植ソリューション
アプリケーションの移植を自動化することに決めたら、実際に何をすればよいのでしょうか。もちろん外注することもできますが、自社内でやるつもりなら、基本的に4つの方法の中から選ぶことになります。
- デバイスシリーズごとにバージョンを1つずつ作成する
- ハンドセットの動的検出
NokiaCanvas、SiemensCanvas、StandardCanvas)。次に例を示します。try { Class.forName("com.nokia.mid.ui.FullCanvas"); Class myClass = Class.forName("NokiaCanvas"); myCanvas = (ICanvas)(myClass.newInstance()); } catch (Exception exception1) { try { Class.forName("com.siemens.mp.color_game.GameCanvas"); Class myClass = Class.forName("SiemensCanvas"); myCanvas = (ICanvas)(myClass.newInstance()); } catch (Exception exception2) { myCanvas = (ICanvas) new StandardCanvas(); } }
Icanvas)と3つの実装(Nokiaデバイス、Siemensデバイス、標準MIDPデバイスについて1つずつ)を作成します。Class.forNameを使用します。例外がスローされなければ、NokiaCanvasを使用します。そうでなければ、現在のデバイスがこのAPIをサポートしていないことになります。その場合は、もう1つのAPI(例えばSiemens)をテストします。もう1つの例外がスローされた場合は、標準キャンバスを使用しなければなりません。- AOPや拡張Javaのような代替物を使用する
- プリプロセッサを使用する
Canvasではなく、FullCanvasを拡張する必要があります。MIDP2デバイスでは、setFullScreenModeを呼び出す必要があります。MIDP1デバイスでは、これは可能でないので、非全画面モードのままです。//#ifdef NOKIA extends com.nokia.mid.ui.FullCanvas //#else extends Canvas //#endif { : : //#ifndef MIDP2 setFullScreenMode(true); //#endif
//#define NOKIA
extends com.nokia.mid.ui.FullCanvas
{
//#define MIDP2)は、次のものを生成します。extends Canvas { setFullScreenMode(true);
プリプロセッサを使った移植に必要なこと
ソースコードのバージョンを1つだけにするというのが基本原則です。これがプリプロセスされて、それぞれのデバイスモデルに適合したコードが生成されます。
留意すべき点を以下に列挙します。
- それぞれのデバイスモデルの動作を熟知している必要があります。
- それぞれのデバイスモデルでサポートされているJava機能を知る必要があります。
- プリプロセスでどんな操作(デプロイメントなど)が扱われるか知る必要があります。
- プリプロセスではリソース(イメージやサウンドなど)は変換されません。
- 完全に自動化されたソリューションにする必要があります。パラメータ化したソリューションでは不十分です。
- 自動化されたコンパイルとパッケージングのプロセスの開発に力を注ぐ必要があります。
イメージやサウンドなどのリソースを各デバイスモデルの能力に適合させるためには、変換ツールを使う必要があります。イメージの最適化も必要です(例えば、.pngイメージのヘッダーからオプションの情報を取り除いたり、小さなイメージを大きなイメージにまとめたり、各イメージの色の数を減らしたり、リソースをプリロードしたりします)。
同じ特性や機能や動作を持つ一連のJavaデバイスを作成する必要があるかもしれません。そうすれば、各デバイスモデルに対してではなく、このシリーズに対して1つのアプリケーションを生成できます。このシリーズの機能は、アプリケーションの中で使用したい機能に本質的に依存することになります。使用するオプションの機能が多いほど、細分化の度合いが増大します。
予期しないリソースを考慮に入れようとすると、アプリケーションの更新が必要になります。例えば、デバイスが大きな.jarファイルをサポートしていて、大きなヒープメモリを持っていれば、アプリケーションのバックグラウンドイメージを格納できます。そうでなければ、イメージは.jarファイルには入れられないので、単純に描画する必要があります。その場合、.jarサイズは小さくなり、ヒープメモリはあまり消費されません。
モバイルプログラミングでは画面サイズが重要な問題となるので、あらゆる技法を(イメージの動的変換やパッケージング前の変換など)駆使して、イメージサイズを小さくするように努力してください。
さらに、システムとのやりとりを管理することも大切です。例えば、着信の際にサウンドを中止し、ミッドレットを一時停止するといった具合です。
