我正在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