Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java j2objc Xcode生成规则,不识别导入_Java_Xcode_J2objc - Fatal编程技术网

Java j2objc Xcode生成规则,不识别导入

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

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

  • 在开始导入头文件以使用它们之前,我不会收到任何生成错误:

    #import "org/library/Class.h"
    
    找不到这些文件。我错过了什么

    另一方面,我尝试使用手动翻译的库文件(使用终端j2objc命令)。如果我将.h和.m文件放入j2objc dist/include文件夹,编辑器就会识别它们,并且我可以使用这些类而不会出现编译错误。但是,当我尝试构建项目时,它会发现类型为_OBJ_CLASS_u$\u 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\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"