Android:获取 Activity/Fragment/Classes 个具有相同 user_id 的不同应用
Android : Get Activity/Fragment/Classes of different Apps with same user_id
第一次在 Whosebug 上提问!
好的,这是上下文。我正在做一个 android 应用程序,我正在尝试实现类似于插件框架的东西。
我的主要应用程序的 MainActivity 的目的是管理和 launch/show 片段。
我的每个插件都将包含(至少)一个片段及其布局。
因此,我的想法是获取片段并将其放入我的主应用程序的 MainActivity 中。
所以我决定将我的 Fragments/Plug-ins 放入不同的应用程序中,并为我的所有插件和主应用程序提供相同的 user_id。这样,它们都在同一个进程中,即使它们出现在 phone 的应用程序管理器中,也只有主应用程序可以启动并在应用程序浏览器中可见(这很棒)。
但这就是我的问题...如何访问我的插件片段?
我以为我可以通过 PackageManager 获取一些 class 并使用 relfexion 来使用我的片段,但显然你不能(或者我没有找到方法)。
我考虑过在每一端(应用程序 - 插件)将服务绑定在一起,但我不保证这些服务会绑定在一起。特别是因为每个应用程序都有相同的服务副本,也就是不同的服务。
也许通过使用通用的 .jar 来确保服务是相同的,从而将我的 Fragment 的一个实例传递给主应用程序(是的,一个实例就足够了)。
或者制作一个 CustomClassLoader(但我可能需要关于如何从我的其他应用程序加载 classes 的建议,因为我不知道该怎么做...)
我一直运行 在脑海中和网上转来转去寻找解决方案...
要说清楚:
考虑到它们共享,我如何获取另一个应用程序的 classe (CustomClassLoader) 或实例(通过绑定或 sharedPreference 或在文件中写入我的实例并在 main 中读取它?)相同的 user_id,因此在同一个进程中 ?
仅仅因为应用共享相同的 user_id 这并不意味着它们 运行 在同一个进程中。
它们可能而且很可能是由同一个进程启动的。
在进程之间共享资源通常称为 IPC。
AIDL , android 接口定义语言是一种实现 IPC 的方式。
这仍然不允许您直接从不同的应用程序检索对象,但可以调用远程对象的方法。
但是您对我的问题描述似乎更像是在应用程序运行时访问 jar 的对象。这可以通过类加载来完成。
因此,您的应用程序可以从服务器检索一个 jar 并从中加载您的片段。如果您完全通过代码定义片段,则片段的定义将在运行时可更新。
第一次在 Whosebug 上提问!
好的,这是上下文。我正在做一个 android 应用程序,我正在尝试实现类似于插件框架的东西。 我的主要应用程序的 MainActivity 的目的是管理和 launch/show 片段。 我的每个插件都将包含(至少)一个片段及其布局。 因此,我的想法是获取片段并将其放入我的主应用程序的 MainActivity 中。
所以我决定将我的 Fragments/Plug-ins 放入不同的应用程序中,并为我的所有插件和主应用程序提供相同的 user_id。这样,它们都在同一个进程中,即使它们出现在 phone 的应用程序管理器中,也只有主应用程序可以启动并在应用程序浏览器中可见(这很棒)。
但这就是我的问题...如何访问我的插件片段?
我以为我可以通过 PackageManager 获取一些 class 并使用 relfexion 来使用我的片段,但显然你不能(或者我没有找到方法)。
我考虑过在每一端(应用程序 - 插件)将服务绑定在一起,但我不保证这些服务会绑定在一起。特别是因为每个应用程序都有相同的服务副本,也就是不同的服务。
也许通过使用通用的 .jar 来确保服务是相同的,从而将我的 Fragment 的一个实例传递给主应用程序(是的,一个实例就足够了)。
或者制作一个 CustomClassLoader(但我可能需要关于如何从我的其他应用程序加载 classes 的建议,因为我不知道该怎么做...)
我一直运行 在脑海中和网上转来转去寻找解决方案...
要说清楚:
考虑到它们共享,我如何获取另一个应用程序的 classe (CustomClassLoader) 或实例(通过绑定或 sharedPreference 或在文件中写入我的实例并在 main 中读取它?)相同的 user_id,因此在同一个进程中 ?
仅仅因为应用共享相同的 user_id 这并不意味着它们 运行 在同一个进程中。
它们可能而且很可能是由同一个进程启动的。
在进程之间共享资源通常称为 IPC。
AIDL , android 接口定义语言是一种实现 IPC 的方式。
这仍然不允许您直接从不同的应用程序检索对象,但可以调用远程对象的方法。
但是您对我的问题描述似乎更像是在应用程序运行时访问 jar 的对象。这可以通过类加载来完成。
因此,您的应用程序可以从服务器检索一个 jar 并从中加载您的片段。如果您完全通过代码定义片段,则片段的定义将在运行时可更新。