1

目前情况如何:

我正在为支持 Java 的手机(基于 MIDlet 的“哑手机”,而不是 Android)制作一个小型应用程序。该应用程序的结构如下:

  1. “基础设施”,具有核心功能
  2. A 类模块(实现接口的类ModuleA
  3. B 类模块(实现接口的类ModuleB

A 和 B 类型的模块基本上是根据用户从列表中选择的内容在基础架构中实例化的类,它们以自己特定的方式做事。想想“战略模式”。当用户使用应用程序时,她浏览了基础设施提供的屏幕,然后来到 A 类型的模块列表(查看它们的标题)。然后她选择其中一个模块,该模块被实例化并为她做一些事情。

我所希望的

我想知道是否有可能(如果是,如何)将整个基础设施打包在一个 JAR 文件中,但将 A 类型的模块和 B 类型的模块保留在其他 JAR 文件中,将来可以安装在设备上(像基础设施的附加组件)。我正在考虑这种情况:

  1. 用户安装基础架构
  2. 用户安装“Starter”插件,该插件与基础设施同时可用
  3. 几周后,开发人员创建了一个新的附加组件,例如“特殊圣诞节模块”,用户可以安装它,因此已经安装在她设备上的基础设施将列出附加组件中的模块
  4. 一年后,发布了另一个附加组件,其中包含具有其他功能和想法的模块

首先,这样的插件可以安装在移动设备上吗?它们是否必须包含一个 MIDlet 类(什么都不做或通知基础设施)?基础设施能否检测到那些包含我的应用程序附加组件的 JAR?或者基础设施可以与其他 JAR 中的类交互吗?

注意:只有 Infrastructure JAR 会包含有用的 MIDlet 类。此外,附加组件将包含类型 A 的模块和类型 B 的模块的任意组合。

可能的解决方案?(虽然不完整)

也许附加组件的外观、行为和气味都像设备本身的 MIDlet 应用程序,因此它们可以像任何普通的 MIDlet 应用程序一样安装。附加组件可以将自己声明为与基础设施相同的套件的一部分,因此它们可以通过写入记录存储来通知基础设施的存在(我知道每个 MIDlet套件都有一个记录存储)。基础设施读取新记录并知道它现在有额外的模块。它能否访问捆绑在附加 MIDlet JAR 中的类并实例化它们?

4

1 回答 1

1

MIDP 规范不支持您所描述的目标。除此之外,您不能有多个 JAR 属于同一个 MIDlet 套件。

如果要实现某种模块化,则需要使用不同的运行时。一种您自己定义的并且可以在一个 MIDlet 中实现的。

您可以编写一个 MIDlet,在二进制文件可用时下载它们。同一个 MIDlet 可以解释这些二进制文件。二进制文件可以包含改变 MIDlet 行为的命令。MIDlet 需要支持二进制文件要求它执行的所有可能的操作(不过,可以升级 MIDlet)。

基本上,在您的 MIDlet 中,您需要编写一个虚拟机,该虚拟机是您定义的任何新编程语言的运行时实现。

这将是很多工作。您最终可能会制作一个太大而无法安装在很多手机上的 MIDlet。

于 2012-08-15T05:41:51.187 回答