Java j2objc Xcode生成规则,不识别导入
我正在使用j2objc在iOS中编译和使用java库。我遵循了以下流程: 在开始导入头文件以使用它们之前,我不会收到任何生成错误:Java j2objc Xcode生成规则,不识别导入,java,xcode,j2objc,Java,Xcode,J2objc,我正在使用j2objc在iOS中编译和使用java库。我遵循了以下流程: 在开始导入头文件以使用它们之前,我不会收到任何生成错误: #import "org/library/Class.h" 找不到这些文件。我错过了什么 另一方面,我尝试使用手动翻译的库文件(使用终端j2objc命令)。如果我将.h和.m文件放入j2objc dist/include文件夹,编辑器就会识别它们,并且我可以使用这些类而不会出现编译错误。但是,当我尝试构建项目时,它会发现类型为_OBJ_CLASS_u$\u J
#import "org/library/Class.h"
找不到这些文件。我错过了什么
另一方面,我尝试使用手动翻译的库文件(使用终端j2objc命令)。如果我将.h和.m文件放入j2objc dist/include文件夹,编辑器就会识别它们,并且我可以使用这些类而不会出现编译错误。但是,当我尝试构建项目时,它会发现类型为_OBJ_CLASS_u$\u Java的错误。我试图将这些文件包含到Xcode中的编译列表中,并验证了libjre_emul.a的路径,但仍然出现了错误
我的库包含包,因此它在树中有多个文件夹。
我倾向于使用第一种方法(原始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\u root/src中。这棵树看起来像这样:
root/
src/
org/
orekit/
data/
time/
...
apache/
...
在我的ViewController.m文件中,我尝试使用以下行导入,但未成功(未找到文件):
Xcode假定所有源都位于顶级目录中,因此您描述的导入将失败。如页面所述,不需要
--no package directories
标志,因为它将所有生成的文件输出到指定的生成目录,而不包含子目录,并生成正确的导入指令
下面是一个示例项目,该项目演示了如何在包中包含Java源代码。它的UI很烂(我写的,叹气),但游戏引擎很不错;如果你需要一个更强硬的对手,那就加大引擎的力度。我看到了示例项目,我认为它是这样的,只是因为它很简单,而不是因为它是一个约束。这意味着唯一的方法是在构建之前重命名java源代码中的所有引用,或者我应该将文件按原样放在顶层?Thanksnether:使用--no package directories标志,输出文件及其导入都是在没有子目录的情况下生成的。无需移动或编辑Java源代码。在您的示例中,对org.library.Class的引用被导入为带有此标志的“#include”Class.h”,而不是“#include”org/library/Class.h”。很抱歉,我无法使用Xcode进行导入。如果我理解正确,我应该在src/下导入java源代码。。。维护包树。然后使用--no-package目录使.h和.m文件不带包,并且在我的应用程序中,我导入了不带包前缀的类。但问题是Xcode脚本:在-sourcepath中有一个路径,它找不到任何文件,因此它们不会被翻译。使用find-name“*.java”告诉我java文件中的引用存在问题。你能给我一个这个脚本的例子,找到所有嵌套的java文件吗?解决了!好的,我注意到的一点是,即使我们使用xcode规则脚本,导入也必须使用组而不是文件夹。我们可以保持原始的包结构,并使用--no-package目录将所有目录输出到相同的级别。非常感谢你的帮助!我将更新文档以提及这一点——感谢您的反馈!
#import "org/orekit/data/DataProvidersManager.h"