如何在 Equinox 3.10 及更高版本中获取所有已加载的包

Posted

技术标签:

【中文标题】如何在 Equinox 3.10 及更高版本中获取所有已加载的包【英文标题】:How to get all the loaded bundles in Equinox 3.10 and onwards 【发布时间】:2015-06-13 00:48:13 【问题描述】:

我想以编程方式检索所有已加载的捆绑包。在旧版本中,我们以这种方式使用它:

    Field osgiField = EclipseStarter.class.getDeclaredField("osgi"); 
    osgiField.setAccessible(true);
    final org.eclipse.osgi.framework.internal.core.OSGi osgi =
          (org.eclipse.osgi.framework.internal.core.OSGi) osgiField.get(null);
    osgi.getBundleContext().getBundles();

如何在最新的osgi中检索所有加载的bundle?

【问题讨论】:

您是尝试从 OSGi 外部还是从包中执行此操作? 我正在尝试从另一个包中执行此操作 您真正需要的是获取 OSGi BundleContext,而之前您使用 非常 奇怪的 hack 来获取它。正确的方法是实现一个 Bundle Activator。 【参考方案1】:

您可以从包中实现 BundleActivator 接口并将您的类在清单中标记为“BundleActivator:my.ClassName”。

或者,如果这不可能,您可以使用 FrameworkUtil.getBundle(this.getClass()).getBundleContext()。

另请参阅此问题:Best technique for getting the OSGi bundle context?

然后使用 bundleContext.getBundles();

这些方法应该适用于任何 OSGi 框架。

【讨论】:

以上是关于如何在 Equinox 3.10 及更高版本中获取所有已加载的包的主要内容,如果未能解决你的问题,请参考以下文章

如何使用支持库 25.0.0 及更高版本获取片段()

如何以编程方式在 Android 的 API 23 及更高版本中获取位置(纬度、经度)?

在 Android 9 及更高版本中,如何获取周围所有基站的 CID 和信号强度?

navigator.geolocation.getCurrentPosition 在 React Native 版本(0.60)及更高版本中不起作用,如何获取位置?

错误:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.10 及更高版本

如何使用 Target API 23 及更高版本通过 GPS 获取用户位置