8

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

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

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

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

但我无法看到如何显示作为资源存储在插件 .apk 文件中的布局(或任何其他 GUI 组件)。例如,我尝试使用插件类名从主应用程序创建一个 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上完成吗?我应该尝试其他方法吗?

4

2 回答 2

0

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

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

于 2013-11-08T10:25:08.940 回答
0

看到这个答案。它是关于如何在运行时动态运行Android的'Activity','Service',它们没有在AndroidManifest.xml中声明:https ://stackoverflow.com/a/41112682/2801776

于 2017-11-07T14:56:11.930 回答