java - 如何在 Android 4.1 上运行 OSGi?

标签 java android osgi

有没有人可以解释如何在 Android 4.1 上运行任何 OSGi 框架。我找到了一些教程,但适用于旧版本的 Android 或 OSGi(例如 Felix)。关于在 Android 上运行 OSGi 的信息大部分都已经过时了,我想知道是否有人尝试过并成功了,否则我最好还是放弃这个想法。

我希望有一个侵入性尽可能小的解决方案。我想运行一个已经开发的软件,所以我想以尽可能少的更改运行它。

对此有什么看法吗?

附言:

我试图遵循:

http://www.knopflerfish.org/releases/current/docs/android_dalvik_tutorial.html

http://felix.apache.org/site/apache-felix-framework-and-google-android.html

这两个教程都不起作用,并且适用于旧版本的 android 和他们自己的软件。

最佳答案

我实际上正在做这件事。我已经在 Android 设备上成功安装了 Apache Felix 并运行了简单的 Java 程序。我点击了你的第二个链接。该页面已损坏,但我使用了网络存档来查看它。这是一个link万一上述方法不起作用。如果您遵循该教程,您至少会安装 Felix。只需下载最新的 Felix,然后找到最新的 Felix Shell 和 Felix Shell-TUI。您将需要按照教程中的描述对所有三个 jar 进行 Dex。

我在 Android 设备上的/data/osgi/下创建了一个文件夹,并将 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 库。 那你会怎么做? 通过添加一些配置,我能够解决一些问题,但不是所有问题。我用 this one 替换了 conf/config.properties 文件.这个配置文件的重要部分是 Dalvik 包的定义。通常,这是您将 JRE 包导出到 Felix 的地方,以便它可以将它们定义为系统包。由于没有 JRE 包,我们需要定义 Dalvik 运行时和导出包。

您可能还需要更改某些第三方库的 list 文件。偶尔我得到一个提示 osgi.ee 版本的图书馆。当发生这种情况时,我打开 jar 并从 list 中删除要求。老实说,我不知道这样做是否正确,但它解决了这个问题。那应该会让你陷入困境。在去中心化后,我仍然面临第三方库与 Felix 很好地配合使用的问题。特别是解析库,如 Apache Blueprint 和 Jackson。我打算在这个周末尝试 Knopflerfish,看看它是否是一个更顺畅的过程......

关于java - 如何在 Android 4.1 上运行 OSGi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559386/

相关文章:

java - undertow 编译错误

java - 在 Android 浏览器中获取当前 URL

java - 如何在 Jetty 中启用 SSL 调试?

java - OSGi环境: how to update during runtime a class reference

java - 如何在服务类中添加@valid时处理自定义注释

java - 通过 HTTP 协议(protocol)替代 Kafka

java - 使用 XMLAdapter 时 JAXB 无法编码(marshal) null 值

android - 无法在 Android 上检测到 USB 连接

android - ZXing 无法读取 Android 应用中的一维条码

java - OSGi ConfigAdmin 服务删除