是否有人可以解释如何在Android 4.1上运行任何OSGi框架。我找到了一些教程,但是对于旧版本的Android或OSGi(例如Felix)。关于在Android上运行OSGi的信息必须真的很老,我想知道是否有人尝试过并取得成功,或者我应该更好地逃避这个想法。
我希望尽可能减少入侵的解决方案。我想运行一个已经开发的软件,所以我希望尽可能少地使用它来运行它。
对此有何看法?
PS:
我试图效仿:
http://www.knopflerfish.org/releases/current/docs/android_dalvik_tutorial.html
和
http://felix.apache.org/site/apache-felix-framework-and-google-android.html
这两个教程都不适用,适用于旧版本的android及其自己的软件。
答案 0 :(得分:3)
我实际上正在这样做。我已经在Android设备上成功安装了Apache Felix并运行了简单的Java程序。我按照你的第二个链接。该页面已被破坏,但我使用了一个Web存档来查看它。如果上述内容无效,则link为this one。如果您遵循该教程,您将至少安装Felix。只需下载最新的Felix,找到最新的Felix Shell和Felix Shell-TUI。您将需要Dex所有三个罐子,如教程中所述。
我在/ data / osgi /下的Android设备上创建了一个文件夹,并在那里复制了felix /目录。两个shell jar应该进入bundle /目录,而felix jar可以保留在bin /目录中。然后我会在felix /中创建一个运行以下命令的脚本
/system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar \
-classpath bin/felix.jar org.apache.felix.main.Main
这将启动Felix shell。您可以输入命令" ps"查看已安装的软件包。
尽管如此,当我开始使用第三方库时,我遇到了问题。在安装之前,您需要dex所有软件包。这会将所有类文件转换为Dalvik可执行文件(dex)。这个问题是有些库不是DVM的原生库。我遇到的第一个是javax.xml.validation。这是由核心Java库提供的。好吧,Android并没有运行核心Java库。 那么你做了什么?我能够通过添加一些配置来解决一些问题,但不是所有问题。我用http://asciiflow.com/#0B0pB9AbvJ9zLcHFZYnp2YTZjNU0替换了conf / config.properties文件。此配置文件的重要部分是Dalvik软件包的定义。通常,这是将JRE包导出到Felix的位置,因此可以将它们定义为系统包。由于没有JRE包,我们需要定义Dalvik运行时和导出包。
您可能还需要更改某些第三方库的清单文件。偶尔我会得到一个抱怨osgi.ee版本的库。当发生这种情况时,我打开罐子并从清单中删除要求。我会诚实地说,我不知道这是否是正确的做法,但它解决了这个问题。这应该让你深入兔子洞。在DEXed之后,我仍然面临第三方图书馆与Felix很好地合作的问题。特别是解析Apache Blueprint和Jackson等库。我本周末去尝试Knopflerfish,看看它是否更顺畅......