内运行,我不能弄清楚为什么会发生以下情况:嵌入式菲利克斯,Android的应用程序着决心org.osgi.framework
我正在从一个小小的Android应用程序的嵌入式Apache的菲利克斯。我以编程方式在启动框架后安装2个捆绑包,但都不会进入“已解决”状态。因此Bundle“MyBundle1”导入“MyBundle2”。
这是logcat的告诉我:
05-17 20:21:56.514: ERROR/MainActivity(384): org.osgi.framework.BundleException:
Unresolved constraint in bundle de.xy.MyBundle1 [1]: Unable to resolve 1.11: missing
requirement [1.11] package; (package=de.xy.MyBundle2) [caused by: Unable to resolve 2.0:
missing requirement [2.0] package; (&(package=org.osgi.framework)(version>=1.5.0))]
我完全理解什么错误消息说(嗯... org.osgi.framework在1.5+版本不能得到解决),但我找不出为什么会发生。为什么框架不能解决“他自己”?我试图运行相同的felix.jar作为独立的adb外壳,并且这两个软件包都能正常工作。当然,felix.jar是最新的(3.2)
感谢您的建议!
丹尼尔
FelixSetup
m_configMap = new StringMap(false);
try {
m_cache = File.createTempFile("felix-cache", null);
} catch (IOException ex) {
throw new IllegalStateException(ex);
}
m_cache.delete();
boolean mkdirs = m_cache.mkdirs(); // works (=true)
m_activator = new HostActivator(); // implements BundleActivator
List list = new ArrayList();
list.add(m_activator);
m_configMap.put(FelixConstants.LOG_LEVEL_PROP, "1");
m_configMap.put(BundleCache.CACHE_ROOTDIR_PROP, ".");
m_configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
m_configMap.put(FelixConstants.FRAMEWORK_STORAGE, m_cache.getAbsolutePath());
m_felix = new Felix(m_configMap);
try {
m_felix.start();
} catch (BundleException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
我不知道是否有事情做与以前的问题:我安装
05-18 08:52:59.149: VERBOSE/out(363): Problem creating boot delegation class loader: java.lang.reflect.InvocationTargetException
05-18 08:52:59.209: VERBOSE/out(363): ERROR: Error parsing system bundle export statement: (java.lang.IllegalArgumentException:A header cannot be an empty string.)
05-18 08:52:59.209: VERBOSE/out(363): java.lang.IllegalArgumentException: A header cannot be an empty string.
与
myBundle1= bundleContext.installBundle("file:/data/felix/MyBundle1.jar");
myBundle2= bundleContext.installBundle("file:/data/felix/MyBundle2.jar");
myBundle1.start();
启动包
他们先前被dx'ed并移动到/ data/felix与adb push。
我在android应用程序中使用的相同代码也适用于常规的java控制台应用程序。
我忘了提及:即使我从两个bundle的import-package指令中删除了“version”,它也不能被解析 – 2011-05-17 20:48:03
你能展示设置并启动框架的代码吗?另外,你的嵌入代码是否在'常规'java上工作? – 2011-05-17 22:08:45
不错的建议,我试了一个创建的控制台应用程序,使用相同的代码来启动框架,相同的捆绑包(felix.jar,MyBundle1.jar,MyBundle2.jar),它就像一个魅力。 – 2011-05-18 09:20:30