我遵循这个教程将OSGi嵌入到我的Android应用程序中。但是,在安装和启动包之后,它的状态就被解决了(4),而不是必须是活动的(32)。当我再次尝试重新开始时,它会抛出一个异常:
Bundle#1 start failed
java.lang.ClassNotFoundException: org.knopflerfish.tutorial.simplebundle.impl.Activator
org.knopflerfish.framework.BundleImpl.start0(BundleImpl.java:421)
org.knopflerfish.framework.BundleThread.run(BundleThread.java:145)这个包是来自克氏鱼例子来源的示例包。当安装在Knopflerfish destop (framework.jar)中时,它运行良好。
我已经想到了dex,但是合并jar文件和它的dex文件是没用的,它仍然不能工作。
这里有什么问题?非常感谢!
发布于 2013-09-10 09:30:22
几天后,我找到了解决这个问题的办法。我把它寄给任何关心此事的人。
首先,这个问题与dex文件有关。找不到dex文件,使BundleClassLoader找不到Activator类。在jar文件中,在执行dx和aapt命令后,*.dex必须位于顶部路径。您可以通过解压缩jar文件来检查这一点。
bundler.jar
----META-INF
----org
----classes.dex另外一点,你需要考虑的是,如果你的应用仍然不工作。在Android更新版本中,dex文件不能位于外部存储中(如这里所解释的http://developer.android.com/reference/dalvik/system/DexClassLoader.html),因此您需要修改设置org.osgi.framework.storage属性的代码。
而不是:
Map<String, String> fwprops = new Hashtable<String, String>();
fwprops.put("org.osgi.framework.storage", Environment.getExternalStorageDirectory().getAbsolutePath() + "/fwdir");我用这个:
Map<String, String> fwprops = new Hashtable<String, String>();
File dexOutputDir = getDir("dex", 0);
fwprops.put("org.osgi.framework.storage", dexOutputDir.getAbsolutePath());希望能帮上忙。
https://stackoverflow.com/questions/18606087
复制相似问题