具有DexClassLoader()和用户界面的插件系统

时间:2012-11-28 20:13:42

标签: android dexclassloader

对于一个长期的学生项目,我正在尝试使用插件开发模块化应用程序。具体来说,我们会:

  • 我们可以搜索,更新,删除和运行插件的主应用程序。此主应用程序还将存储插件中的一些数据。

  • 从HTTP服务器下载了几个带有代码和GUI组件的插件。

目前,我有一个主应用程序,它能够从HTTP下载.apk文件,并从此.apk文件中定义的类创建新实例。我使用这里描述的方式:http://android-developers.blogspot.fr/2011/07/custom-class-loading-in-dalvik.html和DexClassLoader()方法。

但是我无法看到如何在插件.apk文件中显示作为资源存储的布局(或任何其他GUI组件)。例如,我试图通过使用插件classname:

从主应用程序创建一个Intent,但没有成功
DexClassLoader cl = new DexClassLoader(...);
Class<?> libClass = cl.loadClass("plugin_classname");
Intent intent = new Intent(this.getApplicationContext(), libClass);
startActivity(intent);

这不起作用,因为Intent未在主应用程序的AndroidManifest.xml中声明。这也在另一个帖子中描述:Android- Using DexClassLoader to load apk file

这是否意味着绝对没有办法构建这样的“动态”用户界面?更一般地说,这种类型的插件系统可以在Android上完成吗?我应该尝试其他方法吗?

2 个答案:

答案 0 :(得分:0)

我曾经尝试过同样的事情并且发现它是不可能的。如果从那时起(2011年1月)基本机制没有改变,那么它仍然是不可能的。技术细节在我的博客中用日语和英语描述。

博客:动态添加未在AndroidManifest.xml中声明的活动(不可能)
http://darutk-oboegaki.blogspot.jp/2011/01/androidmanifestxml-activity.html

答案 1 :(得分:0)

看到这个答案。它是关于如何在运行时动态运行未在AndroidManifest.xml中声明的Android&#39; Activity&#39; Service&#39; Service&quot; https://stackoverflow.com/a/41112682/2801776