当前情况:
我正在为支持Java的电话(基于MIDlet的“哑电话”,而不是Android)制作一个小型应用程序。该应用程序的结构如下:
具有基础功能的“基础设施”
类型A的模块(实现接口ModuleA
的类)
类型B的模块(实现接口ModuleB
的类)
类型A和B的模块基本上是类,它们在基础结构中根据用户从列表中选择的内容进行实例化,并且它们以自己的特定方式进行处理。想想“策略模式”。当用户使用应用程序时,她浏览基础结构提供的屏幕,然后进入类型为A的模块列表(查看其标题)。然后,她选择一个模块,该模块被实例化并为她做一些事情。
我希望什么
我想知道是否有可能(如果可以,如何)将整个基础结构打包到一个JAR文件中,但是将类型A的模块和类型B的模块保留在其他JAR文件中,以后可以在设备上安装它们(例如基础架构的附件)。我在想这种情况:
用户安装基础架构
用户安装“入门”加载项,可与基础架构同时使用
几周后,开发人员创建了一个新的附加组件,例如“ Special Christmas Modules”,用户可以安装该附加组件,因此已经安装在其设备上的基础结构将在附加组件中列出这些模块。
一年后,又发布了一个附加组件,其中包含具有其他功能和想法的模块
首先,可以在移动设备上安装此类附加组件吗?它们是否必须包含MIDlet类(不执行任何操作或通知基础结构)?基础结构能否检测到那些包含我的应用程序加载项的JAR?还是基础架构可以与其他JAR中打包的类进行交互?
注意:只有基础结构JAR会包含有用的MIDlet类。此外,附加组件将包含类型A的模块和类型B的模块的任意组合。
可能的解决方案? (尽管不完整)
附件的外观,行为和气味可能类似于设备本身的MIDlet应用程序,因此它们可以作为任何常规MIDlet应用程序安装。附加组件可以声明自己与基础结构是同一套件的一部分,因此它们可以通过写入其记录存储来通知基础结构存在(我知道每个MIDlet套件都有一个记录存储)。基础结构会读取新的记录,并知道它现在具有其他模块。它可以访问附加的MIDlet JAR中捆绑的类并实例化它们吗?
最佳答案
MIDP规范不支持您要描述的目标。除其他事项外,您不能拥有属于同一MIDlet套件的多个JAR。
如果要实现某种模块化,则需要使用其他运行时。您可以自己定义一个,并且可以在一个MIDlet中实现。
您可以编写一个MIDlet,以在二进制文件可用时下载二进制文件。同一MIDlet可以解释这些二进制文件。二进制文件可以包含更改MIDlet行为的命令。 MIDlet需要支持二进制文件要求它执行的所有可能的操作(尽管可以升级MIDlet)。
基本上,在MIDlet内部,您需要为定义的任何新编程语言编写一个虚拟机,该虚拟机是运行时的实现。
这将是很多工作。您可能最终制作出的MIDlet太大而无法在很多电话上安装。
关于java - 为MIDlet创建“扩展包”或“附加组件”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11710420/