【问题标题】:Creating "expansion packs" or "add-ons" for MIDlets?为 MIDlet 创建“扩展包”或“附加组件”?
【发布时间】:2012-07-29 15:23:56
【问题描述】:

目前的情况:

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

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

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

我的愿望

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

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

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

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

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

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

【问题讨论】:

    标签: java mobile midlet


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 是这样想的。 MIDP 支持它有点太疯狂了。 +1 建议运行时方法。疯狂而乏味,但如果真的需要,这是一个很好的解决方案。但是,对于我的特定项目,这将是矫枉过正。
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 2018-04-02
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多