【问题标题】:Using Java library in iOS project在 iOS 项目中使用 Java 库
【发布时间】:2013-02-18 10:30:00
【问题描述】:

我正在开发一个项目,该项目需要基于相对复杂的规则集进行业务逻辑计算。计算将在以下平台上执行:

  • Android 应用
  • iOS 应用
  • Java EE 应用程序容器

业务逻辑不依赖于任何特定于平台的细节,而是严格地关于“数字运算”。

为了避免 Java 和 Objective C 的双重实现,这需要复杂的测试等等,我想创建一个包含实现的 Java 库并在 iOS 应用程序中使用它。

最好的方法是什么?为Objective C做一个本地移植会更好吗?反过来用Objective C编写库并在Android/Java上使用会更好吗?

【问题讨论】:

    标签: android ios java


    【解决方案1】:

    您无法在 iOS 应用程序中使用 Java 库。 Java 需要运行时来解释 (JRE),而 iOS 上没有。

    从技术上讲,您可以将 Java 库编译为本机代码(有相应的工具),但我不推荐这样做。

    为了在 Android 和 iOS 之间共享业务代码,最好的解决方案是使用纯 C 库。您可以使用 JNI(适用于 Android 的 NDK)从 Java 调用 C 库。

    由于 Obj-C 只是纯 C 的一个小对象层,因此您可以从 Obj-C 轻松使用 C 库。

    您也可以为 NDK 编译 Obj-C,但它比仅使用 C 复杂得多。

    【讨论】:

    • 感谢您的详细回复。我们可能会给 j2objc 一个机会,看看它是否有效。如果没有,下一步将是纯 C 或 Objective-C 中的本机实现。
    【解决方案2】:

    您可以尝试使用 j2objc https://code.google.com/p/j2objc/ 将 java 库解析为 Objective C

    更新:这个 Swift Java 桥正在开发中 https://github.com/SwiftJava/SwiftJava/blob/master/README.md

    【讨论】:

    • 对于纯业务逻辑代码 j2objc 效果很好。不支持任何 UI 逻辑。我没有使用 xmlvm.org 的经验我有在 iOS 和 Android 中使用 c 库的经验(使用 NDK)效果很好。
    【解决方案3】:

    Kotlin Native 现在具有 Swift 集成。因此,通过一些构建过程开销,您可以与 iOS 和 Android 共享用 Kotlin 编写的业务逻辑。

    https://blog.jetbrains.com/kotlin/2017/12/kotlinnative-v0-5-released-calling-kotlin-from-swift-and-c-llvm-5-and-more/

    【讨论】:

      【解决方案4】:

      在这种情况下,您应该编写逻辑的 C 实现并将 JNI 用于 android 应用程序。

      这样你就不会重复自己了

      http://en.wikipedia.org/wiki/Java_Native_Interface

      【讨论】:

        【解决方案5】:

        您无法在 iOS 中使用任何与 java 相关的代码或应用程序。您必须在本地端口上工作。 iOS 没有 jvm。

        【讨论】:

        • 用Objective C编写库并在Android/Java上使用会更好吗?
        • 您也不能直接将目标 C 移植到 java。不管怎样,有一个早期的项目叫做code.google.com/p/j2objc。它将目标 C 转换为 java。你可以试一试。无论如何,您为什么不尝试一些独立于平台的开发工具,例如phonegap?
        • @MohammedHabib 他将如何与 J2EE 共享 phonegap 代码?此外,phonegap 和其他类似的独立于平台的框架只有有限的功能。
        • 您不能与 J2EE 共享 phonegap 代码。我只是建议它避免重复您的代码,是的,phonegap 的功能有限。
        • 一般来说,我会在创建 iOS 和 Android 应用程序时重写所有内容。
        猜你喜欢
        • 1970-01-01
        • 2013-01-08
        • 2014-08-07
        • 2020-04-06
        • 2012-04-21
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 2014-02-19
        相关资源
        最近更新 更多