MIDlet の「拡張パック」または「アドオン」を作成しますか?
質問
現在の状況は次のとおりです。
私は Java 対応の電話 (Android ではなく、MIDlet ベースの「ダムフォン」) 用の小さなアプリケーションを作成しています。アプリケーションは次のように構成されています。
- コア機能を備えた「インフラ」
- タイプ A のモジュール (インターフェイスを実装するクラス)
ModuleA
) - タイプ B のモジュール (インターフェイスを実装するクラス)
ModuleB
)
タイプ A および B のモジュールは基本的に、ユーザーがリストから選択した内容に基づいてインフラストラクチャ内でインスタンス化されるクラスであり、独自の特定の方法で処理を実行します。「戦略パターン」を考えてみましょう。ユーザーがアプリケーションを使用するとき、インフラストラクチャによって提供される画面を探索すると、タイプ A のモジュールのリストが表示されます (モジュールのタイトルが表示されます)。次に、彼女はモジュールの 1 つを選択し、そのモジュールがインスタンス化されて、彼女のために何かを実行します。
私が望んでいること
インフラストラクチャ全体を JAR ファイルにパッケージ化することが可能かどうか (可能であればその方法) が、タイプ A のモジュールとタイプ B のモジュールを他の JAR ファイルに保持して、将来デバイスにインストールできるかどうか疑問に思っていました (インフラストラクチャのアドオンなど)。私はこのシナリオを考えています:
- ユーザーがインフラストラクチャをインストールする
- ユーザーは、インフラストラクチャと同時に使用できる「Starter」アドオンをインストールします。
- 数週間後、「スペシャル クリスマス モジュール」などの新しいアドオンが開発者によって作成され、ユーザーがインストールできるようになり、インフラストラクチャ、 彼女のデバイスにはすでにインストールされています, 、アドオン内のモジュールがリストされます。
- 1 年後、他の機能やアイデアを備えたモジュールを含む別のアドオンが公開されました
まず、そのようなアドオンをモバイル デバイスにインストールできますか?MIDlet クラスを含める必要がありますか (何もしない、またはインフラストラクチャに通知する)。インフラストラクチャは、アプリケーションのアドオンを含む JAR を検出できますか?それとも、インフラストラクチャは他の JAR にパックされたクラスと対話できますか?
注記:インフラストラクチャ JAR のみに有用な MIDlet クラスが含まれます。また、アドオンには、タイプ A のモジュールとタイプ B のモジュールの任意の組み合わせが含まれます。
考えられる解決策は?(不完全ですが)
おそらく、アドオンは、デバイス自体の MIDlet アプリケーションのように見え、動作し、匂いがするため、通常の MIDlet アプリケーションとしてインストールできます。アドオンは自身をインフラストラクチャと同じスイートの一部として宣言できるため、レコード ストレージに書き込むことでインフラストラクチャにその存在を通知できます (MIDlet ごとにレコード ストレージがあることは理解しています) スイート)。インフラストラクチャは新しいレコードを読み取り、現在追加のモジュールがあることを認識します。アドオン MIDlet JAR にバンドルされているクラスにアクセスし、それらをインスタンス化できますか?
解決
あなたが達成しようとしている内容は、MIDP 仕様ではサポートされていません。特に、同じ MIDlet スイートに複数の JAR を所属させることはできません。
何らかのモジュール性を実現したい場合は、別のランタイムを使用する必要があります。自分で定義し、1 つの MIDlet 内に実装できるもの。
バイナリ ファイルが利用可能になったときにダウンロードする MIDlet を作成できます。同じ MIDlet がこれらのバイナリ ファイルを解釈できます。バイナリ ファイルには、MIDlet の動作を変更するコマンドを含めることができます。MIDlet は、バイナリ ファイルによって実行が要求されるすべての可能なアクションをサポートする必要があります (ただし、MIDlet はアップグレードできます)。
基本的に、MIDlet 内で、定義する新しいプログラミング言語のランタイムの実装である仮想マシンをコーディングする必要があります。
これは大変な作業になります。多くの電話機にインストールするには大きすぎる MIDlet を作成することになる可能性があります。