2017-10-21 197 views
-2

我应该创建一个具有基本功能的“容器”应用程序。在单独的应用程序中创建插件/附加组件/扩展应用程序

在“Container”应用程序中,我有一个NavigationView(根据已安装的插件动态添加项目)和一个FrameLayout。

在一个单独的apk中,我应该创建一个插件,用我自己的视图为我的应用程序添加功能。

问题是:如何在插件应用程序中创建带有视图的片段并将它们移动到上下文应用程序的FrameLayout。

这里有更好的解释的情况

enter image description here

enter image description here

有没有人有任何示例代码两个图像?链接到教程?或者告诉我我该怎么做?

我试图创建一个AIDL的进程之间的通信,但只有通过原始数据,不允许通过:对象,资源,图像等

+0

你想要的通常不可能以安全的方式进行。欢迎您使插件向“容器”应用程序提供“RemoteViews”,应用程序窗口小部件通过“AppWidgetManager”向主屏幕提供“RemoteViews”的方式。 – CommonsWare

回答

0

这是可能的,有需要的时候,你两件事试图加载一个apk:dex代码&资源。

使用dex代码,您可以执行的操作是修改当前上下文的默认ClassLoader。为每个插件添加分隔的ClassLoader,并将它们放到上下文的ClassLoader中,并修改上下文的ClassLoader的findClass方法,使其首先从插件的ClassLoader中找到类,如果没有找到,则回退到传统的ClassLoader方式。我认为PathClassLoader会做到这一点,你必须做的是通过插件的文件路径。

带资源,你需要做的是从Resources类中获取旧的AssetManager,并用反射调用addAssetPath,并将插件的apk路径传递给它。

在完成这两个步骤后,您将拥有一个插件,其所有类和资源与常规应用程序运行方式没有多大区别。

ps:注意到还有很多工作要做,才能在不同的系统版本和不同的自定义ROM上正常工作,并且这两个步骤不会让您从插件中添加新的活动/服务/广播/提供程序,原因你需要将它们注册到SystemServer,这受到系统的限制,我认为没有一种方法可以在没有root的情况下完成。

---------------------------我是一个分隔符--------------- -------------

如果您的应用有能力运行可从互联网上下载的代码,则Play-store将不允许您的应用发布。因为不能保证这些代码将收集来自某人的电话的私人数据,或者做任何违法的事情。