使用j2ojbc时如何包含"import"?

How to include "import" when using j2ojbc?

您好,我正在尝试将 java 项目转换为 objc。但是,当我尝试这样做时仍然存在一些问题。

错误:包 com.zzz.yyy.xxx 不存在 导入 com.zzz.yyy.xxx.测试;

例如:

error: package com.google.gson does not exist import com.google.gson.Gson;

error: package com.google.gson.stream does not exist import com.google.gson.stream.JsonReader;

我们可以使用-classpath来满足jar文件的需求。我们如何满足这些包裹的需求?

就像 Java 一样,您的应用从其他库引用的代码需要在应用执行时可用,这些库引用的代码也是如此。对于 j2objc,这意味着您的代码所依赖的所有库也必须转换为 Objective C 并包含在您的 iOS 应用程序中。 -class路径应该只包含有翻译的 jar(例如 j2objc 发行版中包含的那些,如 JUnit 和 Guava),或者稍后会有翻译。

对于像 Gson 这样的外部库,您需要下载其 source code 或带有其源代码的 jar 文件,并将该 jar 文件或源代码的根目录添加到您的 -sourcepath 中。不过,它仍然需要翻译。许多开发人员发现更容易从 javac 开始构建一个 -sourcepath 参数而不依赖于 class 路径,然后将 "javac" 更改为 "j2objc" 并添加任何 j2objc 特定的标志(这就是为什么这两个编译器共享许多标志。

如果您在 command-line 上构建,j2objc 的 --build-closure 标志将转换您列出的源,然后(像 javac)编译它在指定源路径上找到的所有引用源.这样做的好处是只编译你的应用程序需要的实际代码,而不是整个库。但是,像 Xcode 这样的构建工具在使用此标志(以及 javac 的行为)时遇到问题,因为规则输出文件列表无法从其输入列表中构建。

如果您的应用程序只需要解析基本的 Json,您可以改为使用 j2objc 的 JRE 仿真中内置的 org.json package。它与 Android 上的代码相同,所以它是 cross-platform。但是许多已发布的应用程序在 iOS 上使用 Gson,因此这不应该成为障碍。