我正在OSGI(Apache Felix)中嵌入我的Android应用程序。此外,我可以安装,注册并启动服务提供和服务消费包。服务使用包按预期消耗服务提供包提供的服务。 现在我想让我的应用程序与捆绑软件进行通信,即向捆绑软件提供方法参数或从那里接收处理结果。从Android应用程序访问OSGI包
不幸的是,当试图直接从我的应用程序访问捆绑软件时,由于涉及到不同的类加载器或NoClassDefFoundException
,我要么收到ClassCastException
s的相同类型。
开始更新
中央对我的应用程序是W的启动另一个服务˚F全权负责管理OSGI事项工作者服务。要在f中运行的软件包仅作为* .jar文件提供,所有这些文件都将导出自己的界面。从内部我可以通过
ServiceTracker serviceTracker = new ServiceTracker(context,"my.bundle.BundleInterface", null);
跟踪实施捆绑接口的对象实例的ServiceTracker对象。
我现在可以通过 Object serviceObject = serviceTracker.getService();
从任何包的外部提取实际的服务对象,只是在w的代码中。
现在呼叫BundleInterface interfaceObject = (BundleInterface) serviceObject;
产生NoClassDefFoundException
。
我已经将bundle的jar文件添加到编译代码的构建路径中。
我该如何访问我的serviceObject
? 我想这是一个类加载的问题,但我如何确保类是由相同的类加载器加载?我是否需要将任何条目添加到felix config属性文件中?
END更新
谢谢 - 你是正确的 - 似乎是一个类加载器的问题,但虽然我敢肯定,我基本上明白是什么问题,我很遗憾不能确定什么样的实际的解决方案看起来像。 – 2015-03-11 16:34:29