2

我正在尝试为 iOS 编译 Apache 数学。

我正在使用这个叉子:https ://github.com/j2objc-contrib/j2objc-common-libs-e2e-test

这个库正在使用 J2Objc 版本:0.9.8 并且 J2Objc-Graddle 插件也很旧,它抛出了与 ARC 相关的错误。在 Google 之后,我发现将 J2Objc 版本更新到 1.0.1 可以修复它,我更新了版本。文件编译成功,但在归档步骤失败并出现错误:静态库归档程序在归档 liborg.apache.commons-commons-math3-j2objc.a 时失败

我从这里按照步骤操作:http: //dabugger.blogspot.com/2015/03/java-to-objective-c-journey.html

这是详细的日志:https ://gist.github.com/iducool/ef1531302171c1e59fe988ce5e20d37b

如果有人可以告诉我正确或适当的步骤或指出此问题的原因或解决方案,那将非常有帮助。如果有的话,我也很高兴听到这个库的替代品[我已经搜索过但没有找到任何东西]。

更新:

我开始使用 XCode 构建规则来使用 J2Objc,而不是 Gradle 插件。我已经下载了 J2Objc,并且有一个“Hello”示例,它能够运行简单的 Jave 文件。我试过了,它工作正常。

我已将 Apache 数学库添加到同一个项目中(以节省时间进行设置和遇到错误)并将源路径更新到 BuileRules 脚本中。XCode 正在考虑 java 文件并尝试编译它,但它显示该库中的包错误。

源代码目录结构

收到这么多抱怨找不到包的错误这是其中的一个示例:

    error: /Users/myUser/Documents/j2objc-2.4/examples/Hello/Hello/java/org/apache/commons/math3/util/Precision.java:22: 
package org.apache.commons.math3.exception does not exist

更新 1

使用以下命令:

./j2objc  --build-closure -g -d ./gjava -sourcepath /Users/myUser/Downloads/commons-math3-3.6.1-src/src/main/java `find /Users/myUser/Downloads/commons-math3-3.6.1-src/src/main/java -name '*.java'`

我能够生成 Objective-C 类。但是这些类在几乎所有具有类似路径的导入中都会出错,

#include "org/apache/commons/math3/FieldElement.h"

错误 :

'org/apache/commons/math3/FieldElement.h' 文件未找到

所有编译时错误都已解决。尝试使用类,看看它是否有效。我会在一段时间内发布答案。

4

2 回答 2

1

Xcode 无法处理生成具有相对源目录的源文件的规则。虽然它是老式的,但使用 Make 可能是您最简单的选择,因为j2objc/make有宏来使它更容易。jsr305子项目就是对此的简单演示。

要在 Xcode 中构建 make 子项目,请创建一个 External Build System 目标(在跨平台下)并在其 Info 参数中调用 make。JreEmulation项目的j2objc 构建目标就是一个示例。

于 2019-06-23T01:13:56.717 回答
0

有多种使用 J2Objc 的方法。以下是对我有用的步骤,

  1. 从这里下载 J2OBJC 发行版:https ://github.com/google/j2objc/releases [请注意下载发行版不是源代码。如果您下载源代码,那么您需要先构建 J2OBJC]
  2. 打开终端。导航到下载的 J2Objc 文件夹。通过更改源路径和目标路径来触发以下命令,

    $j2objc --build-closure -g -d {DestinationPath}-sourcepath {SourcePath}`find {SourcePath}-name '*.java'`

    {DestionatPath} : J2OBJC 将在此目录中生成 Java 文件。

    {SourcePath} :这应该是所有 java 文件都存在的根文件夹的路径。

    示例命令: $./j2objc --build-closure -g -d ./generatedjava -sourcepath /Users/myUser/Downloads/commons-math3-3.6.1-src/src/main/java `find /Users/myUser/下载/commons-math3-3.6.1-src/src/main/java -name '*.java'`

    此命令将从源路径中获取所有 java 文件并将其转换为 Java 文件。

  3. 以上命令将在 org/apache/common 结构的目标文件夹中生成所有 .h 和 .m 文件。因此,将此根文件夹“org”拖到您的项目中。

  4. 添加框架:打开您的 XCode 项目。选择目标。选择常规选项卡。转到Linked libraries and Framework部分。

  5. 按 + 按钮。选择添加其他。导航到路径 {您下载 J2Objc 的文件夹}/frameworks/JRE.framework 并添加它。

  6. 设置标题搜索路径和框架搜索路径。

    HEADER_SEARCH_PATHS = "${J2OBJC_HOME}/frameworks/JRE.framework/Headers"; FRAMEWORK_SEARCH_PATHS = ${SRCROOT} "${J2OBJC_HOME}/frameworks";

{J2OBJC_HOME} :您下载的 J2Objc 文件夹的路径。

如果一切就绪,请尝试编译您的项目。

注意:最新版本的预编译 J2Objc 已放弃对 Armv7 架构的支持。因此,如果您遇到与架构相关的错误并且想要支持 Armv7,那么您可以自己编译 J2Objc 或下载 J2Objc 2.2 版。

于 2019-07-06T10:35:17.677 回答