2

我正在使用 j2objc 在 iOS 中编译和使用 java 库。我遵循了以下流程:

  1. http://j2objc.org/docs/Xcode-Build-Rules.html
  2. http://j2objc.org/docs/Required-Link-Flags.html

在我开始导入头文件以使用它们之前,我没有收到任何构建错误:

#import "org/library/Class.h"

找不到文件。我错过了什么?

另一方面,我尝试使用手动翻译的库文件(使用终端 j2objc 命令)。如果我将 .h 和 .m 文件放入 j2objc-dist/include 文件夹中,它们会被编辑器识别,我可以使用这些类而不会出现编译错误。但是,当我尝试构建项目时,它会发现 _OBJ_CLASS__$_Java 类型的错误。我试图将这些文件包含到 Xcode 中的编译列表中,并验证了 libjre_emul.a 的路径,但我仍然收到错误消息。

我的库包含包,因此它在树中有多个文件夹。我的偏好是使用第一种方法(原始 Java 源代码)

JAVA 源数据案例:

  • 构建规则:

Java 源文件 自定义脚本:

/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/j2objc -d ${DERIVED_FILES_DIR} -sourcepath ${PROJECT_DIR}/src/ ** \ --no-package-directories ${INPUT_FILE_PATH};

输出文件:

${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.h
${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.m
  • 构建阶段

将二进制文件与库链接:

libicucore.dylib
Security.framework
libz.dylib
  • 构建设置

链接 - 其他链接器标志:

-ljre_emul -L /Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib -force_load /Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib/libjre_emul.a -l jre_emul -ObjC

搜索路径 - 库搜索路径:

/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/lib

搜索路径 - 用户标题搜索路径:

/Users/xgibert/Desktop/Orekit_iOS/j2objc-dist/include

我的 java 库文件在 Project_root/src 中。树看起来像这样:

root/
    src/
       org/
          orekit/
                data/
                time/
                ...
          apache/
                ...

在我的 ViewController.m 文件中,我尝试使用以下行导入但没有成功(找不到文件):

#import "org/orekit/data/DataProvidersManager.h"
4

1 回答 1

3

Xcode 假定所有源代码都在顶级目录中,因此您描述的导入失败。如Xcode-Build-Rules页面中所述,--no-package-directories需要该标志,因为它将所有生成的文件输出到指定的构建目录而没有子目录,并生成正确的 #import 指令。

j2objc-sample-reversi是一个演示包含 Java 源代码和包的示例项目。它的用户界面很烂(我写的,叹气),但游戏引擎还不错;如果您需要更强大的对手,请在此处提高引擎强度。

于 2015-07-08T17:18:52.623 回答