好的,我有一个安卓应用程序,并开始创建一个插件系统供开发人员编写内容提供者来生成不同的内容,我不会详细说明整个过程,但所有东西都像这样正常工作:
1)我创建了一个名为com.myaddonlib
的库,在我的项目中导入该库,其中包含一个接口和不同的对象。
2)现在,开发人员可以在他的端上创建一个简单的Java项目,导入库com.myaddonlib
,并在主类上实现接口,该接口具有从库返回不同对象的方法。
3)回到安卓应用程序,我可以加载由开发人员创建的.jar文件(在将classes.dex添加到jar文件后),并使用安卓DexClassLoader加载已实现的接口,如下所示:
DexClassLoader classloader = new DexClassLoader(jarFilePath, tempDirectory, null, context.getClass().getClassLoader());
Class classToLoad = classloader.loadClass("com.apackage.Addon");
Addon
是由插件开发人员创建的类,该类实现了位于名为com.apackage
的包中的库中的接口。然后,我可以将库com.myaddonlib
中的接口强制转换为classToLoad
的新实例,并调用插件开发人员实现的函数。
现在问题在于,假设我决定更新插件库并从一个类中删除一个变量,这意味着插件的类现在与应用程序中使用的更新库中的类不同。即使未使用更改的变量,某些原因也会导致应用程序崩溃而无任何错误提示。事实上,只要这两个类不同(即使唯一的区别只是缺少变量),就会导致某些功能失效。现在这不是一个容易解释的过程,所以我理解我的英语不好有些人难以理解。我的问题是我需要知道如何避免由于库在其中一个端点上更改而导致的崩溃。还有,Java如何处理这种情况下的对象更改。