为Midlet创建"扩展包"或"附加组件"?
题
目前情况如何:
我正在为支持Java的手机(基于MIDlet的"dumb-phones",而不是Android)制作一个小应用程序。应用程序的结构如下:
- "基础设施",具有核心功能
- 类型A的模块(实现接口的类
ModuleA
) - 类型b的模块(实现接口的类
ModuleB
)
类型A和B的模块基本上是基于用户从列表中选择的内容在基础结构中实例化的类,并且它们以自己的特定方式执行操作。思考"战略模式"。当用户使用应用程序时,她探索基础设施提供的屏幕,然后进入类型A的模块列表(查看它们的标题)。然后她选择其中一个模块,它被实例化并为她做一些事情。
我所希望的
我想知道是否有可能(如果是的话,如何)将整个基础设施打包在JAR文件中,但将类型A的模块和类型B的模块保留在其他JAR文件中,这些文件将来可以安我在想这个场景:
- 用户安装基础结构
- 用户安装"Starter"加载项,该加载项与基础结构在同一时间可用
- 几周后,开发人员创建了一个新的附加组件,例如用户可以安装的"特殊圣诞模块",因此基础设施, 已经安装在她的设备上, ,将列出插件中的模块
- 一年后,另一个附加组件发布,其中包含具有其他功能和想法的模块
首先,这样的附加组件可以安装在移动设备上吗?它们是否必须包含一个MIDlet类(什么都不做或通知基础结构)?基础设施是否可以检测到包含应用程序加载项的Jar?或者基础设施是否可以与其他Jar中包装的类进行交互?
注:只有基础结构JAR将包含有用的MIDlet类。此外,附加组件将包含类型A的模块和类型B的模块的任何组合。
可能的解决方案?(不完整,虽然)
也许附加组件可以看起来,行为和闻起来像设备本身的MIDlet应用程序,因此它们可以作为任何正常的MIDlet应用程序安装。附加组件可以将自己声明为与基础架构相同的套件的一部分,因此他们可以通过写入其记录存储来通知他们对基础架构的存在(我知道每个MIDlet都有一 套房).基础设施读取新记录并知道它现在有额外的模块。它是否可以访问附加MIDlet Jar中捆绑的类并实例化它们?
解决方案
MIDP规范不支持您所描述的实现。除此之外,你不能有几个罐子属于同一个MIDlet套件。
如果要实现某种模块化,则需要使用不同的运行时。一个你自己定义的,可以在一个MIDlet中实现的。
您可以编写一个MIDlet,在二进制文件可用时下载它们。同一个MIDlet可以解释这些二进制文件。二进制文件可以包含更改MIDlet行为的命令。MIDlet需要支持二进制文件要求它执行的所有可能的操作(尽管MIDlet可以升级)。
基本上,在MIDlet中,您需要编写一个虚拟机,该虚拟机是您定义的任何新编程语言的运行时实现。
这将是一个很大的工作。你很可能最终会制作一个太大而无法安装在很多手机上的MIDlet。