2

情况:

我正在开发一个概念验证的 Android 和 PC 游戏,它实际上将单独作为一个基本沙箱,而实际的“游戏”是一个分层在提供的沙箱之上的 mod。我无法弄清楚如何将开发人员代码准确地注入我的应用程序实例中。

mod 需要加载到已经运行的沙箱实例中,而不是对我的原始应用程序类文件进行编译重写和重新分发。而且,虽然 mod 将引入它自己的代码,但预计开发人员将需要在给定沙盒基础设施的某些边界内工作。

我设想的解决方案:

我觉得最好的解决方案是在沙箱旁边创建一个库。该库将包含沙盒将了解如何调用的类和接口,并且通过扩展和实现,开发人员可以编写可以作为自己的代码之一的类,同时还能够实例化开发人员实现的外部类.

问题:

问题在于我为这个概念计划的执行。 愿景是一个人可以下载一个模组,将其移动到 mods\ 文件夹,启动我的应用程序,单击“玩游戏”,然后单击 mods\ 文件夹中所有可播放的 mod 文件的下拉菜单,然后加载它现场玩。每个游戏都将使用熟悉的 UI 风格,熟悉的基本图形架构、按钮响应性、玩家或单位移动、hud、图标排序,都将具有熟悉且可预测的风格,但每个 mod 将具有独特的实际来自完全独立的开发人员的游戏体验。 我无法弄清楚是如何将来自单独开发人员的代码动态注入到我的原始应用程序中并被识别,因为它既不在类路径中,也不在我的任何原始包中。

4

2 回答 2

2

从技术上讲,您可以使用DexClassLoader

从法律上讲,您的应用可能会与Google Play关于自我修改代码的政策相冲突。

于 2013-06-12T06:20:41.203 回答
2

这很简单:将配置文件放入 mod,该配置文件指定 mod 的“主”类。

您的沙箱只需要获取信息,为 mod 的类路径创建一个类加载器,加载该主类并调用其启动方法(您定义它需要实现的签名/或接口)。

于 2013-06-12T11:02:19.093 回答