在 OSGi API 中,对BundleContext.getBundles()的调用会返回所有包,无论它们是否是片段。对于给定的Bundle对象,判断这是否是片段的最佳方法是什么?
问问题
1467 次
3 回答
9
最好的办法:
(bundle.adapt(BundleRevision.class).getTypes() & BundleRevision.TYPE_FRAGMENT) != 0
于 2012-07-25T21:47:17.423 回答
4
一种可能的方法:使用Bundle.getHeaders()查找Fragment-Host标头。如果它存在,它就是一个片段。
于 2012-07-25T17:30:31.263 回答
1
根据 OSGi 核心规范第 4 版,版本 4.2,还有PackageAdmin
服务,它提供对有关捆绑包的结构信息的访问,例如确定给定捆绑包是否是片段。
import org.osgi.framework.Bundle;
import org.osgi.service.packageadmin.PackageAdmin;
PackageAdmin packageAdmin = ...; // I assume you know this
Bundle hostBundle = ...; // I assume you know this
Bundle fragmentBundle = ...; // I assume you know this
assertFalse(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(hostBundle);
assertEquals(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(fragmentBundle);
显然,在 OSGi 4.3 中,该PackageAdmin
服务似乎已被弃用,应该由org.osgi.framework.wiring
包替换。
于 2013-04-04T14:43:06.327 回答