在单独的应用程序 Apk 中创建 Plugins/Add-ons/Extentions

Create Plugins/Add-ons/Extentions in separate Apk for an App

我应该创建一个具有基本功能的 "Container" 应用程序。

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

在一个单独的 apk 中,我应该创建一个插件,以我自己的观点向我的应用程序添加功能。

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

这里有两张图片可以更好地说明情况

有人有示例代码吗? Link要教程?或者告诉我该怎么做?

我尝试创建一个用于进程间通信的 AIDL,但只传递原始数据,不允许传递:对象、资源、图像等。

有可能,当您尝试加载 apk 时需要两件事:dex 代码和资源。

有了dex代码,你可以做的就是修改当前上下文的默认ClassLoader。为每个插件添加单独的ClassLoader,并将它们放入context的ClassLoader中,并修改context的ClassLoader的findClass方法,使其首先从插件的ClassLoader中找到class,如果找不到则回退到传统的ClassLoader way.I think PathClassLoader 可以解决问题,您要做的就是将插件的文件路径传递给它。

有了resources,你需要做的就是从Resourcesclass中获取旧的AssetManager,然后反射调用addAssetPath,并将插件的apk路径传递给它。

完成这两个步骤ps,您将拥有一个插件及其所有 classes 和资源 运行 与常规应用程序没有太大区别。

ps: 注意到在不同的系统版本和不同的自定义rom上正常工作还有很多工作要做,这两个steps不会让你添加新的activity/service/broadcast/provider 来自插件,因为你需要将它们注册到 SystemServer,这是受系统限制的,我认为没有 root 没有办法做到这一点。

----------------------------我是分隔符------------ --------------

如果您的应用程序能够 运行 可以从互联网下载的代码,那么 play-store 将不允许您的应用程序发布。因为无法保证这些代码会不会从某人的 phone 那里收集私人数据,或者做任何非法的事情。